1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import rospy
  4. import cv2
  5. import numpy as np
  6. from sensor_msgs.msg import Image
  7. import cv_bridge
  8.  
  9. class FaceDetector:
  10. def __init__(self):
  11. rospy.on_shutdown(self.cleanup)
  12.  
  13. # 创建cv_bridge
  14. self.bridge = cv_bridge.CvBridge()
  15. self.image_pub = rospy.Publisher("cv_bridge_image", Image, queue_size=1)
  16. self.image_sub = rospy.Subscriber("/usb_cam/image_raw", Image, self.image_callback, queue_size=1)
  17. # self.image_sub = rospy.Subscriber("/camera/rgb/image_raw", Image, self.image_callback, queue_size=1)
  18.  
  19. # 获取haar特征的级联表的XML文件,文件路径在launch文件中传入
  20. cascade_1 = rospy.get_param("~cascade_1", "~/catkin_ws/src/opencv/data/haar_detectors/haarcascade_frontalface_alt.xml")
  21. cascade_2 = rospy.get_param("~cascade_2", "~/catkin_ws/src/opencv/data/haar_detectors/haarcascade_profileface.xml")
  22.  
  23. # 使用级联表初始化haar特征检测器
  24. self.cascade_1 = cv2.CascadeClassifier(cascade_1)
  25. self.cascade_2 = cv2.CascadeClassifier(cascade_2)
  26.  
  27. # 设置级联表的参数,优化人脸识别,可以在launch文件中重新配置
  28. self.haar_scaleFactor = rospy.get_param("~haar_scaleFactor", 1.2)
  29. self.haar_minNeighbors = rospy.get_param("~haar_minNeighbors", 2)
  30. self.haar_minSize = rospy.get_param("~haar_minSize", 40)
  31. self.haar_maxSize = rospy.get_param("~haar_maxSize", 60)
  32. self.color = (50, 255, 50)
  33.  
  34. def image_callback(self, data):
  35. # 使用cv_bridge将ROS的图像数据转换成OpenCV的图像格式
  36. cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
  37. frame = np.array(cv_image, dtype=np.uint8)
  38.  
  39. # 创建灰度图像
  40. grey_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  41.  
  42. # 创建平衡直方图,减少光线影响
  43. grey_image = cv2.equalizeHist(grey_image)
  44.  
  45. # 尝试检测人脸
  46. faces_result = self.detect_face(grey_image)
  47.  
  48. # 在opencv的窗口中框出所有人脸区域
  49. if len(faces_result) > 0:
  50. for face in faces_result:
  51. x, y, w, h = face
  52. cv2.rectangle(cv_image, (x, y), (x + w, y + h), self.color, 2)
  53.  
  54. # 将识别后的图像转换成ROS消息并发布
  55. self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8"))
  56.  
  57. def detect_face(self, input_image):
  58. # 首先匹配正面人脸的模型
  59. if self.cascade_1:
  60. faces = self.cascade_1.detectMultiScale(input_image,
  61. self.haar_scaleFactor,
  62. self.haar_minNeighbors,
  63. cv2.CASCADE_SCALE_IMAGE,
  64. (self.haar_minSize, self.haar_maxSize))
  65.  
  66. # 如果正面人脸匹配失败,那么就尝试匹配侧面人脸的模型
  67. if len(faces) == 0 and self.cascade_2:
  68. faces = self.cascade_2.detectMultiScale(input_image,
  69. self.haar_scaleFactor,
  70. self.haar_minNeighbors,
  71. cv2.CASCADE_SCALE_IMAGE,
  72. (self.haar_minSize, self.haar_maxSize))
  73.  
  74. return faces
  75.  
  76. def cleanup(self):
  77. print("强制结束程序。。")
  78. cv2.destroyAllWindows()
  79.  
  80. if __name__ == '__main__':
  81. try:
  82. # 初始化ros节点
  83. rospy.init_node("face_detector")
  84. follower = FaceDetector()
  85. rospy.loginfo("人脸识别已经启动。。。")
  86. rospy.loginfo("请打开opencv节点订阅消息。。。")
  87. rospy.spin()
  88. except KeyboardInterrupt:
  89. print("强制结束程序。。")
  90. cv2.destroyAllWindows()

