位置: IT常识 - 正文

【ROS】OpenCV+ROS 实现人脸识别(Ubantu16.04)(roi opencv)

编辑:rootadmin
【ROS】OpenCV+ROS 实现人脸识别(Ubantu16.04) 目录

前言

一、环境配置  

1.安装ROS 

2.摄像头调用

3.导入OpenCV

二、创建工作空间和功能包

1.创建工作空间

2.创建功能包

三、人脸识别检测相关代码

1.python文件

2.lanuch文件 

3.CvBridge

四、代码实测

1.执行命令行 

2.人脸识别效果

五、报错解决

六、总结

前言

推荐整理分享【ROS】OpenCV+ROS 实现人脸识别(Ubantu16.04)(roi opencv),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ros中opencv,ros opencv 物体位置 方向,ros csdn,opentcs ros,ros中opencv,ros中opencv,ros中opencv,ros2 opencv,内容如对您有帮助,希望把文章链接给更多的朋友!

本文主要学习 ROS机器人操作系统 ,在ROS系统里调用 OpenCV库 实现人脸识别任务

一、环境配置  1.安装ROS sudo apt-get install ros-kinetic-desktop-full

如果ROS还不懂如何安装的,可以看下这一篇:【Linux学习】虚拟机VMware 安装ROS 一条龙教程+部分报错解决_猿力猪的博客-CSDN博客_ros vmwareLinux下载安装ROS,一条龙详解!希望对您有所帮助!https://blog.csdn.net/m0_61745661/article/details/124534353

2.摄像头调用

安装摄像头组件相关的包,命令行如下:

sudo apt-get install ros-kinetic-usb-cam

启动摄像头,命令行如下:

roslaunch usb_cam usb_cam-test.launch

调用摄像头成功,如下图所示:

摄像头的驱动发布的相关数据,如下图所示:

摄像头 usb_cam/image_raw 这个话题,发布的消息的具体类型,如下图所示:

【ROS】OpenCV+ROS 实现人脸识别(Ubantu16.04)(roi opencv)

那么图像消息里面的成员变量有哪些呢?

打印一下就知道了!一个消息类型里面的具体成员变量,如下图所示:

Header:很多话题消息里面都包含的

        消息头:包含消息序号,时间戳和绑定坐标系

        消息的序号:表示我们这个消息发布是排第几位的,并不需要我们手动去标定,每次

        发布消息的时候会自动地去累加

        绑定坐标系:表示的是我们是针对哪一个坐标系去发布的header有时候也不需要去配置

height:图像的纵向分辨率width:图像的横向分辨率encoding:图像的编码格式,包含RGB、YUV等常用格式,都是原始图像的编码格式,不涉及图像压缩编码is_bigendian: 图像数据的大小端存储模式step:一行图像数据的字节数量,作为数据的步长参数data:存储图像数据的数组,大小为step×height个字节format:图像的压缩编码格式(jpeg、png、bmp)3.导入OpenCV

在ROS当中完成OpenCV的安装,命令行如下图所示:

sudo apt-get install ros-kinetic-vision-opencv libopencv-dev python-opencv

安装完成 

二、创建工作空间和功能包1.创建工作空间mkdir -p ~/catkin_ws/srccd ~/catkin_ws/srccatkin_init_workspace创建完成工作空间后,在根目录下面,执行编译整个工作空间  cd ~/catkin_ws/catkin_make工作空间中会自动生成两个文件夹:devel,builddevel文件夹中产生几个setup.*sh形成的环境变量设置脚本,使用source命令运行这些脚本文件,则工作空间中的环境变量得以生效 source devel/setup.sh 将环境变量设置到/.bashrc文件中gedit ~/.bashrc在打开的文件,最下面粘贴以下代码即可设置环境变量 source ~/catkin_ws/devel/setup.bash2.创建功能包 开始创建cd ~/catkin_ws/srccatkin_create_pkg learning std_msgs rospy roscpp回到根目录,编译并设置环境变量  cd ~/catkin_wscatkin_makesource ~/catkin_ws/devel/setup.sh三、人脸识别检测相关代码基于 Haar 特征的级联分类器检测算法核心内容,如下所示:灰阶色彩转换缩小摄像头图像直方图均衡化检测人脸1.python文件

face_detector.py

