0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

请问如何在OriginBot上实现人脸识别呢?

新机器视觉 来源:古月居 2024-01-22 16:24 次阅读

人脸识别

大家在生活中经常会看到在我们进入商城时,门口会有相机在拍摄我们,并且会统计有多少人数进入商店,它是如何进行人数量统计的呢?

这就是是计算机视觉领域的一项关键技术——人脸识别,它使计算机系统能够自动检测、识别和验证图像或视频中的人脸。

人脸识别通过分析图像中的人脸特征来执行各种视觉任务。因为其重要性,所以解决方法很多,如卷积神经网络(CNN)、级联分类器等来提取和比对人脸特征。这些算法能够处理各种光照、姿势和表情条件下的人脸,从而实现高度准确的识别。

硬件环境

OriginBot智能机器人

PC:Ubuntu (≥20.04) + ROS2 (≥Foxy)

代码

 import cv2
  import cv_bridge
  import rclpy
  from rclpy.node import Node
  from sensor_msgs.msg import Image


  class FaceDetection(Node):
    def __init__(self):
      super().__init__('face_detection')
      self.classifier_path = "haarcascade_frontalface_default.xml"


      self.bridge = cv_bridge.CvBridge()
      self.face_cascade = cv2.CascadeClassifier(self.classifier_path)
      self.image_sub = self.create_subscription(Image, '/image_raw', self.image_callback, 10)
      self.pub = self.create_publisher(Image, '/camera/process_image', 10)


    def image_callback(self, msg):
      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,
        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)


      self.pub.publish(self.bridge.cv2_to_imgmsg(image, 'bgr8'))


  def main(args=None):
    rclpy.init(args=args)
    face_detection = FaceDetection()
    rclpy.spin(face_detection)
    face_detection.destroy_node()
    rclpy.shutdown()


  if __name__ == '__main__':
    main()

代码分析

•Haar Cascade 分类器:Haar Cascade 分类器是一种对象检测器,通过训练来识别特定的对象,这里主要用于人脸检测。

self.classifier_path = “haarcascade_frontalface_default.xml” 指定了已经训练好的人脸分类器的路径。

ROS2节点初始化:rclpy.init(args=args) 和 rclpy.shutdown() 分别用于初始化和关闭ROS2节点。

•图像订阅和发布:
self.image_sub = self.create_subscription(Image, ‘/image_raw’, self.image_callback, 10) 用于订阅原始图像。

self.pub = self.create_publisher(Image, ‘/camera/process_image’, 10) 用于发布处理后的图像。

•图像处理回调函数:image_callback(self, msg) 处理订阅的图像,首先将ROS消息转换为OpenCV图像。

•将图像转换为灰度图像:gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)。

•使用 Haar Cascade 分类器检测人脸:faces = self.face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(20, 20))。

•如果检测到人脸,用矩形标记出来:cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)。最后,将处理后的图像发布出去:self.pub.publish(self.bridge.cv2_to_imgmsg(image, ‘bgr8’))。

•ROS2节点主函数:def main(args=None): 主函数初始化节点,并通过 rclpy.spin(face_detection) 进行节点的运行。

灰度图像的重要性:

简要说明

使用opencv实现人脸识别已经是一个特别成熟的技术了,这里抛砖引玉希望大家出一个更nice的版本呀!

1、为什么要使用 Haar Cascade 分类器进行人脸检测,Haar Cascade分类器的几个参数是什么含义?

Haar Cascade 分类器是一种经过训练的对象检测器,特别适用于检测面部特征,如人脸和眼睛。它具有高度准确的检测性能,因此广泛用于计算机视觉任务。Haar Cascade 分类器的优势在于它可以在不同尺度和旋转下检测对象,而且速度相对较快。

scaleFactor 参数用于指定每个图像尺度上要缩小图像的比例。这使得分类器能够检测不同尺寸的对象,而不仅仅适用于特定尺寸的对象。通过在不同尺寸上运行分类器,可以检测到远处和近处的对象,使检测更加全面。

minNeighbors 参数用于指定检测到目标后,要保留的邻近目标的最小数量。这有助于去除重叠的检测结果。较大的值会过滤掉一些检测结果,以确保只返回高置信度的检测结果。这有助于减少误报。

2、为什么需要将输入图像转换为灰度图像?