基于ROS的人脸识别的更多相关文章

  1. 基于MATLAB的人脸识别算法的研究

    基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...

  2. 基于 OpenCV 的人脸识别

    基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...

  3. 基于 HTML5 的人脸识别技术

    基于 HTML5 的人脸识别技术 https://github.com/auduno/headtrackr/

  4. 基于node.js人脸识别之人脸对比

    基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...

  5. 【计算机视觉】基于OpenCV的人脸识别

    一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...

  6. java基于OpenCV的人脸识别

    基于Java简单的人脸和人眼识别程序 使用这个程序之前必须先安装配置OpenCV详细教程见:https://www.cnblogs.com/prodigal-son/p/12768948.html 注 ...

  7. 基于PCA的人脸识别步骤

    代码下载:基于PCA(主成分分析)的人脸识别 人脸识别是一个有监督学习过程,首先利用训练集构造一个人脸模型,然后将测试集与训练集进行匹配,找到与之对应的训练集头像.最容易的方式是直接利用欧式距离计算测 ...

  8. 知物由学 | 基于DNN的人脸识别中的反欺骗机制

    "知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...

  9. 基于HTML5 的人脸识别活体认证

    近几年,人脸识别技术在身份认证领域的应用已经有了较多应用,例如:支付宝.招行的取款.养老金领取等方面,但在杜绝假冒.认证安全性等方面,目前还是一个比较需要进一步解决的课题,特别是在移动端的活体认证技术 ...

随机推荐

  1. ajax 传递中文字符参数 问题

    使用ajax 传递中文字符串时, 服务端会接收不到预期的 中文字符. 此时,需要对 js中的中文字符参数进行 编码,  到达服务端后, 再为其解码 即可. 前端: var url = '....'; ...

  2. 一键安装metasploit(linux,os x)

    curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit- ...

  3. jenkins-参数化构建(二)插件:Extended Choice Parameter

    一.Extended Choice Parameter插件 这个插件相对丰富,安装过程就不过多介绍了,在点击项目设置后会出现下载的插件名字. 写在文件中构建时效果如下:

  4. Selenium 3----设置元素等待

    在做Web应用的自动化测试时,定位元素必不可少,这个过程经常出现定位不到元素的情况,常见原因有哪些呢? 1.描述错误 提高编写水平.细心 2.Frame/Iframe框架原因 在元素所在框架里定位该元 ...

  5. COMP9021 PRINCIPLES OF PROGRAMMING

    QUIZ 7COMP9021 PRINCIPLES OF PROGRAMMING$ python3 quiz_7.pyEnter four integers: 0 2 2 8Here is the g ...

  6. Spark入门到精通--(第七节)环境搭建(服务器搭建)

    Spark搭建集群比较繁琐,需要的内容比较多,这里主要从Centos.Hadoop.Hive.ZooKeeper.kafka的服务器环境搭建开始讲.其中Centos的搭建不具体说了,主要讲下集群的配置 ...

  7. filter与map函数

    ·filter()函数filter()函数包括两个参数,分别是function和list.该函数根据function参数返回的结果是否为真来过滤list参数中的项,最后返回一个新列表,如下例所示:&g ...

  8. cocos2dx在win10系统上的VS2017运行时报错:丢失MSVCR110.dll

    如题,运行环境为cocos2dx 3.14.1,win10系统,VS2017. 编译cocos2dx的cocos2d-x-3.14.1/build/cocos2d-Win32.sln已通过,不过运行时 ...

  9. linux ip命令和ifconfig命令

    From https://blog.csdn.net/freeking101/article/details/68939059

  10. REST framework---基于类的视图

    一.程序设计 1.路由设计 from django.conf.urls import url from django.contrib import admin from app import view ...