用料
示例
说明
在这个例子中,我们将使用配备 AI 驱动运动检测模型的 BW21-CBV-Kit ,通过板载摄像头传感器 (JX-F37P) 捕捉可疑动作。检测到后,系统会捕获图像,将其保存到 SD 卡,将其上传到 Google Drive,同时通过 Line Notify 向用户的手机发送警报,从而确保快速响应和增强安全性。
实现流程
- 设置 Google Script
一种 Google Apps 脚本功能,旨在处理 POST 请求,以便将捕获的照片保存到 Google Drive。它的主要功能包括接收文件和一些相关参数,然后将该文件保存到 Google Drive 中的特定文件夹。在我们的例子中,当 AMB82 检测到运动时,它会拍摄一张照片并保存到 SD 卡中。此照片图像将传输到 Google Drive 并保存到用户指定的文件夹中。最后,它使用 Line Notify 发送一条消息,其中包含已保存图像文件的链接。
- 接下来,创建一个新的 Google Script 项目,将下面的脚本复制到 “Code.gs” 文件中,将其重命名为 “amb82_doPost_test”,然后单击 “保存” 图标以保存您的脚本:
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 应用程序”,如果脚本是公共项目,则向使用脚本的“任何人”授予权限,然后单击“Deploy”。
- Google 要求通过登录您自己的 Google 帐户凭据来“授权访问”,以便脚本可以从您的 Google Drive 中检索信息。
- 点击 “Advanced” -> “Go to amb82-doPost_test (unsafe)”,让 Google 脚本可以:“查看、编辑、创建和删除你所有的 Google Drive 文件”。
- 部署完成后,将您的“部署 ID”复制到示例代码中,并将其替换为示例突出显示部分中的“myScript”变量。
- 设置 Line Notify
- Line Notify 是一种通知服务,允许用户通过 Line 应用程序接收来自各种来源(例如网站、应用程序、设备或其他在线服务)的通知消息。
- 有两种方法可以将 Google Script 链接到 Line Notify,即 Google Script 和 IFTTT。在本文中,我们将主要使用 IFTTT,因为它允许您直接在 Line Notify 中查看图像。
- 而 Google 脚本仅提供了图像的 URL 链接。要了解如何设置 IFTTT 小程序的详细信息,请参阅链接。
- 在此示例中,要在检测到的运动照片上传到 Google Drive 时在 Line Notify 中接收通知,您需要使用“New photo in Google Drive”作为输入,使用“Send message in Line Notify”作为输出来设置 IFTTT 小程序。
- IFTTT 小程序允许您使用您的 Google 或 Line 帐户登录。
- 上传示例
在 “文件” -> “示例” -> “Multimedia” -> “MotionDetectionGoogleLineNotify” 中打开示例。
- 由于视频接收端是移动设备,因此在高亮显示的代码段中,我们将视频分辨率设置为 VIDEO_D1 (720×480),以限制视频接收延迟,而不是使用默认的视频设置。
- 在突出显示的代码片段中,在“ssid”中填写您的 WiFi 名称,在“pass”中填写 WiFi 密码。
由于视频流接收端是手机,我们建议使用 5G 网络,因为它具有更低的延迟、更高的容量和更大的带宽,可以提供更好的视频流质量。
- 编译代码并将其上传到 BW21-CBV-Kit。
- 按下 Reset 按钮后,等待开发板连接到 Wi-Fi 网络。
- 主板的 IP 地址和 RTSP 的网络端口号将显示在 Serial Monitor 中。您可以从链接下载 VLC 媒体播放器 此处。
- 软件安装完成后,打开 VLC 媒体播放器,然后转到“媒体”->“打开网络流”。
- 确保您的 PC 与 BW21-CBV-Kit 连接到同一网络以进行串流。
- 由于 RTSP 被用作串流协议,因此在 VLC 媒体播放器中输入 “rtsp://{IPaddress}:{port}” 作为网络 URL,将 {IPaddress} 替换为 BW21-CBV-Kit 开发板的 IP 地址,
- 将 {port} 替换为 Serial Monitor 中显示的 RTSP 端口(例如,“rtsp://192.168.1.154:554”)。
默认 RTSP 端口号为 554。如果同时有两个 RTSP 流,则第二个端口号默认为 555。
- 接下来,单击“播放”以开始 RTSP 流式传输。来自摄像机的视频流将显示在 VLC 媒体播放器中。
- 当在视频中检测到运动时,将生成一个框,将检测到的运动包围起来。
- 这张照片将被保存到 SD 卡中,然后传输到 Google Drive 并同时发送到 Line Notify。
程序说明
- Google 脚本:https://github.com/fustyles/webduino/blob/gs/SendCapturedImageToGoogleDriveAndLinenotify_doPost.gs
- https://github.com/fustyles/Arduino/tree/master/ESP32-CAM_GoogleDrive_Linenotify
|