Python+Opencv實(shí)戰(zhàn)之人臉追蹤詳解_第1頁(yè)
Python+Opencv實(shí)戰(zhàn)之人臉追蹤詳解_第2頁(yè)
Python+Opencv實(shí)戰(zhàn)之人臉追蹤詳解_第3頁(yè)
Python+Opencv實(shí)戰(zhàn)之人臉追蹤詳解_第4頁(yè)
Python+Opencv實(shí)戰(zhàn)之人臉追蹤詳解_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第Python+Opencv實(shí)戰(zhàn)之人臉追蹤詳解目錄前言人臉追蹤技術(shù)簡(jiǎn)介使用基于dlibDCF的跟蹤器進(jìn)行人臉跟蹤使用基于dlibDCF的跟蹤器進(jìn)行對(duì)象跟蹤小結(jié)

前言

人臉處理是人工智能中的一個(gè)熱門話題,人臉處理可以使用計(jì)算機(jī)視覺算法從人臉中自動(dòng)提取大量信息,例如身份、意圖和情感;而目標(biāo)跟蹤試圖估計(jì)目標(biāo)在整個(gè)視頻序列中的軌跡,其中只有目標(biāo)的初始位置是已知的,將這兩者進(jìn)行結(jié)合將產(chǎn)生許多有趣的應(yīng)用。由于外觀變化、遮擋、快速運(yùn)動(dòng)、運(yùn)動(dòng)模糊和比例變化等多種因素,人臉追蹤非常具有挑戰(zhàn)性。

人臉追蹤技術(shù)簡(jiǎn)介

基于判別相關(guān)濾波器(discriminativecorrelationfilter,DCF)的視覺跟蹤器具有優(yōu)異的性能和較高的計(jì)算效率,可用于實(shí)時(shí)應(yīng)用程序。DCF跟蹤器是一種非常流行的基于邊界框跟蹤的方法。

在dlib庫(kù)中實(shí)現(xiàn)了基于DCF的跟蹤器,可以很方便的將其用于對(duì)象跟蹤。在本文中,我們將介紹如何使用此跟蹤器進(jìn)行人臉和用戶選擇對(duì)象的跟蹤,這種方法也稱為判別尺度空間跟蹤器(DiscriminativeScaleSpaceTracker,DSST),追蹤器僅需要輸入原始視頻和目標(biāo)初始位置的邊界框,然后跟蹤器自動(dòng)預(yù)測(cè)目標(biāo)的軌跡。

使用基于dlibDCF的跟蹤器進(jìn)行人臉跟蹤

在進(jìn)行人臉追蹤時(shí),我們首先使用dlib人臉檢測(cè)器進(jìn)行初始化,然后使用基于dlibDCF的跟蹤器DSST進(jìn)行人臉跟蹤。調(diào)用以下函數(shù)初始化相關(guān)跟蹤器:

tracker=dlib.correlation_tracker()

這將使用默認(rèn)值(filter_size=6,num_scale_levels=5,scale_window_size=23,regularizer_space=0.001,nu_space=0.025,regularizer_scale=0.001,nu_scale=0.025,scale_pyramid_alpha=1.020)初始化跟蹤器。filter_size和num_scale_levels的值越大,跟蹤精度越高,但它需要算力也更大;filter_size的推薦使用值為5、6和7;num_scale_levels的推薦使用值為4、5和6。

使用tracker.start_track()可以開始跟蹤。在開始追蹤前,我們需要先執(zhí)行人臉檢測(cè),并將檢測(cè)到的人臉位置傳遞給這個(gè)方法:

iftracking_faceisFalse:

gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

#嘗試檢測(cè)人臉以初始化跟蹤器

rects=detector(gray,0)

#檢查是否檢測(cè)到人臉

iflen(rects)0:

#開始追蹤

tracker.start_track(frame,rects[0])

tracking_face=True

當(dāng)檢測(cè)到人臉后,人臉跟蹤器將開始跟蹤邊界框內(nèi)的內(nèi)容。為了更新被跟蹤對(duì)象的位置,需要調(diào)用tracker.update()方法:

tracker.update(frame)

tracker.update()方法更新跟蹤器并返回衡量跟蹤器置信度的指標(biāo),此指標(biāo)可用于使用人臉檢測(cè)重新初始化跟蹤器。

要獲取被跟蹤對(duì)象的位置,需要調(diào)用tracker.get_position()方法:

pos=tracker.get_position()

tracker.get_position()方法返回被跟蹤對(duì)象的位置。最后,繪制人臉的預(yù)測(cè)位置:

cv2.rectangle(frame,(int(pos.left()),int(pos.top())),(int(pos.right()),int(pos.bottom())),(0,255,0),3)

下圖中,顯示了人臉跟蹤算法的跟蹤效果過程:

在上圖中,可以看到算法當(dāng)前正在跟蹤檢測(cè)到的人臉,同時(shí)還可以按數(shù)字1以重新初始化跟蹤。

完整代碼

完整代碼如下所示,同時(shí)我們需要提供按下數(shù)字1時(shí)重新初始化跟蹤器的選項(xiàng)。

importcv2

importdlib

defdraw_text_info():

#繪制文本的位置

menu_pos_1=(10,20)

menu_pos_2=(10,40)

#繪制菜單信息

cv2.putText(frame,"Use'1'tore-initializetracking",menu_pos_1,cv2.FONT_HERSHEY_SIMPLEX,0.5,(255,255,255))

iftracking_face:

cv2.putText(frame,"trackingtheface",menu_pos_2,cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0))

else:

cv2.putText(frame,"detectingafacetoinitializetracking...",menu_pos_2,cv2.FONT_HERSHEY_SIMPLEX,0.5,

(0,0,255))