#!/usr/bin/env python# -*- coding: utf-8 -*-import rospyimport cv2import numpy as npfrom sensor_msgs.msg import Image, RegionOfInterestfrom cv_bridge import CvBridge, CvBridgeErrorclass faceDetector: def __init__(self): rospy.on_shutdown(self.cleanup); # 创建cv_bridge self.bridge = CvBridge() self.image_pub = rospy.Publisher("cv_bridge_image", Image, queue_size=1) # 获取haar特征的级联表的XML文件,文件路径在launch文件中传入 cascade_1 = rospy.get_param("~cascade_1", "") cascade_2 = rospy.get_param("~cascade_2", "") # 使用级联表初始化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) # 初始化订阅rgb格式图像数据的订阅者,此处图像topic的话题名可以在launch文件中重映射 self.image_sub = rospy.Subscriber("input_rgb_image", Image, self.image_callback, queue_size=1) def image_callback(self, data): # 使用cv_bridge将ROS的图像数据转换成OpenCV的图像格式 try: cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8") frame = np.array(cv_image, dtype=np.uint8) except CvBridgeError, e: print e # 创建灰度图像 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 "Shutting down vision node." cv2.destroyAllWindows()if __name__ == '__main__': try: # 初始化ros节点 rospy.init_node("face_detector") faceDetector() rospy.loginfo("Face detector is started..") rospy.loginfo("Please subscribe the ROS image.") rospy.spin() except KeyboardInterrupt: print "Shutting down face detector node." cv2.destroyAllWindows()2.lanuch文件 

usb_cam.launch

摄像头启动文件<launch> <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" > <param name="video_device" value="/dev/video0" /> <param name="image_width" value="640" /> <param name="image_height" value="480" /> <param name="pixel_format" value="yuyv" /> <param name="camera_frame_id" value="usb_cam" /> <param name="io_method" value="mmap"/> </node></launch>

face_detector.launch

 人脸识别启动文件<launch> <node pkg="test2" name="face_detector" type="face_detector.py" output="screen"> <remap from="input_rgb_image" to="/usb_cam/image_raw" /> <rosparam> haar_scaleFactor: 1.2 haar_minNeighbors: 2 haar_minSize: 40 haar_maxSize: 60 </rosparam> <param name="cascade_1" value="$(find robot_vision)/data/haar_detectors/haarcascade_frontalface_alt.xml" /> <param name="cascade_2" value="$(find robot_vision)/data/haar_detectors/haarcascade_profileface.xml" /> </node></launch>3.CvBridgeROS 与 OpenCV 之间的数据连接是通过 CvBridge 来实现的ROS Image Message与 OpenCV Ipllmage 之间连接的一个桥梁 

cv_bridge_test.py 

#!/usr/bin/env python# -*- coding: utf-8 -*-import rospyimport cv2from cv_bridge import CvBridge, CvBridgeErrorfrom sensor_msgs.msg import Imageclass image_converter: def __init__(self): # 创建cv_bridge,
本文链接地址:https://www.jiuchutong.com/zhishi/300601.html 转载请保留说明!

上一篇:总结824(总结的拼音)

