中国 · 南京 · 栖霞区紫东路2号紫东国际创意园B3-2幢5F
+86-18994094214 (仅工作日:8:30~17:30)
contact@oakchina.cn

【开源】树莓派+OAK相机,打造家庭自动化系统!

【开源】树莓派+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)。
Luxonis OAK-D

设置

我对这个项目的设置包括:

  • OAK-D捕捉视频、深度,并运行使用指定的机器学习算法depthAI
  • 树莓派4运行python代码,初始化depthAI并且流式传输视频(使用MJPG格式)
  • 一台可视化结果的计算机(一旦树莓派真正接入家庭自动化系统,它应该在现实生活中就不需要了)

算法

活动“一个人坐在沙发上”可以分成几个部分,每一部分都需要特定的算法。

例如,为了检测人和物体,比如沙发,我们需要一个目标检测算法。然后检测人是否坐着,需要一个姿态识别算法。最后,我们必须确保人靠近沙发,以确认他正坐在沙发上。仅仅基于2D图像的定位是不准确的,所以这里我们还需要基于深度捕捉的距离估计算法。

此外,我正在使用python,所以算法也必须基于python实现。

目标检测

在机器学习领域,有3种著名的算法用于检测物体:

  • MobileNets:快但不太准确
  • YOLO:一点慢但更准确一点
  • RCNN(和更快的RCNN):较慢但准确

对我来说,MobileNets已经足够了,参考下图效果,让我们开始吧!

检测到沙发和人体

使用计算机视觉可以让你非常快速地升级你的系统,以添加新的活动来识别。在当前用例中,我决定过滤要检测的对象,但你可以使用其他神经网络模型来识别其他类型的家具,或者你也可以建议用户将位置指向pin。

姿态识别

经过快速研究,有两种算法非常有名:

起初,我因为简单的python API而选择了OpenPose,但最后,我受OpenPose的启发使用了自定义方式,它基于MobileNet,因为它也兼容OAK-D,所以它也非常快。

骨架估计

距离估计

这是我选择OAK-D深度相机的主要原因。虽然也有其他算法来估计距离,但深度传感器带来更高的精度。Luxonis提供了参考的代码。你只需要在图像上提供一个感兴趣的区域(ROI),算法就会返回一个3D坐标位置。原点是随机的,但在我的用例中这不是问题,因为我只是对物体之间的距离感兴趣。

结果

视频自圆其说

深挖工作原理

到目前为止,我给了你我使用的算法,但我没有解释如何为OAK-D相机编码,以及如何在这么小的设备上运行所有这些算法。

RVC2

首先,OAK-D相机计算芯片是基于RVC2,使用这种架构的一个著名产品是英特尔的神经计算棒。

该架构允许将计算部署在一个插入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)。

开发者指定一个带有输入(相机流)、节点(机器学习算法)和输出(主机上的端点)的管道。

depthai上的特定管道

例如,我选择的算法和模型需要不同的图像大小,所以我定义了一个节点来调整对象检测神经网络的图像大小。一切都是在设备上运行,使用这种体系结构,主机性能不需要很好,因为它不需要管理大量的数据,也不需要大量的I/O。

稳定性和鲁棒性

你应该不希望由于算法错误而导致灯意外打开。因此,尽管计算机视觉算法存在不一致的错误,你的家庭自动化系统应该非常靠谱。

首先,创建了一个校准步骤来检测沙发,以便用户验证这些位置。它避免了来自MobileNet的错误。它还限制了遮挡,从而提高了位置的准确性,特别是深度。

为了提高其他算法的鲁棒性,创建了一个队列系统。估计的位置必须足够接近最后5帧中检测到的位置,才能被认为是有效的。这可能会增加大幅移动的延迟,但它确实让结果更稳定,特别是对于深度传感器测量。

视频流

以控制校准步骤并通过Flask web服务器实时检查基于MPEG格式的视频流系统的结果。

反馈

多重性

在用OAK-D相机进行了几个月的测试和原型制作后,我对这款设备的多重性非常满意。它重量轻,体积小,集成了不同的功能,如高质量图像,深度传感器,Myriad X芯片,h264编码器,空间位置计算器等。它加速了原型验证。

算力

我害怕计算能力不够或不稳定,但即使在芯片上并行运行3个神经网络后,仍然有2FPS,这对许多家庭自动化用例来说已经足够了。对于一个5V运行的小设备来说,非常值得赞赏。

文档

虽然depthAI文档是新的,但仍然非常友好,有丰富的例子。它很容易启动,API非常简单。你也可以从社区中找到很多例子来使用已经编译好的模型,比如我用来制作人体姿势的模型。

模块化的

我从OAK-D相机开始,这是Luxonis的一款多功能设备,但是也可以基于模块构建自己的设备。

结论

总之,虽然OAK-D相机不会取代Nvidia Geforce RTX 3080来运行机器学习算法,但它是一个非常多功能和有前景的设备,可以原型化一些用例,如家庭自动化系统。这个生态系统也非常舒适,你不会浪费时间试图让它工作。

我们将在 Interaction Dynamics项目里使用这款设备,利用最先进的技术来研究、设计和构建身临其境的用户体验。

Tags:

索引