《鴻蒙機器人比賽》課件-05-1 智能機器人視覺應用_第1頁
《鴻蒙機器人比賽》課件-05-1 智能機器人視覺應用_第2頁
《鴻蒙機器人比賽》課件-05-1 智能機器人視覺應用_第3頁
《鴻蒙機器人比賽》課件-05-1 智能機器人視覺應用_第4頁
《鴻蒙機器人比賽》課件-05-1 智能機器人視覺應用_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

?NXROBO20231

1.智能機器人視覺應用

——人臉檢測課程介紹課程安排:

1)OpenCV介紹與安裝2)配置人臉檢測程序

3)運行人臉檢測程序課程目的:實現(xiàn)通過人臉檢測檢測出視野范圍內(nèi)的人臉?NXROBO2023實現(xiàn)效果?NXROBO2023人臉檢測效果OpenCV安裝4?NXROBO2023OpenCV(OpenSourceComputerVisionLibrary)是一個開源的計算機視覺和機器學習軟件庫。它提供了豐富的圖像處理和計算機視覺算法,可以用于開發(fā)各種應用程序,包括圖像和視頻處理、目標檢測和識別、人臉識別、圖像分割、運動跟蹤等。ROS中已經(jīng)集成了OpenCV庫和相關的接口功能包,使用以下命令即可安裝:$sudoaptinstallros-noetic-vision-opencvlibopencv-devpython3-opencv配置人臉檢測程序新建spark_vision文件夾

拷貝face_detector功能包為python文件添加可執(zhí)行權限?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):#創(chuàng)建訂閱圖像信息的訂閱者,回調(diào)函數(shù)callbackself.image_sub=rospy.Subscriber("/camera/color/image_raw",Image,self.callback)#檢測函數(shù)defdetect(self,img,cascade):'''使用級聯(lián)分類器(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)#回調(diào)函數(shù)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__))

#構建級聯(lián)分類器文件的相對路徑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")#創(chuàng)建級聯(lián)分類器對象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)#檢測人臉區(qū)域中的眼睛self.draw_rects(vis_roi,subrects,(255,0,0))#在眼睛區(qū)域繪制矩形框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)人臉識別

課程目的:實現(xiàn)通過人臉識別識別出訓練過的人臉,并將人臉信息打印到圖片上?NXROBO2023實現(xiàn)效果?NXROBO2023人臉識別效果OpenCV安裝11?NXROBO2023OpenCV提供了用于人臉識別的功能和算法,使開發(fā)者能夠?qū)崿F(xiàn)各種人臉識別應用。人臉識別是一種計算機視覺技術,旨在檢測和識別圖像或視頻中的人臉,并將其與預先存儲的人臉進行比較和匹配。ROS中已經(jīng)集成了OpenCV庫和相關的接口功能包,使用以下命令即可安裝:(已安裝請忽略)$sudoaptinstallros-noetic-vision-opencvlibopencv-devpython3-opencv配置程序拷貝face_recognizer功能包為python文件添加可執(zhí)行權限?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函數(shù))?NXROBO2023importcv2importosfromPILimportImageimportnumpyasnpif__name__=='__main__':#獲取當前腳本的目錄路徑script_dir=os.path.dirname(os.path.abspath(__file__))#圖片路徑path=os.path.join(script_dir,"../faces")#獲取圖象數(shù)組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函數(shù))?NXROBO2023defgetImageAndLables(path):#存儲人臉數(shù)據(jù)faceSamples=[]#存儲id數(shù)據(jù)ids=[]#存儲姓名數(shù)據(jù)names=[]#存儲圖片信息imagePaths=[os.path.join(path,f)forfinos.listdir(path)]#打印數(shù)組imagePathsprint('數(shù)據(jù)排列:',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')#將圖片轉換為數(shù)組,以黑白深淺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)運行顏色識別課程目的:實現(xiàn)識別并圈出視野范圍內(nèi)的目標顏色?NXROBO2023實現(xiàn)效果?NXROBO2023顏色識別效果hsv顏色空間介紹22?NXROBO2023HSV顏色空間比RGB更接近人們對彩色的感知經(jīng)驗。非常直觀地表達顏色的色調(diào)、鮮艷程度和明暗程度,方便進行顏色的對比。HSV表達彩色圖像的方式由三個部分組成:Hue(色調(diào)、色相),色相是顏色的基本屬性,用角度度量,取值范圍為0°~360°,從紅色開始按逆時針方向計算;Saturation(飽和度、色彩純凈度),飽和度是指顏色的純度,越高顏色越純,低則逐漸變灰,取0-100%的數(shù)值;Value(明度),明度是指顏色的亮暗程度,越高顏色越亮,越低顏色越暗,取0-100%的數(shù)值。HSV顏色空間可以用一個圓錐體或一個圓柱體來表示配置程序拷貝color_detection功能包為python文件添加可執(zhí)行權限?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))#根據(jù)顏色閾值范圍創(chuàng)建掩膜line=cv.getStructuringElement(cv.MORPH_RECT,(15,15),(-1,-1))#創(chuàng)建用于形態(tài)學操作的線狀結構元素mask=cv.morphologyEx(mask,cv.MORPH_OPEN,line)#進行形態(tài)學開運算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)運行行人檢測程序

