python+OpenCV+dlib實現目標追蹤

背景介紹

Dlib是一個深度學習開源工具,基於C++開發,也支持Python開發接口,功能類似於TensorFlow與PyTorch,由於dlib對於人臉特徵具有很好的支持,有很多訓練好的人臉特徵提取模型供開發者使用,所以dlib很適合做人臉項目開發。具體的dlib環境配置方法在這裏就不再多做贅述了,網上有很多的相關教程可供參考。

目標追蹤

在應用方面,dlib大多數情況下用於人臉檢測與人臉識別,然而,dlib還可以用於物體追蹤,通過調用Python API中的dlib.correlation_tracker類可以實現一個初步的跟蹤結果,具體分爲以下四步:
(1) 使用dlib.correlation_tracker()創建一個跟蹤類;
(2) start_track()設置圖片中要跟蹤目標對象的框;
(3) update()實時跟蹤下一幀;
(4) get_position()得到跟蹤到的目標的位置。

import cv2
import dlib
import glob
#導入人臉檢測器,追蹤器和所需圖片
detector = dlib.get_frontal_face_detector()
tracker = dlib.correlation_tracker()
paths = sorted(glob.glob('video_frames/*.jpg')) #video_frames爲當前圖片所在文件夾
#追蹤圖片中的目標對象
for i, path in enumerate(paths):
    img = cv2.imread(path)
    if i == 0:
	    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #轉爲灰度圖像處理
	    dets = detector(gray, 1) #1表示將圖片放大一倍,便於檢測到更多人臉
	    d=dets[0] #假設圖片中只有一個人臉
	    tracker.start_track(img, dlib.rectangle(d.left(),d.top(),d.right(),d.bottom()))
	# 後續幀,自動追蹤
	else:
		tracker.update(img)
	box_predict = tracker.get_position() #得到目標的位置
	cv2.rectangle(img,(int(box_predict.left()),int(box_predict.top())),(int(box_predict.right()),int(box_predict.bottom())),(0,255,255),1)
    cv2.imshow('image',img)
	if cv2.waitKey(10) == 27:
	    break
cv2.destroyAllWindows()

通過設置好運行代碼之後,就可以實現我們想要的跟蹤效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章