Multimedia - 動作偵測 Google Line Notify

材料準備

  • AmebaPro2 [ AMB82 MINI ] x 1
  • Micro SD 卡 x1
  • Google 帳號 x1
  • Line 帳號 x2

範例說明
介紹

在此範例中,我們將使用搭配動作偵測AI模型的 AmebaPro2 開發板,透過板載鏡頭感測器 (JX-F37P) 捕捉可疑動作。 一旦偵測到,系統會記錄影像,將其儲存到SD卡,上傳到Google Drive,同時透過Line Notify向使用者的手機發送警報,確保快速反應並提高安全性。

流程

1. 設定 Google Script

Google Apps Script 功能可以用來處理 POST 請求,以便將紀錄的照片儲存到 Google 雲端硬碟。 它的主要功能包括接收文件和一些相關參數,然後將該文件保存到 Google Drive 中的特定資料夾中。 在我們的例子中,當 AMB82 偵測到動作時,它會捕捉照片並儲存到 SD 卡。 此照片影像將傳輸到 Google 雲端硬碟並儲存到使用者指定的資料夾中。 最後,它使用Line Notify發送一條包含已儲存圖像檔案的連結的訊息。

首先,使用自己的Google帳號登入Google Script官方網站,點選「Start Scripting」按鈕:https://www.google.com/script/start/

1

接下來,建立一個新的 Google Script 項目,將以下腳本複製到“Code.gs”檔案中,將其重新命名為“amb82_doPost_test”,然後點擊“Save”圖示來儲存腳本:

1

function doPost(e) {
// Retrieve variables from the POST requests
var myFoldername = e.parameter.myFoldername;
var myFile = e.parameter.myFile;
var myFilename = Utilities.formatDate(new Date(), "GMT", "yyyyMMddHHmmss")+"-"+e.parameter.myFilename;
var myToken = e.parameter.myToken;

// Store the file type and Base64 encoded data
var contentType = myFile.substring(myFile.indexOf(":")+1, myFile.indexOf(";"));
var data = myFile.substring(myFile.indexOf(",")+1);
data = Utilities.base64Decode(data);
var blob = Utilities.newBlob(data, contentType, myFilename);

// Save a captured image to Google Drive.
var folder, folders = DriveApp.getFoldersByName(myFoldername);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(myFoldername);
}
var file = folder.createFile(blob);
file.setDescription("Uploaded by " + myFilename);

// Returning Results
return ContentService.createTextOutput(myFoldername+"/"+myFilename+"\n"+imageUrl+"\n"+res);
}

該腳本處理 POST 請求,提取「myFoldername」、「myFile」、「myFilename」和「myToken」等參數。 並對 Base64 編碼的檔案資料進行解碼,並使用解碼後的資料及其內容類型建立 Blob 物件。 Base64 編碼是一種使用 64 個字元對二進位資料進行編碼的方法,將二進位資料轉換為 ASCII 字串,以便於以文字格式傳輸或儲存。

該腳本根據「myFoldername」參數在 Google Drive 中尋找或建立相應的資料夾。 然後圖像資料將儲存在該資料夾中。 最後傳回包含資料夾名稱、檔案名稱、影像 URL 和Line Notify的摘要。

腳本準備好後,選擇“Deploy”->“New deployment”,在腳本發布前初始化必要的配置:

1

在“New deployment”設定選單下的“Select type”中,選擇將腳本部署為“Web app”,如果是公共項目,則授予使用腳本的“Anyone”權限,然後按一下“Deploy” ”。 Google 要求透過登入您自己的 Google 帳戶憑證來“Authorize access”,以便腳本可以從您的 Google 雲端硬碟檢索資訊。

點擊“Advanced”->“Go to amb82-doPost_test (unsafe)”,允許 Google 腳本:“See, edit, create, and delete all of your Google Drive files”。 部署完成後,將「Deployment ID」複製到範例程式碼中,並將其替換為範例中標記的「myScript」變數。

1

1

2. 設定 Line Notify

Line Notify 是一項通知服務,可讓使用者透過 Line 應用程式從各種來源(例如網站、應用程式、裝置或其他線上服務)接收通知訊息。 有兩種方法可以將 Google 腳本連結到 Line Notify,即 Google 腳本和 IFTTT。 在本文中,我們將主要使用 IFTTT,因為它允許您直接在 Line Notify 中檢視圖片。 另一方面,Google 腳本僅提供圖像的 URL 連結。 要了解如何設定 IFTTT Applet 的詳細信息,請參閱連結

在此範例中,要在偵測到動作的照片上傳到Google Drive 時在Line Notify 中收到通知,您需要使用「New photo in Google Drive」作為輸入並「Send message in Line Notify」來設定IFTTT小程式作為輸出。 IFTTT 小程式可讓您使用 Google 或 Line 帳戶登入。

1

3. 上傳範例

在 “File” -> “Examples” -> “Multimedia” -> “MotionDetectionGoogleLineNotify” 中開啟範例。

1

由於視訊接收端是行動設備,因此在標記的程式碼片段中,我們不使用預設的視訊設置,而是將視訊解析度設定為VIDEO_D1(720×480)以限制視訊接收延遲。

1

在標記的程式碼片段中,在「ssid」中填入您的 WiFi 網路 SSID,在「pass」中填入網路密碼。 由於視訊串流接收端是手機,我們建議使用5G網絡,因為它具有更低的延遲、更高的容量和更大的頻寬,以提供更好的視訊串流品質。

1

編譯程式碼並將其上傳到Ameba。 按下重置按鈕後,等待開發板連接到 Wi-Fi 網路。 RTSP 會用到的 IP 位址和網路連接port號碼將顯示在Serial Monitor中。 您可以從此處的連結下載 VLC 媒體播放器。

軟體安裝完成後,開啟VLC媒體播放器,進入「Media」->「Open Network Stream」。

1

確保您的 PC 連接到與 AmebaPro2 相同的網路以進行串流傳輸。 由於使用 RTSP 作為串流協議,因此在 VLC 媒體播放器中輸入「rtsp://{IPaddress}:{port}」作為網路 URL,將 {IPaddress} 替換為 AmebaPro2 的 IP 位址,並將 {port} 與Serial Monitor中顯示的RTSP 連接埠(例如,「rtsp://192.168.1.154:554」)。 預設 RTSP 連接埠號碼為 554。如果同時有兩個 RTSP 串流,第二個連接埠號碼預設為 555。

1

接下來,點選「Play」開始 RTSP 串流。 來自鏡頭的視訊串流將顯示在 VLC 媒體播放器中。 當在影片中偵測到動作時,將生成一個檢測到動作的標示框。

1

該照片將保存到 SD 卡中,然後傳輸到 Google Drive,同時發送到 Line Notify。

1

1

程式碼說明

請先確認已安裝QQ通訊軟體