課程目的:實現(xiàn)spark通過攝像頭識別行人。?NXROBO2023實現(xiàn)效果?NXROBO2023行人檢測效果配置程序拷貝spark_target_following工作空間?NXROBO2023將課程代碼中的spark_target_following工作空間復制到spark中(/home/spark/)實操部分編譯更新環(huán)境運行程序$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實現(xiàn)效果33?NXROBO2022課程介紹課程安排: 1)深度攝像頭D435介紹 2)點云與PCL概述 3)nodelet的簡單使用說明 4)實現(xiàn)跟蹤的代碼講解相關知識點:D435深度攝像頭,nodelet,機器視覺,運動控制課程目的:實現(xiàn)spark通過深度圖信息處理進行跟蹤?NXROBO2022深度攝像頭D435介紹35?NXROBO2022深度攝像頭D435深度攝像頭D435介紹36?NXROBO2022深度攝像頭D435深度攝像頭D435技術規(guī)格介紹37?NXROBO2022深度攝像頭D435點云概述38?NXROBO2022人的側臉3D點云圖點云PointCloud是三維空間中,表達目標空間分布和目標表面特性的點的集合,點云通??梢詮纳疃认鄼C中直接獲取,也可以從CAD等軟件中生成。點云是在同一空間參考系下表達目標空間分布和目標表面特性的海量點集合,在獲取物體表面每個采樣點的空間坐標后,得到的是點的集合,稱之為“點云”(PointCloud)。點云是用于表示多維點集合的數(shù)據(jù)結構,通常用于表示三維數(shù)據(jù)。在3D點云中,這些點通常代表采樣表面的X,Y和Z幾何坐標。參考網(wǎng)址:/documentation/tutorials/PCL概述39?NXROBO2022PCLPCL(PointCloudLibrary)是用于2D/3D圖像和點云處理的大型開源跨平臺的C++編程庫。PCL框架實現(xiàn)了大量點云相關的通用算法和高效的數(shù)據(jù)結構。內(nèi)容涉及了點云的獲取、濾波、分割、配準、檢索、特征提取、特征估計,表面重建、識別、模型擬合、追蹤、曲面重建、可視化等等,這些算法可用于從嘈雜的數(shù)據(jù)中過濾出異常值,將3D點云縫合在一起,分割場景的部分區(qū)域,提取關鍵點并計算描述符,根據(jù)物體的幾何外觀識別實際物體,創(chuàng)建表面點云并將其可視化。支持多種操作系統(tǒng),可以在Windows、Linux、MacOSX、Android、部分嵌入式實時系統(tǒng)上運行?;绢愋蚉ointCloud40?NXROBO2022PCL的基本數(shù)據(jù)類型是PointCloud,一個PointCloud是一個C++的模板類,它包含了以下字段:width(int):指定點云數(shù)據(jù)集的寬度對于無組織格式的數(shù)據(jù)集,width代表了所有點的總數(shù)對于有組織格式的數(shù)據(jù)集,width代表了一行中的總點數(shù)height(int):制定點云數(shù)據(jù)集的高度對于無組織格式的數(shù)據(jù)集,值為1對于有組織格式的數(shù)據(jù)集,表示總行數(shù)points(std::vector<PointT>):包含所有PointT類型的點的數(shù)據(jù)列表衍生類型PointXYZ-floatx,y,z

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論