#創(chuàng)建視頻捕獲對(duì)象

capture=cv2.VideoCapture(0)

#加載人臉檢測(cè)器

detector=dlib.get_frontal_face_detector()

#初始化追蹤器

tracker=dlib.correlation_tracker()

#當(dāng)前是否在追蹤人臉

tracking_face=False

whileTrue:

#捕獲視頻幀

ret,frame=capture.read()

#繪制基本信息

draw_text_info()

iftracking_faceisFalse:

gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

#嘗試檢測(cè)人臉以初始化跟蹤器

rects=detector(gray,0)

#通過判斷是否檢測(cè)到人臉來決定是否啟動(dòng)追蹤

iflen(rects)0:

#Starttracking:

tracker.start_track(frame,rects[0])

tracking_face=True

iftracking_faceisTrue:

#更新跟蹤器并打印測(cè)量跟蹤器的置信度

print(tracker.update(frame))

#獲取被跟蹤對(duì)象的位置

pos=tracker.get_position()

#繪制被跟蹤對(duì)象的位置

cv2.rectangle(frame,(int(pos.left()),int(pos.top())),(int(pos.right()),int(pos.bottom())),(0,255,0),3)

#捕獲鍵盤事件

key=0xFFcv2.waitKey(1)

#按1初始化追蹤器

ifkey==ord("1"):

tracking_face=False

#按q退出

ifkey==ord('q'):

break

#顯示結(jié)果

cv2.imshow("Facetrackingusingdlibfrontalfacedetectorandcorrelationfiltersfortracking",frame)

#釋放所有資源

capture.release()

cv2.destroyAllWindows()

使用基于dlibDCF的跟蹤器進(jìn)行對(duì)象跟蹤

除了人臉外,基于dlibDCF的跟蹤器可以用于跟蹤任意對(duì)象。接下來,我們使用鼠標(biāo)選擇要跟蹤的對(duì)象,并監(jiān)聽鍵盤事件,如果按1,將開始跟蹤預(yù)定義邊界框內(nèi)的對(duì)象;如果按2,預(yù)定義的邊界框?qū)⒈磺蹇?,跟蹤算法將停止,并等待用戶選擇另一個(gè)邊界框。

例如,我們對(duì)檢測(cè)小姐姐并不感興趣,而更喜歡貓,那么我們可以首先用鼠標(biāo)繪制矩形框選擇喵咪,然后按1開始追蹤小貓咪,如果我們想要追蹤其他物體,可以按2重新繪制矩形框并進(jìn)行追蹤。如下所示,我們可以看到算法跟蹤對(duì)象并進(jìn)行實(shí)時(shí)輸出:

完整代碼

完整代碼如下所示:

importcv2

importdlib

defdraw_text_info():

#繪制文本的位置

menu_pos_1=(10,20)

menu_pos_2=(10,40)

menu_pos_3=(10,60)

#菜單項(xiàng)

info_1="Useleftclickofthemousetoselecttheobjecttotrack"

info_2="Use'1'tostarttracking,'2'toresettrackingand'q'toexit"

#繪制菜單信息

cv2.putText(frame,"Use'1'tore-initializetracking",menu_pos_1,cv2.FONT_HERSHEY_SIMPLEX,0.5,(255,255,255))

cv2.putText(frame,info_2,menu_pos_2,cv2.FONT_HERSHEY_SIMPLEX,0.5,(255,255,255))

iftracking_state:

cv2.putText(frame,"tracking",menu_pos_3,cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0))

else:

cv2.putText(frame,"nottracking",menu_pos_3,cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,255))

#用于保存要跟蹤的對(duì)象坐標(biāo)的結(jié)構(gòu)

points=[]

defmouse_event_handler(event,x,y,flags,param):

#對(duì)全局變量的引用

globalpoints

#添加要跟蹤的對(duì)象的左上角坐標(biāo)

ifevent==cv2.EVENT_LBUTTONDOWN:

points=[(x,y)]

#添加要跟蹤的對(duì)象的右下角坐標(biāo):

elifevent==cv2.EVENT_LBUTTONUP:

points.append((x,y))

#創(chuàng)建視頻捕獲對(duì)象

capture=cv2.VideoCapture(0)

#窗口名

window_name="Objecttrackingusingdlibcorrelationfilteralgorithm"

#創(chuàng)建窗口

dWindow(window_name)

#綁定鼠標(biāo)事件

cv2.setMouseCallback(window_name,mouse_event_handler)

#初始化跟蹤器

tracker=dlib.correlation_tracker()

tracking_state=False

whileTrue:

#捕獲視頻幀

ret,frame=capture.read()

#繪制菜單項(xiàng)

draw_text_info()

#設(shè)置并繪制一個(gè)矩形,跟蹤矩形框內(nèi)的對(duì)象

iflen(points)==2:

cv2.rectangle(frame,points[0],points[1],(0,0,255),3)

dlib_rectangle=dlib.rectangle(points[0][0],points[0][1],points[1][0],points[1][1])

iftracking_faceisTrue:

#更新跟蹤器并打印測(cè)量跟蹤器的置信度

print(tracker.update(frame))

#獲取被跟蹤對(duì)象的位置

pos=tracker.get_position()

#繪制被跟蹤對(duì)象的位置

cv2.rectangle(frame,(int(pos.left()),int(pos.top())),(int(pos.right()),int(pos.bottom())),(0,255,0),3)

#捕獲鍵盤事件

key=0xFFcv2.waitKey(1)

#按下1鍵,開始追蹤

ifkey==or

溫馨提示

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

評(píng)論

0/150

提交評(píng)論