如何让机器人认出你?OriginBot的家人识别功能

打造家庭助理机器人OriginBot,我希望它能够识别并欢迎家庭成员。为此,我引入了“家人识别”功能,它由人脸检测和人脸识别两大核心部分组成。

「人脸检测」是识别摄像头图像中是否存在人脸的过程。我采用了经典的Haar cascades算法,并对其进行了优化,确保它能在ROS环境中高效运行。通过将ROS图像转换为OpenCV格式,我们能够在图像上准确地标出人脸位置,并在检测到人脸时进行标记。

「人脸识别」则是确定图像中人脸身份的高级技术。我选择了阿里云视觉智能开放平台。因为对于非算法专业人员来说,最方便。

人脸检测

人脸检测借鉴了如何在OriginBot上实现人脸识别 - 古月居里面的内容。我把其中的代码做了一些优化并添加了详细的注释,优化后的代码如下:

# 导入所需库
import cv2
import cv_bridge
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image

# 定义人脸检测节点
class FaceDetection(Node):
    def __init__(self, cascade_path, image_topic, output_topic):
        super().__init__('face_detection')  # 初始化节点,节点名为'face_detection'
        self.classifier_path = cascade_path  # haarcascade模型路径

        # 实例化cv_bridge对象,用来转换ROS图像和OpenCV图像
        self.bridge = cv_bridge.CvBridge()
        # 加载预训练的人脸检测模型
        self.face_cascade = cv2.CascadeClassifier(self.classifier_path)
        # 订阅图像主题,注册回调函数image_callback
        self.image_sub = self.create_subscription(Image, image_topic, self.image_callback, 10)
        # 创建Publisher,主题名为output_topic,队列长度为10
        self.pub = self.create_publisher(Image, output_topic, 10)

    # 定义图像回调函数
    def image_callback(self, msg):
        # 将接收到的ROS图像消息转化为OpenCV图像
        image = self.bridge.imgmsg_to_cv2(msg, 'bgr8')
        # 将图像转为灰度图,因为人脸检测需要灰度图
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        # 进行人脸检测
        faces = self.face_cascade.detectMultiScale(
            gray,
            scaleFactor=1.2,  # 表示每次图像尺寸减小的比例
            minNeighbors=3,  # 表示每一个目标至少要被检测到3次才算是真的目标
            minSize=(20, 20)  # 设置人脸的最小尺寸
        )

        # 如果检测到人脸,就在图像上画一个矩形框表示人脸
        if len(faces) > 0:
            for (x, y, w, h) in faces:
                cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)

        # 将OpenCV图像转化为ROS图像消息,并发布出去
        self.pub.publish(self.bridge.cv2_to_imgmsg(image, 'bgr8'))

# 定义主函数
def main(args=None):
    rclpy.init(args=args)  # 初始化ROS
    face_detection = FaceDetection("haarcascade_frontalface_default.xml", "/image_raw", "/camera/process_image")  # 实例化FaceDetection节点
    rclpy.spin(face_detection)  # 开始循环,不断调用回调函数
    face_detection.destroy_node()  # 销毁节点
    rclpy.shutdown()  # 关闭ROS

# 如果直接运行这个文件,就执行main函数
if __name__ == '__main__':
    main()

这里的人脸检测算法是Haar cascades,这是一个比较旧的算法,可能在某些情况下无法检测到人脸或者产生误检。可以考虑使用一些更高级的算法,例如MTCNN,Dlib HOG或者Dlib CNN,以后再优化。

把上面这个代码封装到一个ros2 package中,编译之后就可以使用了。

人脸识别

目前比较常用的人脸识别算法是FaceNet。

以下引用内容有chatGPT4 产生

FaceNet是Google于2015年发布的一种深度学习的人脸识别系统。FaceNet的目标是将人脸图像映射到欧氏空间,使得同一人的不同图像之间的距离尽可能小,而不同人的图像之间的距离尽可能大。这种映射是通过一个深度卷积神经网络实现的,网络的结构可以是Inception模型,也可以是其他的模型。

「优点:」

  1. 高精度:FaceNet 在 LFW(Labeled Faces in the Wild)和 YouTube Faces DB 等公开数据集上都取得了最好的性能。

  2. 端到端学习:FaceNet是一个端到端的系统,整个系统(包括特征提取和度量学习)都可以一起优化。

  3. 实时性:由于网络可以直接输出嵌入向量,因此可以用于实时的人脸识别应用。