下一篇:【视觉SLAM14讲】【汇总】(视觉slam有多难)

  • 华为手环7苹果能用吗(华为手环7苹果手机门禁卡)

    华为手环7苹果能用吗(华为手环7苹果手机门禁卡)

  • qq绿钻可以同时几个人登录

    qq绿钻可以同时几个人登录

  • vivo x50 pro+屏幕尺寸多大(vivox50pro屏幕绿色竖线怎么处理)

    vivo x50 pro+屏幕尺寸多大(vivox50pro屏幕绿色竖线怎么处理)

  • 手机卡封多了对自己有什么影响(手机卡封了对个人有没有影响)

    手机卡封多了对自己有什么影响(手机卡封了对个人有没有影响)

  • 冰箱包装扔了能退货吗(冰箱包装扔了能放多久)

    冰箱包装扔了能退货吗(冰箱包装扔了能放多久)

  • 回收站的文件怎么恢复(回收站的文件怎么删除不掉)

    回收站的文件怎么恢复(回收站的文件怎么删除不掉)

  • b站的视频如何保存到本地(B站的视频如何保存到相册)

    b站的视频如何保存到本地(B站的视频如何保存到相册)

  • iphonex辅助触控自动消失怎么解决(iphone x 辅助触控)

    iphonex辅助触控自动消失怎么解决(iphone x 辅助触控)

  • 为什么抖音关注了别人会自动取消(为什么抖音关注了却不显示)

    为什么抖音关注了别人会自动取消(为什么抖音关注了却不显示)

  • 微信视频响两声对方忙线中是什么意思(微信视频响两声对方忙是什么原因)

    微信视频响两声对方忙线中是什么意思(微信视频响两声对方忙是什么原因)

  • 手机收到各种验证码怎么回事(手机收到各种验证码有事儿吗)

    手机收到各种验证码怎么回事(手机收到各种验证码有事儿吗)

  • 一个钉钉账号可以两个人用吗(一个钉钉账号可以在几个手机用)

    一个钉钉账号可以两个人用吗(一个钉钉账号可以在几个手机用)

  • ipad5能不能用pencil(ipad5能不能用笔)

    ipad5能不能用pencil(ipad5能不能用笔)

  • cpu温度90度正常吗(cpu温度90度正常吗怎么解决)

    cpu温度90度正常吗(cpu温度90度正常吗怎么解决)

  • 投影仪怎么调亮度(投影仪怎么调亮点)

    投影仪怎么调亮度(投影仪怎么调亮点)

  • 金立m6怎样删除壁纸(金立m6怎样删除手机自带软件)

    金立m6怎样删除壁纸(金立m6怎样删除手机自带软件)

  • 华为12599怎么关闭(华为手机*#2846#怎么关)

    华为12599怎么关闭(华为手机*#2846#怎么关)

  • 滴滴快车怎样订往返(怎样订滴滴打车)

    滴滴快车怎样订往返(怎样订滴滴打车)

  • oppo reno充电速度(opporeno4充电速度)

    oppo reno充电速度(opporeno4充电速度)

  • 交易猫怎么申请代练(交易猫怎么申请永久包赔)

    交易猫怎么申请代练(交易猫怎么申请永久包赔)

  • 华为p30水滴屏可以隐藏么(华为p30水滴屏是什么意思)

    华为p30水滴屏可以隐藏么(华为p30水滴屏是什么意思)

  • 闪存有什么用(闪存好不好)

    闪存有什么用(闪存好不好)

  • ios10.2.1无法验证更新(ios提示无法验证app)

    ios10.2.1无法验证更新(ios提示无法验证app)

  • 纯净版xp系统打不开chm文件的解决方法(纯净版xp系统打不开了)

    纯净版xp系统打不开chm文件的解决方法(纯净版xp系统打不开了)

  • 《一文搞懂IoU发展历程》GIoU、DIoU、CIoU、EIoU、αIoU、SIoU

    《一文搞懂IoU发展历程》GIoU、DIoU、CIoU、EIoU、αIoU、SIoU

  • 特定业务计算的应纳税所得额
  • 电子税务局税种认定怎么操作
  • 怎么报企业所得税季报
  • 通讯费没有公司抬头怎么报销
  • 工业企业成本核算的一般程序包括下列的
  • 多开的增值税发票交多少税
  • 手工账写错字怎么改呢
  • 通行费电子增值税怎么算
  • 营改增医院增值税
  • 跨月作废发票怎么开
  • 企业事故赔偿支出可以抵税吗
  • 用实物资产注资给子公司需缴纳增值税吗?
  • 党建经费如何入账
  • 收取施工队管理费
  • 使用权资产的界定
  • 电子发票没有纳税人识别号可以报销吗
  • 员工收到货款不交公司,法律规定
  • 企业筹建期间可以自己发农民工工资么
  • 出租房产免收租金合法吗
  • 进口增值税可以抵扣销项税额吗
  • 生育津贴支付方式
  • 佣金可以开票吗
  • linux的使用场合
  • 收支两条线是指
  • 销售合作分成会计分录
  • php的核心
  • 拆迁补偿收入如何纳税
  • 辅导期纳税人注意事项
  • symfony框架经验总结
  • 生产成本和库存商品的区别
  • 冲销进项税
  • phpwechat
  • vue 富文本编辑框
  • 转账支票购买办公用品一批,共计600元
  • 旅游业发票怎么抵扣
  • 电子发票开出后如何查看
  • 建厂购买材料的会计科目
  • 房地产销售折扣
  • 安装php5.6
  • 有外币业务的银行
  • 支付宝付款,对方能看见是花呗还是银行卡么
  • 小规模纳税人工程款税率是多少
  • 资源税的征税对象都是原矿和选矿
  • 退休人员返聘签订什么合同
  • 研发支出费用化支出期末有余额吗
  • 一般纳税人购买汽车会计分录
  • 支付借款利息需要交税吗
  • 残疾基金缴纳标准
  • 分公司做账报税
  • 对公支付宝提现怎么取消
  • 固定资产计提折旧的会计科目
  • 销售废旧物资如何入账
  • mysqlpid文件没有
  • workbench如何运行
  • win7复制文件
  • 如何更改桌面文件存放位置
  • 魔方优化大师是免费的吗
  • host文件内容
  • w10运行命令在哪
  • 如何彻底删除超级QQ秀
  • ubuntu查cpu信息
  • windows7打开网络连接
  • win7更新补丁80072efe
  • 安卓获取设备信息
  • unity serial number
  • jquery教程w3c
  • 安卓音游吃音
  • 支持向量机
  • jquery自定义事件
  • jquery html函数
  • shell脚本 !
  • pm2启动nodejs
  • python算法怎么用
  • java轻松学
  • node js模块
  • 发票缴销办理流程图
  • 北京定额发票查验
  • 国家税务局机打发票可以报销吗
  • 安徽省各地区最低录取中考分数线
  • 2021年水资源税征期
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设