在本文中,将探讨如何将自定义AI模型应用于Agent DVR和CodeProject.AI Server中,以检测快递包裹,并在检测到包裹时自动开始录像。本文假设已经设置并运行了与Agent DVR和CodeProject.AI Server配合使用的摄像头。如果还没有完成这一步,请参考另一篇文章《如何在Windows上使用Wyze Cam设置Agent DVR和CodeProject.AI Server》。
首先,需要一个能够检测包裹的自定义AI模型。本文中,将使用由CodeProject社区工程师Mike Lud训练的模型。Mike Lud开发了一个能够检测包裹的模型。因此,第一步是下载这个模型,并将文件放入CodeProject.AI Server的自定义模型文件夹中。访问Mike Lud的GitHub页面,下载名为package.pt
的文件。然后,将package.pt
复制到CodeProject.AI Server的自定义模型文件夹中,路径为C:\Program Files\CodeProject\AI\modules\ObjectDetectionYolo\custom-models
。
首先,通过在浏览器中输入http://localhost:32168
来打开CodeProject.AI Server。在本文中,使用YOLOv5 6.2来检测物体,因此请确保激活了对象检测(YOLOv5 6.2)。不需要其他模块,所以关闭了所有其他模块。
现在,启动Agent DVR。转到服务器菜单,位于左上角。本文假设CodeProject.AI Server已经设置好了,因此点击Configuration
下的Settings
。然后从General
下拉菜单中选择AI Settings
。点击Configure
旁边的...
按钮。
接下来,点击Edit
图标以更新AI服务器设置。这里有两个需要更新的地方。首先,默认的Endpoint
是/v1/vision/detection
。当使用自定义模型时,这需要修改为/v1/vision/model-name
。在例子中,使用的是package.pt
,因此这需要是/v1/vision/package
。
接下来要更新的是Object Classes
。每当添加自定义模型时,这个对象列表需要更新以包括正在检测的项目。在这种情况下,是“包裹”。默认列表是:
person,bicycle,car,motorcycle,airplane,bus,train,truck,boat,traffic light,
fire hydrant,stop sign,parking meter,bench,bird,cat,dog,horse,sheep,cow,elephant,
bear,zebra,giraffe,backpack,umbrella,handbag,tie,suitcase,frisbee,skis,
snowboard,sports ball,kite,baseball bat,baseball glove,skateboard,surfboard,
tennis racket,bottle,wine glass,cup,fork,knife,spoon,bowl,banana,apple,sandwich,
orange,broccoli,carrot,hot dog,pizza,donot,cake,chair,couch,potted plant,bed,
dining table,toilet,tv,laptop,mouse,remote,keyboard,cell phone,microwave,oven,toaster,sink,
refrigerator,book,clock,vase,scissors,teddy bear,hair dryer,toothbrush
这需要更新为:
person,bicycle,car,motorcycle,airplane,bus,train,truck,
boat,traffic light,fire hydrant,stop sign,parking meter,bench,bird,cat,dog,horse,sheep,
cow,elephant,bear,zebra,giraffe,backpack,umbrella,handbag,tie,suitcase,frisbee,
skis,snowboard,sports ball,kite,baseball bat,baseball glove,skateboard,surfboard,
tennis racket,bottle,wine glass,cup,fork,knife,spoon,bowl,banana,apple,sandwich,
orange,broccoli,carrot,hot dog,pizza,donot,cake,chair,couch,potted plant,bed,
dining table,toilet,tv,laptop,mouse,remote,keyboard,cell phone,microwave,oven,toaster,sink,
refrigerator,book,clock,vase,scissors,teddy bear,hair dryer,toothbrush,package
点击接下来的四个提示中的OK
按钮以接受AI服务器设置。
现在转到摄像头设置,点击实时馈送页面左下角的编辑图标。然后从General
下拉菜单中选择Object Recognition
。点击Configure
前面的...
按钮。
现在“包裹”已经添加到Object Classes
列表中,有一个按钮供它使用。通常包裹是由人送来的,所以设置对象检测为两项,即人和包裹是个好主意。要么输入“person,package”,或者简单地从列表中选择person
和package
按钮。点击这个菜单和下一个菜单中的OK
按钮以接受这些设置。
在尝试让自定义模型工作时,遇到了许多问题。错误是忘记了在AI服务器设置中设置Endpoint
,但在这个过程中,出于绝望实施了所有能想到的,以让Agent DVR检测到包裹。尝试的一件事是实施蒙版。因此,转到摄像头设置,从General
下拉菜单中选择Alert Filter
。然后,点击Configure
旁边的...
按钮。
在这里,可以添加一个蒙版。这对当前设置来说不是必需的,但如果有一个静态摄像头指向门,而只想在有人走到台阶上而不是街上时触发,这可能会有所帮助。用鼠标左键点击并拖动摄像头图像可以指定要忽略的区域。用鼠标右键点击将允许擦除蒙版选择。
无论是否添加了蒙版,在Find
字段中,确保列出了“person,package”。点击两次OK
按钮以接受这些设置。
现在需要更改检测器设置。转到摄像头设置,从下拉菜单中选择Detector
。将Detector
类型更改为“Simple”。简单的检测器意味着AI检测将在运动时被触发。希望它非常容易检测到包裹,所以将这个设置设置为简单,并点击OK
以接受设置。
最后,希望有人在摄像头领域留下包裹时触发一个事件。在写的另一篇文章中,有人问如何在检测到时触发录像,所以将在这里演示。转到摄像头设置,选择Actions
。然后点击Add
。从If
下拉菜单中选择Object Found
,在Then
下拉菜单中选择Start Recording On
。相机应该在这样做之后自动被选中,但请确保相机(在例子中是Eye Spy)在Device
部分,然后点击OK
。再次点击OK
以接受这些操作。
好了!让把一个包裹放入这个坏小子的摄像头领域,看看效果如何!为了说明目的,Action
将触发对象检测,可以展示一个包裹被检测到。
KA-BLAM!终于做到了!包裹被检测到。