Haar Cascade 分类器通常在灰度图像上运行,因为灰度图像只包含亮度信息,而不包含颜色信息。这简化了图像处理,并使分类器能够更好地识别对象的边缘和纹理特征。此外,灰度图像的计算量更小,因此处理速度更快。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 智能机器人
    +关注

    关注

    17

    文章

    826

    浏览量

    81329
  • 人脸识别
    +关注

    关注

    76

    文章

    3955

    浏览量

    80559
  • 卷积神经网络

    关注

    4

    文章

    284

    浏览量

    11716

原文标题:如何在OriginBot上实现人脸识别

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview 人脸识别

    本帖最后由 SUPERTIANGUA 于 2015-4-25 13:59 编辑 最近用labview做人脸识别,图像采集,二值化处理都做出来了,就是在人脸定位的时候卡住了。怎样用方框把
    发表于 04-14 14:20

    LabVIE人脸识别

    ,但是,总是对它不离不弃。LabVIEW视觉对于工业常见的定位和测量等指标的检测还是得心应手的,如果涉及到更复杂算法的问题?如人脸检测和识别,用labview是没有办法解决的。设想
    发表于 05-12 17:29

    人脸识别技术原理解析

    概念:哪一部分数据是水杯,哪一部分是书本,哪一部分是人脸,这是视觉模式识别中的粗分类问题。  而人脸识别,需要在所有机器认为是人脸的那部分数
    发表于 12-23 23:17

    你周围有人脸识别吗?

    什么地方?该怎么用?今天就给大家普及一下人脸识别的知识。人脸识别应用在家居和小区发面,想到安全,大家肯定第一时间都会想到所住地方的安全。首
    发表于 06-30 13:54

    加密芯片在人脸识别算法的保护与应用

    引爆人脸识别的市场。那什么是人脸识别,具体有什么作用
    发表于 10-24 10:57

    LabVIEW人脸识别设计

    五一来临之际,炎炎夏日到处车水马龙,是不是在家好好学习的最佳时机?所以第二期,LabVIEW人脸识别设计“3天挑战赛”,五一3天时间完成挑战学费全额退款!3天get新技能,是不是比吃鸡还划算。在
    发表于 04-28 10:00

    【AI技能解析】人脸识别是怎么做到的?

    识别支付场景】人脸识别这么火,那么它到底是怎么实现?看大牛为您解锁人脸
    发表于 03-16 11:25

    如何去实现一种基于PCA算法的人脸识别程序

    如何去实现一种基于PCA算法的人脸识别程序?基于IAR开发环境的CC1110F32的调试程序怎样去编写
    发表于 11-04 07:02

    在嵌入式开发板如何用opencv调用caffe模型进行人脸识别并截图

    在嵌入式开发板如何用opencv调用caffe模型进行人脸识别并截图?其代码该如何去实现
    发表于 12-27 06:56

    何在Core-1126-JD4搭建一套类似的服务完成云人脸识别

    何在Core-1126-JD4搭建一套类似的服务完成云人脸识别
    发表于 02-21 07:19

    如何实现基于ncnn的RK3399的mtcnn人脸检测?

    何在RK3399烧录安卓系统?如何实现基于ncnn的RK3399的mtcnn人脸检测?
    发表于 03-04 07:29

    如何对RK3399的HDMI进行人脸识别

    如何对RK3399的HDMI进行人脸识别?如何对识别结果进行模糊化处理
    发表于 03-07 12:48

    何在OpenHarmony使用SeetaFace2人脸识别库?

    何在OpenHarmony使用SeetaFace2人脸识别库?简介相信大部分同学们都已了解或接触过OpenAtom OpenHarmony(以下简称“OpenHarmony”)了,
    发表于 08-22 17:46

    用dlib实现人脸识别的技巧

    很多人都认为人脸识别是一项非常难以实现的工作,看到名字就害怕,然后心怀忐忑到网上一搜,看到网上N页的教程立马就放弃了。这些人里包括曾经的我自己。其实如果如果你不是非要深究其中的原理,只是要实现
    的头像 发表于 11-01 16:45 2.6w次阅读

    人脸识别技术原理与实现方式

    随着大数据时代的到来,“人脸”也将成为数据的一部分,人脸识别如何实现?本文将为大家从人脸检测、人脸
    发表于 02-05 11:16 2w次阅读
    <b class='flag-5'>人脸</b><b class='flag-5'>识别</b>技术原理与<b class='flag-5'>实现</b>方式