【教程】小安派BW21-CBV-Kit——运动检测上传到谷歌

[复制链接]
查看26 | 回复0 | 前天 16:17 | 显示全部楼层 |阅读模式

用料

  • BW21-CBV-Kit x 1
  • Micro SD 卡 x1
  • Google 帐户 x1
  • Line 帐户 x2

示例

说明

在这个例子中,我们将使用配备 AI 驱动运动检测模型的 BW21-CBV-Kit ,通过板载摄像头传感器 (JX-F37P) 捕捉可疑动作。检测到后,系统会捕获图像,将其保存到 SD 卡,将其上传到 Google Drive,同时通过 Line Notify 向用户的手机发送警报,从而确保快速响应和增强安全性。

实现流程

  1. 设置 Google Script

一种 Google Apps 脚本功能,旨在处理 POST 请求,以便将捕获的照片保存到 Google Drive。它的主要功能包括接收文件和一些相关参数,然后将该文件保存到 Google Drive 中的特定文件夹。在我们的例子中,当 AMB82 检测到运动时,它会拍摄一张照片并保存到 SD 卡中。此照片图像将传输到 Google Drive 并保存到用户指定的文件夹中。最后,它使用 Line Notify 发送一条消息,其中包含已保存图像文件的链接。

image.png

  • 接下来,创建一个新的 Google Script 项目,将下面的脚本复制到 “Code.gs” 文件中,将其重命名为 “amb82_doPost_test”,然后单击 “保存” 图标以保存您的脚本:

image.png

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” 在脚本发布前初始化必要的配置:

image.png

  • 在“New deployment”配置菜单下的“Select type”中,选择将脚本部署为“Web 应用程序”,如果脚本是公共项目,则向使用脚本的“任何人”授予权限,然后单击“Deploy”。
  • Google 要求通过登录您自己的 Google 帐户凭据来“授权访问”,以便脚本可以从您的 Google Drive 中检索信息。
  • 点击 “Advanced” -> “Go to amb82-doPost_test (unsafe)”,让 Google 脚本可以:“查看、编辑、创建和删除你所有的 Google Drive 文件”。
  • 部署完成后,将您的“部署 ID”复制到示例代码中,并将其替换为示例突出显示部分中的“myScript”变量。

image.png

image.png

  1. 设置 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 帐户登录。

image.png

  1. 上传示例

“文件” -> “示例” -> “Multimedia” -> “MotionDetectionGoogleLineNotify” 中打开示例。

image.png

  • 由于视频接收端是移动设备,因此在高亮显示的代码段中,我们将视频分辨率设置为 VIDEO_D1 (720×480),以限制视频接收延迟,而不是使用默认的视频设置。

image.png

  • 在突出显示的代码片段中,在“ssid”中填写您的 WiFi 名称,在“pass”中填写 WiFi 密码。

由于视频流接收端是手机,我们建议使用 5G 网络,因为它具有更低的延迟、更高的容量和更大的带宽,可以提供更好的视频流质量。

image.png

  • 编译代码并将其上传到 BW21-CBV-Kit。
  • 按下 Reset 按钮后,等待开发板连接到 Wi-Fi 网络。
  • 主板的 IP 地址和 RTSP 的网络端口号将显示在 Serial Monitor 中。您可以从链接下载 VLC 媒体播放器 此处。
  • 软件安装完成后,打开 VLC 媒体播放器,然后转到“媒体”->“打开网络流”。

image.png

  • 确保您的 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。

image.png

  • 接下来,单击“播放”以开始 RTSP 流式传输。来自摄像机的视频流将显示在 VLC 媒体播放器中。
  • 当在视频中检测到运动时,将生成一个框,将检测到的运动包围起来。

image.png

  • 这张照片将被保存到 SD 卡中,然后传输到 Google Drive 并同时发送到 Line Notify。

image.png

image.png

程序说明

  1. Google 脚本:https://github.com/fustyles/webduino/blob/gs/SendCapturedImageToGoogleDriveAndLinenotify_doPost.gs
  2. https://github.com/fustyles/Arduino/tree/master/ESP32-CAM_GoogleDrive_Linenotify
用心做好保姆工作
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则