编辑:OAK中国
首发:oakchina.cn
喜欢的话,请多多👍⭐️✍
内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。
▌前言
Hello,大家好,这里是OAK中国,我是助手君。
这个项目也是我网上冲浪的时候看到的,虽然没有详细说代码步骤,但是作者的思路还是很有借鉴意义的,所以给大家分享一下。
来源:medium.com 编辑:OAK中国 |
大多数家庭自动化系统是基于二进制传感器,如接近传感器、时间传感器、光传感器等。对于每个要检测的新活动,你需要安装一个新的传感器——比如用Withings Sleep来检测人们的睡眠,这就导致安装和维护非常困难。
作为一名用户体验工程师,我总是探索新的用户体验方式。所以我尝试了更具扩展性的方式——基于OAK相机、计算机视觉、机器学习和活动识别的方法。
为了使设置有效,它必须消耗比它应该控制的灯更少的能量,所以机器学习硬件应该是低功耗的,然后我决定试试OAK-D相机,这一功能强大、易于上手的产品。
如果你是机器学习的初学者,这篇文章可能是一个很好的介绍。或者你已经知道机器学习,这篇文章可能有助于了解更多关于DepthAI和Myriad architecture的知识,因为它提出了一种与OpenCV非常不同的方法。
本文不会详述代码,但是你仍然可以在这里找到所有代码。
检测的活动
基于我的日常工作,我选择了一项复杂的活动:一个人坐在沙发上。使用传统方式(如传感器)来检测这种活动将需要沙发中的压力传感器,而操作相当复杂。
而用OAK-D来做这种任务就简单多了,此外,我的设备还允许同时检测多个活动。
硬件
我很喜欢拿树莓派做原型验证,但是这个项目需要的算力远远超过我的树莓派4,所以我选择了OAK-D。该设备嵌入了一个4K相机,两个720p相机以通过立体视觉捕捉深度,以及一个基于RVC2的计算芯片。它足够强大,可以计算机器学习算法,并让树莓派负责剩下的工作。
编者注:OAK-D双目最高支持800P,RGB最高1200万像素(超4K)。 |
![](https://i-blog.csdnimg.cn/blog_migrate/148a5f805debdf0b5423be6a109ae3c2.png)
设置
我对这个项目的设置包括:
- OAK-D捕捉视频、深度,并运行使用指定的机器学习算法
depthAI
库 - 树莓派4运行python代码,初始化
depthAI
并且流式传输视频(使用MJPG格式) - 一台可视化结果的计算机(一旦树莓派真正接入家庭自动化系统,它应该在现实生活中就不需要了)
![](https://i-blog.csdnimg.cn/blog_migrate/ffcfbf21c36aa2351f6d120ac78c7960.png)
算法
活动“一个人坐在沙发上”可以分成几个部分,每一部分都需要特定的算法。
![](https://www.oakchina.cn/wp-content/uploads/2022/09/一个人坐在沙发上-1024x290.png)
例如,为了检测人和物体,比如沙发,我们需要一个目标检测算法。然后检测人是否坐着,需要一个姿态识别算法。最后,我们必须确保人靠近沙发,以确认他正坐在沙发上。仅仅基于2D图像的定位是不准确的,所以这里我们还需要基于深度捕捉的距离估计算法。
此外,我正在使用python,所以算法也必须基于python实现。
目标检测
在机器学习领域,有3种著名的算法用于检测物体:
- MobileNets:快但不太准确
- YOLO:一点慢但更准确一点
- RCNN(和更快的RCNN):较慢但准确
对我来说,MobileNets已经足够了,参考下图效果,让我们开始吧!
![](https://www.oakchina.cn/wp-content/uploads/2022/09/检测沙发和人.gif)
使用计算机视觉可以让你非常快速地升级你的系统,以添加新的活动来识别。在当前用例中,我决定过滤要检测的对象,但你可以使用其他神经网络模型来识别其他类型的家具,或者你也可以建议用户将位置指向pin。
姿态识别
经过快速研究,有两种算法非常有名:
起初,我因为简单的python API而选择了OpenPose,但最后,我受OpenPose的启发使用了自定义方式,它基于MobileNet,因为它也兼容OAK-D,所以它也非常快。
![骨架估计](https://www.oakchina.cn/wp-content/uploads/2022/09/骨架估计.png)
距离估计
这是我选择OAK-D深度相机的主要原因。虽然也有其他算法来估计距离,但深度传感器带来更高的精度。Luxonis提供了参考的代码。你只需要在图像上提供一个感兴趣的区域(ROI),算法就会返回一个3D坐标位置。原点是随机的,但在我的用例中这不是问题,因为我只是对物体之间的距离感兴趣。
![](https://www.oakchina.cn/wp-content/uploads/2022/09/沙发坐标.png)
结果
视频自圆其说
深挖工作原理
到目前为止,我给了你我使用的算法,但我没有解释如何为OAK-D相机编码,以及如何在这么小的设备上运行所有这些算法。
RVC2
首先,OAK-D相机计算芯片是基于RVC2,使用这种架构的一个著名产品是英特尔的神经计算棒。
![](https://www.oakchina.cn/wp-content/uploads/2022/09/英特尔NCS.png)
该架构允许将计算部署在一个插入USB的专用设备上,以保持你的电脑自由。Myriad X芯片被设计用于运行机器学习算法,因此非常高效。
作为比较,一个MobileNet算法在OAK-D上的运行速度比在我的MacBook pro(2.6GHz 6核intel core i7,内存32GB 2666MHz DDR 4)上快两倍。
在Myriad X上运行机器学习算法需要将它们转换成openvino格式。
DepthAI
但是来自Luxonis的工程师们有了一个更好的主意,他们创建了自己的python API来控制Myriad X芯片和相机——DepthAI。这个想法很有说服力!从硬件的角度来看,摄像头靠近计算芯片,所以为什么不直接将信息发送到芯片,而不是将图像发送到主机,它将减少输入/输出(I/O)。
开发者指定一个带有输入(相机流)、节点(机器学习算法)和输出(主机上的端点)的管道。
![](https://i-blog.csdnimg.cn/blog_migrate/46fbc094ea8c49c73b9891ccd1273baa.png)
例如,我选择的算法和模型需要不同的图像大小,所以我定义了一个节点来调整对象检测神经网络的图像大小。一切都是在设备上运行,使用这种体系结构,主机性能不需要很好,因为它不需要管理大量的数据,也不需要大量的I/O。
稳定性和鲁棒性
你应该不希望由于算法错误而导致灯意外打开。因此,尽管计算机视觉算法存在不一致的错误,你的家庭自动化系统应该非常靠谱。
首先,创建了一个校准步骤来检测沙发,以便用户验证这些位置。它避免了来自MobileNet的错误。它还限制了遮挡,从而提高了位置的准确性,特别是深度。
为了提高其他算法的鲁棒性,创建了一个队列系统。估计的位置必须足够接近最后5帧中检测到的位置,才能被认为是有效的。这可能会增加大幅移动的延迟,但它确实让结果更稳定,特别是对于深度传感器测量。
视频流
以控制校准步骤并通过Flask web服务器实时检查基于MPEG格式的视频流系统的结果。
![](https://www.oakchina.cn/wp-content/uploads/2022/09/检测人类活动系统.gif)
反馈
多重性
在用OAK-D相机进行了几个月的测试和原型制作后,我对这款设备的多重性非常满意。它重量轻,体积小,集成了不同的功能,如高质量图像,深度传感器,Myriad X芯片,h264编码器,空间位置计算器等。它加速了原型验证。
算力
我害怕计算能力不够或不稳定,但即使在芯片上并行运行3个神经网络后,仍然有2FPS,这对许多家庭自动化用例来说已经足够了。对于一个5V运行的小设备来说,非常值得赞赏。
文档
虽然depthAI
文档是新的,但仍然非常友好,有丰富的例子。它很容易启动,API非常简单。你也可以从社区中找到很多例子来使用已经编译好的模型,比如我用来制作人体姿势的模型。
模块化的
我从OAK-D相机开始,这是Luxonis的一款多功能设备,但是也可以基于模块构建自己的设备。
结论
总之,虽然OAK-D相机不会取代Nvidia Geforce RTX 3080来运行机器学习算法,但它是一个非常多功能和有前景的设备,可以原型化一些用例,如家庭自动化系统。这个生态系统也非常舒适,你不会浪费时间试图让它工作。
我们将在 Interaction Dynamics项目里使用这款设备,利用最先进的技术来研究、设计和构建身临其境的用户体验。
▌参考资料
https://docs.oakchina.cn/en/latest/
https://www.oakchina.cn/selection-guide/
OAK中国
| OpenCV AI Kit在中国区的官方代理商和技术服务商
| 追踪AI技术和产品新动态
戳「+关注」获取最新资讯↗↗