「缺点:」

  1. 训练难度大:FaceNet使用的三元组损失需要精心选择正例和负例,训练过程比较复杂。

  2. 需要大量标记数据:虽然FaceNet只需要身份标签,但是为了获得好的性能,仍然需要大量的训练数据。

  3. 对数据质量敏感:如果训练数据中有错误的标签,可能会对训练结果造成影响。

把这样一个比较大的算法直接部署在OriginBot上运行起来效果估计不会很好,毕竟需要的算力很大。再加上我本身不是做算法出身的,直接手撸FaceNet对我有点难,所以我最后选择使用阿里云的视觉智能开放平台。

阿里云视觉智能开放平台提供了一系列高效、易用的视觉智能API接口,旨在帮助用户轻松实现图像识别、视频分析、图像搜索等功能,从而提升业务效率和用户体验,这对我来说正适合。

以下是阿里云视觉智能开放平台的一些主要特点和功能:

点击如何让机器人认出你?OriginBot的家人识别功能 - 古月居 (guyuehome.com)可查看全文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/742431.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArkUI开发学习随机——得物卡片,京东登录界面

案例一:得物卡片 代码: Column(){Column(){Image($r("app.media.mihoyo")).width(200).height(200)Row(){Text("今晚玩这个 | 每日游戏打卡").fontWeight(700).fontSize(16).padding(4)}.width(200)Text("No.12").fontWe…

服务器数据恢复—raid故障导致部分分区无法识别/不可用的数据恢复案例

服务器数据恢复环境: 一台某品牌DL380服务器中3块SAS硬盘组建了一组raid。 服务器故障: RAID中多块磁盘出现故障离线导致RAID瘫痪,其中一块硬盘状态指示灯显示红色。服务器上运行的数据库在D分区,备份文件存放在E分区。由于RAID瘫…

游戏AI的创造思路-技术基础-深度学习(2)

感觉坑越挖越大,慢慢填~~~~ 继续上篇进行填坑,这一篇我们介绍下循环神经网络 目录 3.2. 循环神经网络(RNN) 3.2.1. 算法形成过程 3.2.2. 运行原理 3.2.3. RNN有哪些优缺点 3.2.4. RNN参数 3.2.5. 如何选择RNN模型参数 3.2…

【Playwright+Python】—— 环境搭建及脚本录制!

前言 看到这个文章,有的同学会说: 静姐,你为啥不早早就写完python系列的文章。 因为有徒弟需要吧,如果你也想学自学,那这篇文章,可以说是我们结缘一起学习的开始吧! 如果对你有用&#xff0…

Qt开发 | Qt界面布局 | 水平布局 | 竖直布局 | 栅格布局 | 分裂器布局 | setLayout使用 | 添加右键菜单 | 布局切换与布局删除重构

文章目录 一、Qt界面布局二、Qt水平布局--QHBoxLayout三、Qt竖直布局四、Qt栅格布局五、分裂器布局代码实现六、setLayout使用说明七、布局切换与布局删除重构1.如何添加右键菜单2.布局切换与布局删除重构 一、Qt界面布局 Qt的界面布局类型可分为如下几种 水平布局(…

Python+Pytest+Allure+Yaml接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人:CesareCheung 更新时间:2024.06.20 一、技术栈 PythonPytestAllureYaml 版本要求:Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 1、安装python3.7,并配置…

解析分子筛自动填充高原制氧机的工作原理及优势

在高原地区,由于空气稀薄,氧气含量相对较低,这给人们的生活、工作和学习带来了诸多不便。为了解决这个问题,高原制氧机应运而生,其中分子筛自动填充高原制氧机以其高效、稳定、安全的特点受到了广泛的关注和应用。 一、…

CRMEB 多门店后台登录入口地址修改(默认admin)

一、>2.4版本 1、修改后端 config/admin.php 配置文件,为自定义的后缀 2、修改 平台后台前端源码中 view/admin/src/settings.js 文件,修改为和上面一样的配置 3、修改后重新打包前端代码,并且覆盖到后端的 public 目录下&#xff1a;打包方法 4、重启swoole 二、<2.4版…

蒙特卡洛树搜索

蒙特卡洛树搜索入门---强化学习 - 知乎蒙特卡洛树搜索&#xff08;Monte Carlo tree search&#xff09;简称MCTS&#xff0c;和一般的蒙特卡洛方法不是一个概念。通俗的理解&#xff0c;蒙特卡洛方法是随机现象中用频率来近似概率&#xff0c;模拟次数越多&#xff0c;结果越准…

从 Hadoop 迁移,无需淘汰和替换

我们仍然惊讶于有如此多的客户来找我们&#xff0c;希望从HDFS迁移到现代对象存储&#xff0c;如MinIO。我们现在以为每个人都已经完成了过渡&#xff0c;但每周&#xff0c;我们都会与一个决定进行过渡的主要、高技术性组织交谈。 很多时候&#xff0c;在这些讨论中&#xff…

项目实训-vue(十一)

项目实训-vue&#xff08;十一&#xff09; 文章目录 项目实训-vue&#xff08;十一&#xff09;1.概述2.页顶导航栏3.导航信息4.总结 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.页顶导航栏 <divstyle"display: flex;justify-content: space-between;alig…

打造智能家居:用ESP32轻松实现无线控制与环境监测

ESP32是一款集成了Wi-Fi和蓝牙功能的微控制器&#xff0c;广泛应用于物联网项目。它由Espressif Systems公司开发&#xff0c;具有强大的处理能力和丰富的外设接口。下面我们将详细介绍ESP32的基础功能和引脚功能&#xff0c;并通过具体的实例项目展示其应用。 主要功能 双核处…

网络安全协议

1. 概述 1.1 网络安全需求 五种需求&#xff1a; 机密性&#xff1a;防止数据未授权公开&#xff0c;让消息对无关听众保密 完整性&#xff1a;防止数据被篡改 可控性&#xff1a;限制对网络资源&#xff08;硬件和软件&#xff09;和数据&#xff08;存储和通信&#xff0…

「2024中国数据要素产业图谱1.0版」重磅发布,景联文科技凭借高质量数据采集服务入选!

近日&#xff0c;景联文科技入选数据猿和上海大数据联盟发布的《2024中国数据要素产业图谱1.0版》数据采集服务板块。 景联文科技是专业数据服务公司&#xff0c;提供从数据采集、清洗、标注的全流程数据解决方案&#xff0c;协助人工智能企业解决整个AI链条中数据采集和数据标…

Kendryte K210 固件烧录

本章将为读者介绍 Kendryte K210 的固件烧录&#xff0c;以及 Kendryte K210 外部 NOR Flash 的空间 分布。 本章分为如下几个小节&#xff1a; 6.1 外部 NOR Flash 的空间分布 6.2 Ubuntu 下的固件烧录 6.3 Windows 下的固件烧录 外部 NOR Flash 的空间分布 Kendryte K210 的…

如何以管理员身份运行CMD?

好久没更新博客了&#xff0c;今天在日常使用中遇到了一个问题&#xff0c;顺便记录下来。 据说国内的谷歌浏览器 Chrome 可以自动升级了&#xff0c;终于不用每次都自己跑去官网下载最新版本&#xff0c;然后安装迁移&#xff0c;重复劳动。下一篇讲如何讲迁移 Chrome&#x…

【Python】已解决:Python读取字典查询键报错“KeyError: ‘d‘”

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;Python读取字典查询键报错“KeyError: ‘d’” 一、分析问题背景 在Python编程中&#xff0c;字典&#xff08;dictionary&#xff09;是一种非常重要的数据结构…

源码分析过滤器与拦截器的区别

博主最近刚拿到一个微服务的新项目&#xff0c;边研究边分析从框架基础开始慢慢带领大家研究微服务的一些东西&#xff0c;这次给大家分析下Springboot中的过滤器和拦截器的区别。虽然上次分析过过滤器&#xff0c;但是主要是分析的cas流程&#xff0c;所以就没太深入&#xff…

[创业之路-129] :制造业企业的必备管理神器-ERP-生产制造

目录 一、ERP生产制造的总体架构 1.1 主要功能模块 1.2 主要流程 二、关键功能详解 2.1 生产管理计划 2.2 物料需求计划MRP 2.3 能力需求计划 2.4 物料与库房管理 一、ERP生产制造的总体架构 1.1 主要功能模块 ERP&#xff08;企业资源计划&#xff09;生产制造系统主…

微信小程序修改应用名称

1、修改名称&#xff08;10分钟即可生效&#xff09; 账号管理员 2、修改icon&#xff08;如果logo带有名称则需要修改&#xff09;