基于ROS的人脸识别
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import rospy
- import cv2
- import numpy as np
- from sensor_msgs.msg import Image
- import cv_bridge
- class FaceDetector:
- def __init__(self):
- rospy.on_shutdown(self.cleanup)
- # 创建cv_bridge
- self.bridge = cv_bridge.CvBridge()
- self.image_pub = rospy.Publisher("cv_bridge_image", Image, queue_size=1)
- self.image_sub = rospy.Subscriber("/usb_cam/image_raw", Image, self.image_callback, queue_size=1)
- # self.image_sub = rospy.Subscriber("/camera/rgb/image_raw", Image, self.image_callback, queue_size=1)
- # 获取haar特征的级联表的XML文件,文件路径在launch文件中传入
- cascade_1 = rospy.get_param("~cascade_1", "~/catkin_ws/src/opencv/data/haar_detectors/haarcascade_frontalface_alt.xml")
- cascade_2 = rospy.get_param("~cascade_2", "~/catkin_ws/src/opencv/data/haar_detectors/haarcascade_profileface.xml")
- # 使用级联表初始化haar特征检测器
- self.cascade_1 = cv2.CascadeClassifier(cascade_1)
- self.cascade_2 = cv2.CascadeClassifier(cascade_2)
- # 设置级联表的参数,优化人脸识别,可以在launch文件中重新配置
- self.haar_scaleFactor = rospy.get_param("~haar_scaleFactor", 1.2)
- self.haar_minNeighbors = rospy.get_param("~haar_minNeighbors", 2)
- self.haar_minSize = rospy.get_param("~haar_minSize", 40)
- self.haar_maxSize = rospy.get_param("~haar_maxSize", 60)
- self.color = (50, 255, 50)
- def image_callback(self, data):
- # 使用cv_bridge将ROS的图像数据转换成OpenCV的图像格式
- cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
- frame = np.array(cv_image, dtype=np.uint8)
- # 创建灰度图像
- grey_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
- # 创建平衡直方图,减少光线影响
- grey_image = cv2.equalizeHist(grey_image)
- # 尝试检测人脸
- faces_result = self.detect_face(grey_image)
- # 在opencv的窗口中框出所有人脸区域
- if len(faces_result) > 0:
- for face in faces_result:
- x, y, w, h = face
- cv2.rectangle(cv_image, (x, y), (x + w, y + h), self.color, 2)
- # 将识别后的图像转换成ROS消息并发布
- self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8"))
- def detect_face(self, input_image):
- # 首先匹配正面人脸的模型
- if self.cascade_1:
- faces = self.cascade_1.detectMultiScale(input_image,
- self.haar_scaleFactor,
- self.haar_minNeighbors,
- cv2.CASCADE_SCALE_IMAGE,
- (self.haar_minSize, self.haar_maxSize))
- # 如果正面人脸匹配失败,那么就尝试匹配侧面人脸的模型
- if len(faces) == 0 and self.cascade_2:
- faces = self.cascade_2.detectMultiScale(input_image,
- self.haar_scaleFactor,
- self.haar_minNeighbors,
- cv2.CASCADE_SCALE_IMAGE,
- (self.haar_minSize, self.haar_maxSize))
- return faces
- def cleanup(self):
- print("强制结束程序。。")
- cv2.destroyAllWindows()
- if __name__ == '__main__':
- try:
- # 初始化ros节点
- rospy.init_node("face_detector")
- follower = FaceDetector()
- rospy.loginfo("人脸识别已经启动。。。")
- rospy.loginfo("请打开opencv节点订阅消息。。。")
- rospy.spin()
- except KeyboardInterrupt:
- print("强制结束程序。。")
- cv2.destroyAllWindows()
基于ROS的人脸识别的更多相关文章
- 基于MATLAB的人脸识别算法的研究
基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...
- 基于 OpenCV 的人脸识别
基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...
- 基于 HTML5 的人脸识别技术
基于 HTML5 的人脸识别技术 https://github.com/auduno/headtrackr/
- 基于node.js人脸识别之人脸对比
基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...
- 【计算机视觉】基于OpenCV的人脸识别
一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...
- java基于OpenCV的人脸识别
基于Java简单的人脸和人眼识别程序 使用这个程序之前必须先安装配置OpenCV详细教程见:https://www.cnblogs.com/prodigal-son/p/12768948.html 注 ...
- 基于PCA的人脸识别步骤
代码下载:基于PCA(主成分分析)的人脸识别 人脸识别是一个有监督学习过程,首先利用训练集构造一个人脸模型,然后将测试集与训练集进行匹配,找到与之对应的训练集头像.最容易的方式是直接利用欧式距离计算测 ...
- 知物由学 | 基于DNN的人脸识别中的反欺骗机制
"知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...
- 基于HTML5 的人脸识别活体认证
近几年,人脸识别技术在身份认证领域的应用已经有了较多应用,例如:支付宝.招行的取款.养老金领取等方面,但在杜绝假冒.认证安全性等方面,目前还是一个比较需要进一步解决的课题,特别是在移动端的活体认证技术 ...
随机推荐
- ajax 传递中文字符参数 问题
使用ajax 传递中文字符串时, 服务端会接收不到预期的 中文字符. 此时,需要对 js中的中文字符参数进行 编码, 到达服务端后, 再为其解码 即可. 前端: var url = '....'; ...
- 一键安装metasploit(linux,os x)
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit- ...
- jenkins-参数化构建(二)插件:Extended Choice Parameter
一.Extended Choice Parameter插件 这个插件相对丰富,安装过程就不过多介绍了,在点击项目设置后会出现下载的插件名字. 写在文件中构建时效果如下:
- Selenium 3----设置元素等待
在做Web应用的自动化测试时,定位元素必不可少,这个过程经常出现定位不到元素的情况,常见原因有哪些呢? 1.描述错误 提高编写水平.细心 2.Frame/Iframe框架原因 在元素所在框架里定位该元 ...
- COMP9021 PRINCIPLES OF PROGRAMMING
QUIZ 7COMP9021 PRINCIPLES OF PROGRAMMING$ python3 quiz_7.pyEnter four integers: 0 2 2 8Here is the g ...
- Spark入门到精通--(第七节)环境搭建(服务器搭建)
Spark搭建集群比较繁琐,需要的内容比较多,这里主要从Centos.Hadoop.Hive.ZooKeeper.kafka的服务器环境搭建开始讲.其中Centos的搭建不具体说了,主要讲下集群的配置 ...
- filter与map函数
·filter()函数filter()函数包括两个参数,分别是function和list.该函数根据function参数返回的结果是否为真来过滤list参数中的项,最后返回一个新列表,如下例所示:&g ...
- cocos2dx在win10系统上的VS2017运行时报错:丢失MSVCR110.dll
如题,运行环境为cocos2dx 3.14.1,win10系统,VS2017. 编译cocos2dx的cocos2d-x-3.14.1/build/cocos2d-Win32.sln已通过,不过运行时 ...
- linux ip命令和ifconfig命令
From https://blog.csdn.net/freeking101/article/details/68939059
- REST framework---基于类的视图
一.程序设计 1.路由设计 from django.conf.urls import url from django.contrib import admin from app import view ...