65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2023年3月23日

CPOL

15分钟阅读

viewsIcon

15751

在本文中,我使用 CodeProject.AI 服务器、Agent DVR 和 Home Assistant 容器来检测摄像头画面中是否有人,然后开始录制,接着拍摄一张快照并将其发送到我的手机,附带警报。

自从我开始使用 Home Assistant 以来,我一直想在手机上收到 AI 检测的警报。一旦我发现 Home Assistant 有一个易于下载和设置的移动应用程序,我立刻设想了一个实际用例场景。是的,我曾使用 CodeProject.AI 服务器检测过狗,但我并不担心狗闯入我的家。所以在这里,我做了一些更实际的事情。在本文中,我使用 CodeProject.AI 服务器、Agent DVR 和 Home Assistant 容器来检测摄像头画面中是否有人,然后开始录制,接着拍摄一张快照并将其发送到我的手机,附带警报。

我的设置

本文假设您正在使用 Windows (10),已安装 Docker Desktop,已安装 CodeProject.AI 服务器,并已设置好带有 RTSP 固件的 Wyze Cam v3。您绝对可以使用其他 摄像头来实现此功能,本文仅以 Wyze Cam 为例。以下是概述

设置 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.exeSetup.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。

不过,如果您有任何问题,请随时在下面的评论区提问。

© . All rights reserved.