




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
©NXROBO20231
1.智能机器人视觉应用
——人脸检测课程介绍课程安排:
1)OpenCV介绍与安装2)配置人脸检测程序
3)运行人脸检测程序课程目的:实现通过人脸检测检测出视野范围内的人脸©NXROBO2023实现效果©NXROBO2023人脸检测效果OpenCV安装4©NXROBO2023OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉和机器学习软件库。它提供了丰富的图像处理和计算机视觉算法,可以用于开发各种应用程序,包括图像和视频处理、目标检测和识别、人脸识别、图像分割、运动跟踪等。ROS中已经集成了OpenCV库和相关的接口功能包,使用以下命令即可安装:$sudoaptinstallros-noetic-vision-opencvlibopencv-devpython3-opencv配置人脸检测程序新建spark_vision文件夹
拷贝face_detector功能包为python文件添加可执行权限©NXROBO2023运行程序启动摄像头
©NXROBO2023运行人脸检测程序$roslaunchcamera_driver_transferd435.launch$cdspark_noetic/$sourcedevel/setup.bash$rosrunface_detectorfacedetect.py检测程序讲解©NXROBO2023#!/usr/bin/envpython3#-*-coding:utf-8-*-importosimportnumpyasnpimportcv2importrospyfromstd_msgs.msgimportStringfromsensor_msgs.msgimportImagefromcv_bridgeimportCvBridge,CvBridgeError#localmodulesfromcommonimportclock,draw_strclassFacedetect():
def__init__(self):#创建订阅图像信息的订阅者,回调函数callbackself.image_sub=rospy.Subscriber("/camera/color/image_raw",Image,self.callback)#检测函数defdetect(self,img,cascade):'''使用级联分类器(CascadeClassifier)对图像进行目标检测,返回的结果rects是一个包含检测到目标的矩形框(ROI)的列表,每个矩形框表示一个检测到的目标。每个矩形框由四个值组成:(x,y,width,height),表示矩形框的左上角坐标和宽度、高度。'''rects=cascade.detectMultiScale(img,scaleFactor=1.3,minNeighbors=4,minSize=(30,30),flags=cv2.CASCADE_SCALE_IMAGE)iflen(rects)==0:return[]#将检测到的人脸矩形框的坐标转换为左上角坐标和右下角坐标的形式。rects[:,2:]+=rects[:,:2]returnrectsdefdraw_rects(self,img,rects,color):forx1,y1,x2,y2inrects:cv2.rectangle(img,(x1,y1),(x2,y2),color,2)#回调函数defcallback(self,data):try:#ROS图像与OpenCV图像格式之间进行转换image=CvBridge().imgmsg_to_cv2(data,"bgr8")exceptCvBridgeErrorase:print(e)
#获取当前脚本的目录路径script_dir=os.path.dirname(os.path.abspath(__file__))
#构建级联分类器文件的相对路径cascade_path=os.path.join(script_dir,"../data/haarcascades/haarcascade_frontalface_alt.xml")nested_path=os.path.join(script_dir,"../data/haarcascades/haarcascade_eye.xml")#创建级联分类器对象cascade=cv2.CascadeClassifier(cascade_path)nested=cv2.CascadeClassifier(nested_path)gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#图像灰度化gray=cv2.equalizeHist(gray)#直方图均衡化t=clock()rects=self.detect(gray,cascade)#检测图像中的人脸vis=image.copy()self.draw_rects(vis,rects,(0,255,0))#在图像上绘制人脸矩形框ifnotnested.empty():forx1,y1,x2,y2inrects:roi=gray[y1:y2,x1:x2]vis_roi=vis[y1:y2,x1:x2]subrects=self.detect(roi.copy(),nested)#检测人脸区域中的眼睛self.draw_rects(vis_roi,subrects,(255,0,0))#在眼睛区域绘制矩形框dt=clock()-tdraw_str(vis,(20,20),'time:%.1fms'%(dt*1000))#在图像上绘制处理时间cv2.imshow('facedetect',vis)#显示带有检测结果的图像cv2.waitKey(1)defmain():rospy.init_node('facedetector',anonymous=True)Facedetect()try:rospy.spin()exceptKeyboardInterrupt:print("Shuttingdown")cv2.destroyAllWindows()if__name__=='__main__':main()©NXROBO20238
2.智能机器人视觉应用
——人脸识别课程介绍课程安排:
1)人脸识别介绍2)人脸识别训练3)人脸识别
课程目的:实现通过人脸识别识别出训练过的人脸,并将人脸信息打印到图片上©NXROBO2023实现效果©NXROBO2023人脸识别效果OpenCV安装11©NXROBO2023OpenCV提供了用于人脸识别的功能和算法,使开发者能够实现各种人脸识别应用。人脸识别是一种计算机视觉技术,旨在检测和识别图像或视频中的人脸,并将其与预先存储的人脸进行比较和匹配。ROS中已经集成了OpenCV库和相关的接口功能包,使用以下命令即可安装:(已安装请忽略)$sudoaptinstallros-noetic-vision-opencvlibopencv-devpython3-opencv配置程序拷贝face_recognizer功能包为python文件添加可执行权限©NXROBO2023将课程代码中的face_recognizer功能包复制到spark_vision中(/home/spark/spark_noetic/src/spark_app/spark_vision/face_recognizer)准备人脸识别图像13©NXROBO2023图片命名格式为:id.姓名准备了三张人脸信息图像,放置在/spark_vision/face_recognizer/faces路径下训练人脸图像14©NXROBO2023运行人脸识别训练程序train_date.py(/spark_vision/face_recognizer/script)$cd/home/spark/spark_noetic/src/spark_app/spark_vision/face_recognizer/script$python3train_date.py训练程序讲解(头文件与main函数)©NXROBO2023importcv2importosfromPILimportImageimportnumpyasnpif__name__=='__main__':#获取当前脚本的目录路径script_dir=os.path.dirname(os.path.abspath(__file__))#图片路径path=os.path.join(script_dir,"../faces")#获取图象数组id标签和姓名faces,ids,names=getImageAndLables(path)#加载识别源recognizer=cv2.face.LBPHFaceRecognizer_create()#训练recognizer.train(faces,np.array(ids))#保存文件recognizer.write(os.path.join(path,"../data/haarcasades"))训练程序讲解(getImageAndLables函数)©NXROBO2023defgetImageAndLables(path):#存储人脸数据faceSamples=[]#存储id数据ids=[]#存储姓名数据names=[]#存储图片信息imagePaths=[os.path.join(path,f)forfinos.listdir(path)]#打印数组imagePathsprint('数据排列:',imagePaths)#分类器地址cascade_path=os.path.join(path,"../data/haarcascades/haarcascade_frontalface_default.xml")#加载分类器face_detector=cv2.CascadeClassifier(cascade_path)
#遍历列表中的图片forimagePathinimagePaths:#打开图片,并且灰度化PIL有九种不同的模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F.PIL_img=Image.open(imagePath).convert('L')#将图片转换为数组,以黑白深浅img_numpy=np.array(PIL_img,'uint8')#获取人脸特征faces=face_detector.detectMultiScale(img_numpy)#获取每张有图片的的ID和姓名id=int(os.path.split(imagePath)[1].split('.')[0])name=str(os.path.split(imagePath)[1].split('.')[1])#预防无面容图片forx,y,w,hinfaces:ids.append(id)names.append(name)faceSamples.append(img_numpy[y:y+h,x:x+w])#打印脸部特征和IDprint('name:',name)print('fs:',faceSamples)returnfaceSamples,ids,names运行程序启动摄像头
©NXROBO2023运行人脸识别程序$roslaunchcamera_driver_transferd435.launch$cdspark_noetic/$sourcedevel/setup.bash$rosrunface_recognizerface_recognition.py识别程序讲解©NXROBO2023defface_detect_demo(self,img):try:#ROS图像与OpenCV图像格式之间进行转换img=CvBridge().imgmsg_to_cv2(img,"bgr8")exceptCvBridgeErrorase:print(e)#设置成灰度图片gary=cv.cvtColor(img,cv.COLOR_BGR2GRAY)#导入人脸检测训练好的模型--分类器face_detect=cv.CascadeClassifier(self.cascade_path)#开始检测face=face_detect.detectMultiScale(gary,1.15,cv.CASCADE_SCALE_IMAGE)
forx,y,w,hinface:cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)#获取人脸id与置信度ids,confidence=self.recogizer.predict(gary[y:y+h,x:x+w])print('id:',ids,'confidence:',confidence)#如果置信度超过阈值80,则将人脸标记为"unknow",否则将显示对应的ID。ifconfidence>80:self.warningtime+=1ifself.warningtime>90:self.warningtime=0print("unknowpeople")cv.putText(img,'unknow',(x+10,y-10),cv.FONT_HERSHEY_SIMPLEX,0.75,(0,255,0),1)else:cv.putText(img,str(s[ids-1]),(x+10,y-10),cv.FONT_HERSHEY_SIMPLEX,0.75,(0,255,0),1)cv.imshow('result',img)cv.waitKey(1)©NXROBO202319
3.智能机器人视觉应用
——颜色识别课程介绍课程安排:
1)hsv颜色空间介绍2)颜色识别程序配置3)运行颜色识别课程目的:实现识别并圈出视野范围内的目标颜色©NXROBO2023实现效果©NXROBO2023颜色识别效果hsv颜色空间介绍22©NXROBO2023HSV颜色空间比RGB更接近人们对彩色的感知经验。非常直观地表达颜色的色调、鲜艳程度和明暗程度,方便进行颜色的对比。HSV表达彩色图像的方式由三个部分组成:Hue(色调、色相),色相是颜色的基本属性,用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算;Saturation(饱和度、色彩纯净度),饱和度是指颜色的纯度,越高颜色越纯,低则逐渐变灰,取0-100%的数值;Value(明度),明度是指颜色的亮暗程度,越高颜色越亮,越低颜色越暗,取0-100%的数值。HSV颜色空间可以用一个圆锥体或一个圆柱体来表示配置程序拷贝color_detection功能包为python文件添加可执行权限©NXROBO2023将课程代码中的color_detection功能包复制到spark_vision中(/home/spark/spark_noetic/src/spark_app/spark_vision/color_detection)运行程序启动摄像头
©NXROBO2023运行颜色识别程序$roslaunchcamera_driver_transferd435.launch$cdspark_noetic/$sourcedevel/setup.bash$rosruncolor_detectioncolor_detection.py识别程序讲解©NXROBO2023defcallback(self,data):try:image=CvBridge().imgmsg_to_cv2(data,"bgr8")#将ROS图像格式转换为OpenCV图像格式exceptCvBridgeErrorase:print(e)hsv=cv.cvtColor(image,cv.COLOR_BGR2HSV)#将图像转换为HSV颜色空间mask=cv.inRange(hsv,(71,120,120),(100,255,255))#根据颜色阈值范围创建掩膜line=cv.getStructuringElement(cv.MORPH_RECT,(15,15),(-1,-1))#创建用于形态学操作的线状结构元素mask=cv.morphologyEx(mask,cv.MORPH_OPEN,line)#进行形态学开运算contours,hierarchy=cv.findContours(mask,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)#查找轮廓index=-1max_area=0forcinrange(len(contours)):area=cv.contourArea(contours[c])#计算轮廓的面积ifarea>max_area:#找到最大面积的轮廓max_area=areaindex=cifindex>=0:rect=cv.minAreaRect(contours[index])#拟合最小外接矩形cv.ellipse(image,rect,(0,255,0),2,8)#绘制椭圆cv.circle(image,(32(rect[0][0]),32(rect[0][1])),2,(255,0,0),2,8,0)#绘制圆点cv.imshow("output",image)#显示图像cv.waitKey(1)©NXROBO202326
4.智能机器人视觉应用
——行人检测课程介绍课程安排: 1)HOG算法 2)行人检测程序配置 3)运行行人检测程序
课程目的:实现spark通过摄像头识别行人。©NXROBO2023实现效果©NXROBO2023行人检测效果配置程序拷贝spark_target_following工作空间©NXROBO2023将课程代码中的spark_target_following工作空间复制到spark中(/home/spark/)实操部分编译更新环境运行程序$cd~/spark_target_following$catkin_make$source~/spark_target_following/devel/setup.bash©NXROBO2022$roslaunchspark_followerbringup.launch识别程序讲解©NXROBO2023defface_detect_demo(self,img):try:#ROS图像与OpenCV图像格式之间进行转换img=CvBridge().imgmsg_to_cv2(img,"bgr8")exceptCvBridgeErrorase:print(e)#设置成灰度图片gary=cv.cvtColor(img,cv.COLOR_BGR2GRAY)#导入人脸检测训练好的模型--分类器face_detect=cv.CascadeClassifier(self.cascade_path)#开始检测face=face_detect.detectMultiScale(gary,1.15,cv.CASCADE_SCALE_IMAGE)
forx,y,w,hinface:cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)#获取人脸id与置信度ids,confidence=self.recogizer.predict(gary[y:y+h,x:x+w])print('id:',ids,'confidence:',confidence)#如果置信度超过阈值80,则将人脸标记为"unknow",否则将显示对应的ID。ifconfidence>80:self.warningtime+=1ifself.warningtime>90:self.warningtime=0print("unknowpeople")cv.putText(img,'unknow',(x+10,y-10),cv.FONT_HERSHEY_SIMPLEX,0.75,(0,255,0),1)else:cv.putText(img,str(s[ids-1]),(x+10,y-10),cv.FONT_HERSHEY_SIMPLEX,0.75,(0,255,0),1)cv.imshow('result',img)cv.waitKey(1)5.通过深度图信息处理让机器人跟着你走©NXROBO202232实现效果33©NXROBO2022课程介绍课程安排: 1)深度摄像头D435介绍 2)点云与PCL概述 3)nodelet的简单使用说明 4)实现跟踪的代码讲解相关知识点:D435深度摄像头,nodelet,机器视觉,运动控制课程目的:实现spark通过深度图信息处理进行跟踪©NXROBO2022深度摄像头D435介绍35©NXROBO2022深度摄像头D435深度摄像头D435介绍36©NXROBO2022深度摄像头D435深度摄像头D435技术规格介绍37©NXROBO2022深度摄像头D435点云概述38©NXROBO2022人的侧脸3D点云图点云PointCloud是三维空间中,表达目标空间分布和目标表面特性的点的集合,点云通常可以从深度相机中直接获取,也可以从CAD等软件中生成。点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量点集合,在获取物体表面每个采样点的空间坐标后,得到的是点的集合,称之为“点云”(PointCloud)。点云是用于表示多维点集合的数据结构,通常用于表示三维数据。在3D点云中,这些点通常代表采样表面的X,Y和Z几何坐标。参考网址:/documentation/tutorials/PCL概述39©NXROBO2022PCLPCL(PointCloudLibrary)是用于2D/3D图像和点云处理的大型开源跨平台的C++编程库。PCL框架实现了大量点云相关的通用算法和高效的数据结构。内容涉及了点云的获取、滤波、分割、配准、检索、特征提取、特征估计,表面重建、识别、模型拟合、追踪、曲面重建、可视化等等,这些算法可用于从嘈杂的数据中过滤出异常值,将3D点云缝合在一起,分割场景的部分区域,提取关键点并计算描述符,根据物体的几何外观识别实际物体,创建表面点云并将其可视化。支持多种操作系统,可以在Windows、Linux、MacOSX、Android、部分嵌入式实时系统上运行。基本类型PointCloud40©NXROBO2022PCL的基本数据类型是PointCloud,一个PointCloud是一个C++的模板类,它包含了以下字段:width(int):指定点云数据集的宽度对于无组织格式的数据集,width代表了所有点的总数对于有组织格式的数据集,width代表了一行中的总点数height(int):制定点云数据集的高度对于无组织格式的数据集,值为1对于有组织格式的数据集,表示总行数points(std::vector<PointT>):包含所有PointT类型的点的数据列表衍生类型PointXYZ-floatx,y,z
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省开远市第二中学2025届化学高二下期末学业质量监测试题含解析
- 浙江省嘉兴市嘉善高级中学2025届高二下化学期末达标检测试题含解析
- 新疆巩留县高级中学2024-2025学年物理高二第二学期期末学业质量监测试题含解析
- 跨国劳务派遣中介服务与合同履行及费用结算合同
- 电子设备仓储与高效货物航空运输合同
- 智能化标准厂房租赁及服务合同范本
- 车辆抵押担保贷款风险预警合同
- 茶楼环保与可持续发展合同
- 婚纱摄影策划合同范本
- 浙江省台州市临海市2025年八年级下学期期末数学试题及参考答案
- 《工程勘察设计收费标准》(2002年修订本)
- 2024草原承包合同书
- 钢结构阁楼合同范例
- 全国扶贫开发信息系统业务管理子系统用户操作手册20171110(升级版)
- 造价咨询预算评审服务投标方案(技术方案)
- 4.1自由扩散和协助扩散课件高一上学期生物人教版必修1
- 2024至2030年马赛克壁画项目投资价值分析报告
- 气压传动课件 项目一任务二 气动剪切机工作回路的搭建与调试
- 高标准农田 建设规范DB41-T 2412-2023
- 签订居间合同范本
- JBT 5300-2024 工业用阀门材料 选用指南(正式版)
评论
0/150
提交评论