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/
接下来,建立一个新的 Google Script 项目,将以下脚本复制到“Code.gs”档案中,将其重新命名为“amb82_doPost_test”,然后点击“Save”图示来储存脚本:
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”,在脚本发布前初始化必要的配置:
在“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」变数。
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 帐户登入。
3. 上传范例
在 “File” -> “Examples” -> “Multimedia” -> “MotionDetectionGoogleLineNotify” 中开启范例。
由于视讯接收端是行动设备,因此在标记的程式码片段中,我们不使用预设的视讯设置,而是将视讯解析度设定为VIDEO_D1(720×480)以限制视讯接收延迟。
在标记的程式码片段中,在「ssid」中填入您的 WiFi 网路 SSID,在「pass」中填入网路密码。由于视讯串流接收端是手机,我们建议使用5G网络,因为它具有更低的延迟、更高的容量和更大的频宽,以提供更好的视讯串流品质。
编译程式码并将其上传到Ameba。按下重置按钮后,等待开发板连接到 Wi-Fi 网路。 RTSP 会用到的 IP 位址和网路连接port号码将显示在Serial Monitor中。您可以从此处的连结下载VLC 媒体播放器。
软体安装完成后,开启VLC媒体播放器,进入「Media」->「Open Network Stream」。
确保您的 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。
接下来,点选「Play」开始 RTSP 串流。来自镜头的视讯串流将显示在 VLC 媒体播放器中。当在影片中侦测到动作时,将生成一个检测到动作的标示框。
该照片将保存到 SD 卡中,然后传输到 Google Drive,同时发送到 Line Notify。
程式码说明