如何让机器人认出你?OriginBot的家庭识别功能
打造家庭助理机器人OriginBot,我希望它能够识别并欢迎家庭成员。为此,我引入了“家人识别”功能,它由人脸检测和人脸识别两大核心部分组成。
人脸检测是识别摄像头图像中是否存在人脸的过程。我采用了经典的Haar cascades算法,并对其进行了优化,确保它能在ROS环境中高效运行。通过将ROS图像转换为OpenCV格式,我们能够在图像上准确地标出人脸位置,并在检测到人脸时进行标记。
人脸识别则是确定图像中人脸身份的高级技术。我选择了阿里云视觉智能开放平台。因为对于非算法专业人员来说,最方便。
人脸检测
人脸检测借鉴了https://www.guyuehome.com/45655里面的内容。我把其中的代码做了一些优化并添加了详细的注释,优化后的代码如下:
1 | # 导入所需库 |
这里的人脸检测算法是Haar cascades,这是一个比较旧的算法,可能在某些情况下无法检测到人脸或者产生误检。可以考虑使用一些更高级的算法,例如MTCNN,Dlib HOG或者Dlib CNN,以后再优化。
把上面这个代码封装到一个ros2 package中,编译之后就可以使用了。
人脸识别
目前比较常用的人脸识别算法是FaceNet。
以下引用内容有chatGPT4 产生
FaceNet是Google于2015年发布的一种深度学习的人脸识别系统。FaceNet的目标是将人脸图像映射到欧氏空间,使得同一人的不同图像之间的距离尽可能小,而不同人的图像之间的距离尽可能大。这种映射是通过一个深度卷积神经网络实现的,网络的结构可以是Inception模型,也可以是其他的模型。
优点:
- 高精度:FaceNet 在 LFW(Labeled Faces in the Wild)和 YouTube Faces DB 等公开数据集上都取得了最好的性能。
- 端到端学习:FaceNet是一个端到端的系统,整个系统(包括特征提取和度量学习)都可以一起优化。
- 实时性:由于网络可以直接输出嵌入向量,因此可以用于实时的人脸识别应用。
缺点:
- 训练难度大:FaceNet使用的三元组损失需要精心选择正例和负例,训练过程比较复杂。
- 需要大量标记数据:虽然FaceNet只需要身份标签,但是为了获得好的性能,仍然需要大量的训练数据。
- 对数据质量敏感:如果训练数据中有错误的标签,可能会对训练结果造成影响。
把这样一个比较大的算法直接部署在OriginBot上运行起来效果估计不会很好,毕竟需要的算力很大。再加上我本身不是做算法出身的,直接手撸FaceNet对我有点难,所以我最后选择使用阿里云的视觉智能开放平台。
阿里云视觉智能开放平台提供了一系列高效、易用的视觉智能API接口,旨在帮助用户轻松实现图像识别、视频分析、图像搜索等功能,从而提升业务效率和用户体验,这对我来说正适合。
以下是阿里云视觉智能开放平台的一些主要特点和功能:
丰富的API接口:平台提供了丰富的API接口,涵盖了图像识别、视频分析、图像搜索等多个领域。用户可以根据自己的需求选择合适的接口进行调用。其中就包含了我需要的功能。
高度可定制:用户可以根据自己的业务场景定制模型,例如通过训练自己的图像识别模型来识别特定的物体或场景。
强大的图像识别能力:平台支持识别多种类型的图像内容,包括物体、场景、人脸、文字等。此外,还可以进行图像风格转换、情感分析等高级功能。
实时视频分析:平台提供实时视频分析功能,可以对视频流进行实时处理,识别视频中的特定物体、场景或行为。
图像搜索服务:用户可以通过上传图片或提供图片URL,快速在海量图像库中找到相似的图片,支持以图搜图的功能。
易用性和灵活性:平台提供了完善的开发者文档和SDK,支持多种编程语言,方便用户快速集成和使用。同时,平台还提供了在线测试和调试工具,帮助用户快速验证和优化接口调用效果。
安全可靠:阿里云视觉智能开放平台基于阿里云的安全体系,确保用户数据的安全性和隐私性。
弹性伸缩:平台支持弹性伸缩,可以根据用户的业务需求自动调整资源,确保在高并发场景下的稳定性和性能。
为阿里云做个小广告吧,阿里云的这些服务对于非专业算法人员来说真的非常实用,而且降价后价格也不贵,个人使用的话完全负担得起。
我要使用的是其中的searchFace这个功能,详细的说明可以参考官方文档。
简单来说,需要先创建一个人脸数据库,然后把家人的人脸照片传上去,上传的时候,照片需要以名字拼音命名,这样在识别的时候才能知道具体是谁。
阿里云官方有API调试台,可以在页面上直接调试,自动生成代码,最终的代码如下:
…
全文发布在古月居, 请移步阅读~