




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年加強(qiáng)口語(yǔ)教學(xué)心得體會(huì)模版
- 《銷售與收款管理戰(zhàn)略》課件
- 冬陽(yáng)童年駱駝隊(duì)教學(xué)設(shè)計(jì)
- 2025年海峽兩岸西域文化交流學(xué)術(shù)研討會(huì)的會(huì)議總結(jié)模版
- 《透析液的調(diào)控》課件
- 《高級(jí)人力資源管理》課件
- 2022年4月23日四川省直機(jī)關(guān)遴選公務(wù)員考試真題及答案
- 小學(xué)同課異構(gòu)活動(dòng)
- 2025合同管理專員職責(zé)描述
- 高齡孕婦的孕期管理
- 求職OMG-大學(xué)生就業(yè)指導(dǎo)與技能開發(fā)智慧樹知到期末考試答案章節(jié)答案2024年中國(guó)海洋大學(xué)
- 【年加工500噸鮑魚的綜合加工生產(chǎn)工藝設(shè)計(jì)10000字(論文)】
- 2022年新高考全國(guó)I卷數(shù)學(xué)真題(解析版)
- (四下)語(yǔ)文教學(xué)課件-第五單元-單元解讀-部編版
- MOOC 認(rèn)識(shí)中國(guó)-南京大學(xué) 中國(guó)大學(xué)慕課答案
- 阿托品知識(shí)課件
- 職工食堂外包項(xiàng)目服務(wù)方案
- 2024山東能源集團(tuán)中級(jí)人才庫(kù)選拔高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 旅游服務(wù)行業(yè)的自我品牌推廣與營(yíng)銷
- 面部抗衰培訓(xùn)課件
- 醫(yī)院輸血反應(yīng)應(yīng)急預(yù)案演練腳本
評(píng)論
0/150
提交評(píng)論