




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第Python+Opencv實戰之人臉追蹤詳解目錄前言人臉追蹤技術簡介使用基于dlibDCF的跟蹤器進行人臉跟蹤使用基于dlibDCF的跟蹤器進行對象跟蹤小結
前言
人臉處理是人工智能中的一個熱門話題,人臉處理可以使用計算機視覺算法從人臉中自動提取大量信息,例如身份、意圖和情感;而目標跟蹤試圖估計目標在整個視頻序列中的軌跡,其中只有目標的初始位置是已知的,將這兩者進行結合將產生許多有趣的應用。由于外觀變化、遮擋、快速運動、運動模糊和比例變化等多種因素,人臉追蹤非常具有挑戰性。
人臉追蹤技術簡介
基于判別相關濾波器(discriminativecorrelationfilter,DCF)的視覺跟蹤器具有優異的性能和較高的計算效率,可用于實時應用程序。DCF跟蹤器是一種非常流行的基于邊界框跟蹤的方法。
在dlib庫中實現了基于DCF的跟蹤器,可以很方便的將其用于對象跟蹤。在本文中,我們將介紹如何使用此跟蹤器進行人臉和用戶選擇對象的跟蹤,這種方法也稱為判別尺度空間跟蹤器(DiscriminativeScaleSpaceTracker,DSST),追蹤器僅需要輸入原始視頻和目標初始位置的邊界框,然后跟蹤器自動預測目標的軌跡。
使用基于dlibDCF的跟蹤器進行人臉跟蹤
在進行人臉追蹤時,我們首先使用dlib人臉檢測器進行初始化,然后使用基于dlibDCF的跟蹤器DSST進行人臉跟蹤。調用以下函數初始化相關跟蹤器:
tracker=dlib.correlation_tracker()
這將使用默認值(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()可以開始跟蹤。在開始追蹤前,我們需要先執行人臉檢測,并將檢測到的人臉位置傳遞給這個方法:
iftracking_faceisFalse:
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#嘗試檢測人臉以初始化跟蹤器
rects=detector(gray,0)
#檢查是否檢測到人臉
iflen(rects)0:
#開始追蹤
tracker.start_track(frame,rects[0])
tracking_face=True
當檢測到人臉后,人臉跟蹤器將開始跟蹤邊界框內的內容。為了更新被跟蹤對象的位置,需要調用tracker.update()方法:
tracker.update(frame)
tracker.update()方法更新跟蹤器并返回衡量跟蹤器置信度的指標,此指標可用于使用人臉檢測重新初始化跟蹤器。
要獲取被跟蹤對象的位置,需要調用tracker.get_position()方法:
pos=tracker.get_position()
tracker.get_position()方法返回被跟蹤對象的位置。最后,繪制人臉的預測位置:
cv2.rectangle(frame,(int(pos.left()),int(pos.top())),(int(pos.right()),int(pos.bottom())),(0,255,0),3)
下圖中,顯示了人臉跟蹤算法的跟蹤效果過程:
在上圖中,可以看到算法當前正在跟蹤檢測到的人臉,同時還可以按數字1以重新初始化跟蹤。
完整代碼
完整代碼如下所示,同時我們需要提供按下數字1時重新初始化跟蹤器的選項。
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))
#創建視頻捕獲對象
capture=cv2.VideoCapture(0)
#加載人臉檢測器
detector=dlib.get_frontal_face_detector()
#初始化追蹤器
tracker=dlib.correlation_tracker()
#當前是否在追蹤人臉
tracking_face=False
whileTrue:
#捕獲視頻幀
ret,frame=capture.read()
#繪制基本信息
draw_text_info()
iftracking_faceisFalse:
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#嘗試檢測人臉以初始化跟蹤器
rects=detector(gray,0)
#通過判斷是否檢測到人臉來決定是否啟動追蹤
iflen(rects)0:
#Starttracking:
tracker.start_track(frame,rects[0])
tracking_face=True
iftracking_faceisTrue:
#更新跟蹤器并打印測量跟蹤器的置信度
print(tracker.update(frame))
#獲取被跟蹤對象的位置
pos=tracker.get_position()
#繪制被跟蹤對象的位置
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
#顯示結果
cv2.imshow("Facetrackingusingdlibfrontalfacedetectorandcorrelationfiltersfortracking",frame)
#釋放所有資源
capture.release()
cv2.destroyAllWindows()
使用基于dlibDCF的跟蹤器進行對象跟蹤
除了人臉外,基于dlibDCF的跟蹤器可以用于跟蹤任意對象。接下來,我們使用鼠標選擇要跟蹤的對象,并監聽鍵盤事件,如果按1,將開始跟蹤預定義邊界框內的對象;如果按2,預定義的邊界框將被清空,跟蹤算法將停止,并等待用戶選擇另一個邊界框。
例如,我們對檢測小姐姐并不感興趣,而更喜歡貓,那么我們可以首先用鼠標繪制矩形框選擇喵咪,然后按1開始追蹤小貓咪,如果我們想要追蹤其他物體,可以按2重新繪制矩形框并進行追蹤。如下所示,我們可以看到算法跟蹤對象并進行實時輸出:
完整代碼
完整代碼如下所示:
importcv2
importdlib
defdraw_text_info():
#繪制文本的位置
menu_pos_1=(10,20)
menu_pos_2=(10,40)
menu_pos_3=(10,60)
#菜單項
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))
#用于保存要跟蹤的對象坐標的結構
points=[]
defmouse_event_handler(event,x,y,flags,param):
#對全局變量的引用
globalpoints
#添加要跟蹤的對象的左上角坐標
ifevent==cv2.EVENT_LBUTTONDOWN:
points=[(x,y)]
#添加要跟蹤的對象的右下角坐標:
elifevent==cv2.EVENT_LBUTTONUP:
points.append((x,y))
#創建視頻捕獲對象
capture=cv2.VideoCapture(0)
#窗口名
window_name="Objecttrackingusingdlibcorrelationfilteralgorithm"
#創建窗口
dWindow(window_name)
#綁定鼠標事件
cv2.setMouseCallback(window_name,mouse_event_handler)
#初始化跟蹤器
tracker=dlib.correlation_tracker()
tracking_state=False
whileTrue:
#捕獲視頻幀
ret,frame=capture.read()
#繪制菜單項
draw_text_info()
#設置并繪制一個矩形,跟蹤矩形框內的對象
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:
#更新跟蹤器并打印測量跟蹤器的置信度
print(tracker.update(frame))
#獲取被跟蹤對象的位置
pos=tracker.get_position()
#繪制被跟蹤對象的位置
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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 修建建筑公司合同范例
- 亞馬遜店鋪轉讓合同范例
- 中文出口銷售合同范例
- 公司工會工作年終總結模版
- 區塊鏈技術在農業產品供應鏈中的應用及效果分析
- 產品聯合運營合同范例
- 2025年學校教研工作總結模版
- 醫療AI在專科護理領域的創新實踐案例分享
- 2025-2030年花皮小提包項目商業計劃書
- 區塊鏈賦能大數據打造智能商業生態
- 重慶十八梯介紹(改)課件
- 一級病原微生物實驗室危害評估報告
- 茶葉加工機械與設備(全套524張課件)
- 五年級下冊數學課件-4.分數連加、連減和加減混合運算及應用練習 蘇教版 (共11張PPT)
- 設備機房出入登記表
- 起重吊裝作業審批表
- 最新三角形的特性優質課教學設計公開課教案
- X射線衍射學:第九章 點陣常數的精確測定
- 招商工作策略與路徑pptPPT通用課件
- 宮腔鏡的儀器及噐械(課堂PPT)
- 通訊工具的發展PPT課件
評論
0/150
提交評論