使用 CodeProject.AI 服务器和 Home Assistant 进行人物检测





5.00/5 (1投票)
在本文中,我使用 CodeProject.AI 服务器、Agent DVR 和 Home Assistant 容器来检测摄像头画面中是否有人,然后开始录制,接着拍摄一张快照并将其发送到我的手机,附带警报。
自从我开始使用 Home Assistant 以来,我一直想在手机上收到 AI 检测的警报。一旦我发现 Home Assistant 有一个易于下载和设置的移动应用程序,我立刻设想了一个实际用例场景。是的,我曾使用 CodeProject.AI 服务器检测过狗,但我并不担心狗闯入我的家。所以在这里,我做了一些更实际的事情。在本文中,我使用 CodeProject.AI 服务器、Agent DVR 和 Home Assistant 容器来检测摄像头画面中是否有人,然后开始录制,接着拍摄一张快照并将其发送到我的手机,附带警报。
- 我的设置
- 设置 Home Assistant 容器
- 设置 Agent DVR 与 CodeProject.AI 服务器
- 设置 Home Assistant 手机应用程序
- 检测到人物并触发警报、录制和快照到您的手机
我的设置
本文假设您正在使用 Windows (10),已安装 Docker Desktop,已安装 CodeProject.AI 服务器,并已设置好带有 RTSP 固件的 Wyze Cam v3。您绝对可以使用其他 摄像头来实现此功能,本文仅以 Wyze Cam 为例。以下是概述
- Wyze Cam v3。如果您需要帮助安装 Wyze Cam v3,请参阅我的指南设置您的 Wyze Cam。
- Docker Desktop。如果您需要帮助来设置 Docker,请参阅我的指南 安装 Docker Desktop。
- CodeProject.AI 服务器。如果您需要帮助来安装 CodeProject.AI 服务器,请参阅我的指南 安装 CodeProject.AI 服务器。
设置 Home Assistant 容器
我们需要做的第一件事是为 Home Assistant 创建一个配置文件。我们将在 Docker 中设置 Home Assistant,但我们需要一个可以访问和修改的 Home Assistant 配置文件。
配置文件将在您运行 Docker pull 的任何驱动器上,就我而言,是 C:\ 驱动器。所以打开 Windows 文件资源管理器,转到 C:\ 驱动器,在文件夹区域右键单击,然后转到 **新建 -> 文件夹**。输入您想要的文件夹名称,我称我的为“haconfig”。
现在转到 Windows 的 **开始** 按钮,输入“CMD”并打开命令提示符。然后键入
docker run -d --name homeassistant --privileged --restart=unless-stopped
-e TZ=America/Edmonton -v c:\haconfig:/config
-p 8123:8123 homeassistant/home-assistant:latest
其中 --name homeassistant
是您的容器名称,TZ=America/Edmonton
是 Home Assistant 的时区(只需输入您自己的时区即可),而 -v c:\haconfig:/config
是配置文件夹的路径(如果您在 C:\Users\Joseph\haconfig 中创建了一个文件夹,则应为 -v C:\Users\Joseph\haconfig:/config
)。
好了,让我们登录 Home Assistant。在浏览器中,输入 https://:8123。输入您的 **名称**(这会自动开始输入为您的 **用户名**,小写),然后选择一个密码。请务必将此密码记下来,您将需要它很多次。点击 **创建账户**。
接下来输入 Home Assistant 的更多详细信息。您可以为 Home Assistant 指定一个名称(我很有创意,称我的为“Home”),然后选择 **国家/地区**、**语言**、**时区** 和 **货币**。点击 **下一步**。
接下来是一个关于数据共享的屏幕。我没有兴趣共享,所以我点击 **下一步**。
这个下一页是如果您有物联网设备,它们会显示出来的地方。我这里什么都没显示。点击 **Finish**(完成)。
设置 Agent DVR 与 CodeProject.AI 服务器和 Wyze Cam
Agent DVR 是一个监控软件,它是 CodeProject.AI 服务器、Wyze Cam 和 Home Assistant 之间的有用中间件。例如,为了让 Wyze Cam 在 Home Assistant 中工作,您必须在 Home Assistant 中设置一个集成,并在 Docker 中运行另一个容器(docker-wyze-bridge
)。如果您对此感兴趣,我有一个 关于如何设置 docker-wyze-bridge 的指南。目前,Agent DVR 不仅节省了将 Wyze Cam 与 Home Assistant 一起使用的步骤,而且 Agent DVR 还提供了使用 CodeProject.AI 服务器的检测来设置触发器的能力。
在另一篇文章中,我演示了 如何设置 Agent DVR 和 CodeProject.AI 服务器,但有一个新版本的 Agent DVR 与 CodeProject.AI 服务器的集成更好,所以这里有一个 Agent DVR 和 CodeProject.AI 服务器的更新设置。
请注意,这是针对版本 4.5.8.0 的,所以如果您使用的是不同版本的 Agent DVR,其中一些内容可能看起来不一样。
第一步是访问 ispyconnect.com 下载页面。我将进行 Windows 安装,所以我选择 **Agent DVR - Windows** 并点击 **下载** 按钮。这会下载 Agent_Setup_Windows.zip,需要解压缩。zip 文件中的两个文件是 install.exe 和 Setup.exe。据我所知,这两个文件做的事情完全相同。
所以以管理员身份运行 install.exe。要安装 Agent DVR,它需要访问您的家庭网络,所以当 Windows Defender 防火墙窗口弹出时,点击 **允许访问**。
接下来在 Agent Setup Utility 屏幕上,有一个选项可以选择安装目标文件夹、Agent DVR 的本地服务器端口,然后是一些其他安装选项。我将保留所有这些默认设置,然后点击 **下一步**。如果您选择安装托盘应用程序选项,第二个 Windows Defender 防火墙窗口将弹出请求访问。
Agent DVR 将在您的浏览器中启动,地址为 https://:8090,并提供一系列用于开始使用 Agent DVR 的帮助选项。点击 **确定**。
然后会弹出一个语言选择。英语是默认选项,所以点击 **确定**。
现在来设置摄像头。转到左上角的 **服务器菜单**。
然后点击 **新设备**。
从这里,有一个页面询问您想要哪个网格槽。因为还没有任何设备,所以它是空白的。点击 **+** 按钮以打开 **新设备** 菜单。
现在,选择 **视频源**。我尝试使用 **IP 摄像头向导**,但我无法使用该选项设置我的 Wyze Cam v3,所以选择 **视频源**!
一开始,Agent DVR 就想知道您是否打算为此摄像头使用警报,无论您是否希望在检测到运动时录制,是否希望降低视频分辨率,或者是否希望录制原始素材。我将启用 **警报** 和 **录制原始素材**。
接下来是摄像头设置窗口。
第一件事是更改 **源类型** 为 **IP 摄像头**。这会打开网络源窗口。我使用的是已设置为支持 RTSP 的 Wyze Cam v3,所以我输入了我为 Wyze Cam 创建的设置。如果您想了解我如何设置 Wyze Cam v3,请查看我的指南 设置 Wyze Cam。输入摄像头的 **用户名**(我的摄像头名为“eyespy”)、**密码** 和 **直播 URL**。对于 **直播 URL**,我将使用 RTSP 流地址,它看起来像 rtsp://username:password@192.169.0.1/live,其中用户名和密码是您刚刚输入的选项。点击 **确定**。
然后,在摄像头设置中,为您的摄像头指定一个名称(我称我的为 Eye Spy),然后点击 **确定**。
就是这样!Wyze Cam v3 正在与 Agent DVR 配合使用。
现在是时候让 CodeProject.AI 服务器与 Agent DVR 一起工作了。如果您之前没有设置过 CodeProject.AI 服务器,请查看我的 设置 CodeProject.AI 服务器的指南。在 Agent DVR 中,点击服务器菜单按钮。然后,在 **配置** 部分下,选择 **设置**。
然后,在 **常规** 下拉菜单中,选择 **AI 设置**。然后点击 **配置** 旁边的 **...** 按钮。
现在点击 **添加** 以添加一个 **AI 服务器**。
在这里,为您的 AI 服务器输入一个名称(所有酷孩子都输入“CodeProject.AI Server”),然后输入 CodeProject.AI 服务器的 URL,即 https://:32168,然后点击 **确定** 接受这些设置,再点击 **确定** 三次以退出 Agent DVR 菜单。
在浏览器中输入 https://:32168 来启动 CodeProject.AI 服务器仪表板,并确保对象检测 (YOLOv 6.2) 正在运行。
设置 Home Assistant 手机应用程序
为了在手机上接收 Home Assistant 的通知,您需要设置 Home Assistant 应用程序,即 Home Assistant Companion。我正在使用 Android 手机进行此操作,但它也适用于 iOS。
从 Google Play 商店搜索“home assistant”。然后点击 **安装**。打开应用程序,它会带您进入欢迎屏幕。点击 **继续**。
对于您来说,Home Assistant Companion 可能会自动找到 Home Assistant 服务器。对我而言,我总是点击 **手动输入地址**。
输入 Home Assistant 的 URL。https://:8213 可能对某些人有效,我使用 IP 地址,例如 http://192.169.0.1:8123。如果您不知道您的 IP 地址,请转到 Windows 的 **开始** 按钮,开始输入“CMD”,然后选择命令提示符。然后,键入 ipconfig
。您需要的地址是 IPv4 地址。然后点击 **连接**。
接下来,输入您在浏览器中用于 Home Assistant 的 **用户名** 和 **密码**,然后点击 **登录**。
Home Assistant Companion 询问您是否要启用位置跟踪。我不需要这个,所以我只是点击 **继续**。
但是,我确实想启用通知。点击 **继续**,然后当手机提示请求通知时,点击 **允许**。
就是这样!Home Assistant 现在已在您的手机上设置好。安装 Home Assistant Companion 在您手机上的好处是,它会自动将设备及其实体集成到 Home Assistant 中,然后可以用于自动化。
检测到人物并触发警报、录制和快照到您的手机
现在我们已经设置好了所有工具,让我们开始实际应用。这是如何使用 Agent DVR、CodeProject.AI 服务器检测 Wyze Cam v3 中的人物,触发录制,并通过 Home Assistant 将快照发送到您的手机。在本节中,我们将在 Agent DVR、Home Assistant、CodeProject.AI 服务器和手机之间切换,所以请将它们全部保持打开状态并易于访问。
在 Agent DVR 中设置人物检测
首先,我们需要在 Agent DVR 中设置人物检测功能。转到摄像头设置并点击 **编辑**。
在 **常规** 下拉菜单下,选择 **警报**。我们设置 Agent DVR 中操作触发器的方式是通过警报,所以我们只需要确保警报已启用,并且 **模式** 设置为 **仅操作**。点击 **确定**。
现在再次进入摄像头设置,从 **常规** 下拉菜单中,选择 **对象检测**,它位于 **AI** 下方的列表底部。在此处,确保对象检测已启用。并且由于 AI 服务器已设置好,从 **AI 服务器** 下拉菜单中,选择您为 CodeProject.AI 服务器指定的名称。为了加快测试过程,**模式** 应设置为 **检测到运动**,这样当我在摄像头画面中移动时,CodeProject.AI 服务器会自动运行检测。
可选地,在 **要查找的对象** 和 **查找** 下,点击 **...**。为了限制选项,在 **查找** 字段中,我们可以简单地输入“person”。点击 **确定** 接受对象列表,然后点击 **确定** 接受对象检测设置。
再次回到摄像头设置,从 **常规** 下拉菜单中,选择 **检测器**。在此处,确保 **检测器** 设置为 **简单**。简单意味着 AI 检测将在运动时触发,这正是我们为方便测试所需要的。点击 **确定**。
现在开始真正发挥作用。从摄像头设置中,在 **常规** 选项卡下,选择 **操作**。点击 **添加**。
在 **如果** 下拉菜单中,选择 **AI: 对象已找到**,然后在 **标签** 字段中,输入“person”。然后滚动到操作底部,点击 **添加任务 +**。
我们将在同一个操作中设置两个任务。在第一个任务中,下拉菜单中的 **任务** 是 **触发对象检测**,下拉菜单中的 **设备** 是您的摄像头(在我的例子中是 Eye Spy)。在第二个任务中,下拉菜单中的 **任务** 是 **开始录制**,下拉菜单中的 **设备** 是您的摄像头(在我的例子中是 Eye Spy)。点击 **确定** 接受这些任务和操作,然后再次点击 **确定**。
设置 Home Assistant 向您的手机发送快照
现在是时候设置 Home Assistant 所说的“自动化”了。自动化将是我们与 CodeProject.AI 服务器进行的所有操作的基石。自动化是一系列基于触发器(如日期、设备、MQTT 消息、设备状态更改、webhook 等)的触发器和操作,它允许 Home Assistant 创建诸如关灯之类的操作。在这种情况下,我们希望 Home Assistant 在 Agent DVR 从空闲变为录制状态时触发,然后指示摄像头拍摄快照,该快照随后通过 Home Assistant 发送到手机。
首先,我们需要将 Agent DVR 添加为 Home Assistant 的一个集成。Home Assistant 中的集成是连接元素,它们允许 Home Assistant 与其他设备和服务协同工作。在这种情况下,Home Assistant 有一个 Agent DVR 集成,可以无缝连接这两个实体。要添加 Agent DVR 集成,请转到 **Home Assistant** 选项卡,然后点击左侧的 **设置** 选项卡。然后点击 **设备与服务**。
在这里,点击 **+ 添加集成**。
输入然后选择 **Agent DVR**。
现在输入 **主机**,它是 https://:8213 或使用 IP 地址,例如 http://192.169.0.1:8123。然后,当“成功”窗口弹出时,选择您想要的区域(如果您在 Home Assistant 中设置了区域),然后点击 **完成**。
现在来设置自动化。在 Home Assistant 中,返回左侧的 **设置** 选项卡,然后点击 **自动化和场景**。然后点击 **+ 创建自动化**。
然后选择 **创建新自动化**。
点击 **+ 添加触发器**,然后从 **实体** 下拉菜单中,选择 **Eye Spy**,即实体 camera.eye_spy
。然后在 **从** 下拉菜单中选择 **空闲**,在 **到** 下拉菜单中选择 **录制**。这就是我们设置 Agent DVR 在检测到人物时开始录制的原因,因为它充当了 Home Assistant 的触发器。另外,如果这个摄像头是指向您的前门,也许您会在有人出现在门口时想要录制视频。
然后,在 **操作** 部分下,点击 **+ 添加操作** 并选择 **设备**。从 **设备** 下拉菜单中,选择您的摄像头。对我来说,这是 SM-A536W。然后在 **消息** 中,输入您在检测到人物时希望收到的消息。我想要一些警报性的内容,所以我输入“检测到人物!”。然后在 **标题** 中,输入您希望此消息作为推送通知显示在手机上的标题。我称我的为“Home Assistant 警报”。
实际上,创建这些自动化有两种方法。Home Assistant 提供了一个可视化编辑器,如果您不喜欢代码,还有一个选项是 **在 YAML 中编辑**,如果您右键单击操作右上角的三个点。或者,您可以在 **新建自动化** 右上角的下拉菜单中选择 **在 YAML 中编辑** 来设置整个自动化。点击 **发送通知** 的下拉菜单,然后选择 **在 YAML 中编辑**。
device_id: 656692a0734a65d3ce3df19b31783698
domain: mobile_app
type: notify
message: Person detected!
title: Home Assistant Alert
data:
image: /local/snapshot.jpg
在 title: Home Assistant Alert
下面添加以下两行。Home Assistant 对空格非常挑剔,所以请确保 image: /local/snapshot.jpg
前面有两个空格。不是一个,也不是三个——是两个空格。我们的 Home Assistant 配置文件中实际上没有 local 文件夹,local 表示的是 www,我们将在稍后设置。
现在再次点击 **+ 添加操作**。我们需要在 Agent DVR 状态改变时让摄像头拍摄快照。在 **+ 添加操作** 下拉菜单中,选择 **调用服务**。然后,从 **服务** 下拉菜单中选择 **Camera: Take snapshot**,即服务 camera.snapshot
。然后在 **目标** 下选择 **+ 选择实体** 并选择您的摄像头名称,在我的例子中是 **Eye Spy**。然后在文件名中,输入“/config/www/snapshot.jpg”。
service: camera.snapshot
data:
filename: /config/www/snapshot.jpg
target:
entity_id: camera.eye_spy
如果您更喜欢在 YAML 中执行此操作,操作在 YAML 中的样子如下。
在 Companion Apps 文档 中,您可以对这个自动化进行一些很酷的修改,具体取决于您的设备。例如,如果我使用的是 iOS 设备,我可以传输音频而不是发送图片。该文档是我发现要将快照发送到手机,它需要可以在网上访问。这就是为什么文件名指定了 www 目录。只有此目录中的文件才暴露给互联网。/config
作为您之前命名的配置文件夹的占位符。我的配置文件夹是 haconfig,但只要这是您专门为 Home Assistant 创建的 config 文件夹,它就会将其识别为 /config
,所以请确保将其保留为 /config
,即使您将 config 文件夹命名为其他名称。
因为 Home Assistant 不会自动创建 www 文件夹,所以现在请打开 Windows 文件资源管理器并创建它。
现在我们需要重新启动 Home Assistant。点击左侧导航菜单中的 **开发工具**,然后在 **检查和重启** 下,点击 **重启**,然后再次点击 **重启**。
好了,现在我们准备好了。打开 Agent DVR,确保摄像头已开启,对准您,并在另一个标签页中打开 CodeProject.AI 服务器。
看!检测到人物,并且系统正在录制。如果您想稍后查看录制内容,对我来说,这些视频会显示在一个文件夹中,例如 C:\Program Files\Agent\Media\WebServerRoot\Media\video\YJSXT。
现在来检查手机。是的!正是我们写的警报。点击小箭头下拉菜单,您将看到快照的放大版本。
太棒了!我感觉更安全了。
本文只是展示如何将 CodeProject.AI 服务器用于 Home Assistant 自动化的一种演示。我们最近将 CodeProject.AI 服务器集成到了 Home Assistant 中作为自定义集成。您甚至可以按照那篇文章的步骤进行,并将触发器更改为 codeproject_ai_object
实体的 image_processing
,但我将在另一篇文章中展示如何做到这一点。在 Agent DVR 中设置人物检测的好处是我们还可以触发录制。所以暂时我们就这样。期待下一篇文章,我们将在 Raspberry Pi 4 上设置 CodeProject.AI 服务器和 Home Assistant。
不过,如果您有任何问题,请随时在下面的评论区提问。