大多数家庭自动化系统都基于二元传感器,如在线状态、时间、光线传感器等。对于每个要检测的新活动,您需要安装一个新的传感器(例如Withing睡眠)来检测人们的睡眠情况。这使得它的安装和维护变得非常困难。
作为一名Ux工程师,我总是想象新的用户体验。所以我想尝试一种基于一个摄像头、计算机视觉、机器学习和活动识别的更具伸缩性的方法。
为了使设置有效,它必须消耗比它应该控制的灯更少的电力。因此,机器学习硬件应该具有较低的能耗。然后我决定试一试Luxonis的产品,它们也非常强大和简单。
如果您是机器学习的初学者,本文可能是一个很好的介绍。或者您已经了解了机器学习,本文可能有助于您更多地了解DepthAI和Myriad架构,因为它提出了一种与OpenCV非常不同的方法。
本文不会详细介绍代码,但您仍然可以在此处找到所有代码:https://github.com/interaction-dynamics/smart-home-with-luxonishttps://github.com/interaction-dynamics/smart-home-with-luxonis
活动
根据我的日常生活,我选择了一个复杂的活动:一个人坐在沙发上。使用基本传感器检测这一活动需要在沙发上安装压力传感器。设置它将是一场噩梦。
此外,正如您在最后将看到的,我的设备将允许同时检测多个活动。
硬件
我喜欢我的树莓圆周率作为原型平台。但是我的用例需要的计算能力远远超过我的Rasberry PI 4能力。所以我选择了Luxonis DepthAI设备(LUX-D)。该装置内嵌一个4K摄像头、两个720P摄像头进行立体深度采集,以及一个基于Myriad体系结构的计算芯片。它足够强大,足以计算机器学习算法,让覆盆子掌管睡觉“,也就是几乎没有什么能像IP上的录制或流媒体一样。Luxonis DepthAI device
设置
我对此项目的设置包括:
- 一台Luxonis LUX-D摄像机,捕获视频、深度,并运行使用Deep thAI库指定的机器学习算法
- 运行python代码的raspberry 4,初始化Deep thAI并流式传输视频(使用MJPEG格式)
- 一台将结果可视化的计算机(一旦将树莓插入家庭自动化系统,就应该在现实生活中将其移除)
算法
“一个人坐在沙发上”的活动可以分成几个部分。而且每一块都需要特定的算法。
例如,为了检测人和沙发等物体,我们需要一种物体检测算法。然后,为了检测人是否坐着,需要一个姿势识别算法。最后,我们必须确保人离沙发很近,以确认他正坐在沙发上。仅基于2D图像的位置是不准确的。这就是使用深度捕获的距离估计算法有用的地方。
此外,我使用的是python,因此需要算法的python实现。
目标检测
在机器学习领域,有三种著名的算法可以检测对象:
- MobileNets:更快,但不太准确
- YOLO:慢一点,准确一点
- RCNN(和更快的RCNN):更慢但更准确
在我的例子中,正如你将看到的那样,MobileNets已经足够了,而且它已经在相机LUX-D上实现了,所以让我们来看看吧!implemented
使用计算机视觉可以非常快速地升级系统,以添加要识别的新活动。在当前的用例中,我决定使用过滤来检测要检测的对象,但您可以使用其他神经网络模型来识别其他类型的家具。或者,您也可以建议用户指向要固定的位置。
姿势识别
经过快速研究,有两种算法非常有名:
- OpenPose
- PifPaf
起初,我选择OpenPose作为简单的python API,但最后我使用了一个受OpenPose启发但基于MobileNet的自定义实现,因为它也是为Camera LUX-D实现的。它也真的很快。custom implementation
距离估计
这是我选择深度传感器相机的主要原因。还有其他算法可以估计距离,但是深度传感器可以带来更高的精确度。Luxonis提供了自己的实现。您只需要在图像上提供感兴趣的区域,算法将返回3D笛卡尔位置。起始点是随机的,但在我的用例中不是问题,因为我只对对象之间的距离感兴趣。implementation
结果
这段视频不言而喻;)
它的真正工作原理:深度潜水
到目前为止,我给了你我使用的算法,但我没有解释如何为相机LUX-D编写代码,以及如何在这么小的设备上运行所有这些算法。
无数X
首先,相机LUX-D计算芯片基于英特尔Myriad X架构。使用该架构的著名产品是英特尔的神经计算棒。Intel Myriad X architecture
该架构允许将计算转移到插入USB的专用设备上,以保持您的计算机空闲。Myriad X芯片是为运行机器学习算法而设计的,因此效率非常高。
相比之下,MobileNet算法在相机LUX-D上的运行速度是2.6 GHz 6核英特尔酷睿i7和集成到我的MacBook pro中的32 GB 2666 MHz DDR 4内存上的两倍。
很好知道:在Myriad X上运行机器学习算法需要将它们转换为Openvino格式。Openvino
部署
但是,来自Luxonis的好心人有一个更好的主意:他们创建了自己的python API来控制Myriad X芯片和摄像头:DepthAI。这个想法真的很有说服力。从硬件的角度来看,摄像机离计算芯片很近,所以为什么不直接将信息发送到芯片,而不是将图像发送到主机。它将减少输入/输出(I/O)。depthAI
开发人员指定具有输入(摄像机流)、节点(机器学习算法)和输出(主机上的端点)的管道。
例如,我选择的算法和模型需要不同的图像块大小,所以我定义了一个节点来调整对象检测神经网络的图像大小。一切都直接在LUX-D相机的Myriad芯片上运行。有了这种体系结构,主机不需要繁重的硬件,因为它不需要管理大量的数据,也不需要大量的I/O。™不需要繁重的硬件,因为它不需要管理大量的数据,也不需要大量的I/O。
稳定性和鲁棒性
您不希望由于算法错误而意外打开灯。因此,尽管计算机视觉算法存在不一致的错误,但您的家庭自动化系统应该非常健壮。
首先,创建了一个校准步骤来检测沙发。从而由用户验证位置。它避免了来自MobileNet的错误。它还限制了遮挡,因此提高了位置的准确性,特别是深度。
为了提高其他算法的鲁棒性,实现了一个队列系统。估计的位置必须足够接近从最后5帧中检测到的位置,才能被认为是有效的。它可能会增加大型移动的延迟,但它确实稳定了结果,特别是对于深度传感器测量。
视频流
为了控制标定步骤,并通过Flask Web服务器实时检查结果,提出了一种基于MPEG格式的视频流系统。
反馈
多价
在用Lux-D相机进行了几个月的测试和原型制作后,我对这款设备的多价性非常满意。它重量轻、体积小,集成了高质量图像、深度传感器、Myriad X芯片、H264编码器、空间位置计算器等多种功能,使得原型制作速度非常快。
电源
我担心计算能力不够或不稳定,但即使在芯片上并行运行了3个神经网络后,我仍然有2FPS,这对于许多家庭自动化用例来说是远远不够的。对于运行在5V上的小型设备来说,这是非常值得赞赏的。
文档
Deep thAI文档是新的,但是仍然非常友好,并且有丰富的示例。它非常容易启动,并且API非常简单。你还有很多来自社区的例子可以使用已经编译好的模型,就像我在“人类姿势”中使用的那样。
模块化
我从LUX-D相机开始,这是Luxonis的一体机。但也可以基于模块来构建自己的设备。
我的下一步是尝试带有ESP-32的版本,让我的相机更具自主性。
结论
总之,Luxonis的LUX-D相机不会取代NVIDIA GeForce RTX 3080来运行机器学习算法。但它是一种非常多价且很有前途的设备,可以用来制作一些用例的原型,比如家庭自动化系统。生态系统也非常舒适,您不会浪费时间去尝试让它工作。
在Interaction Dynamics,我们将使用该设备来研究、设计和使用最先进的技术构建身临其境的用户体验。Interaction Dynamics
你喜欢这篇文章吗?记得要拍手叫FIANIŸ˜œ!
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/06/27/%e5%a6%82%e4%bd%95%e9%80%9a%e8%bf%87luxonis%e6%b7%b1%e5%ba%a6%e7%9b%b8%e6%9c%ba%e5%b0%86%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0%e7%94%a8%e4%ba%8e%e5%ae%b6%e5%ba%ad%e8%87%aa%e5%8a%a8%e5%8c%96-uxtech1-2/