欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+Opencv實戰(zhàn)之人臉追蹤詳解

 更新時間:2021年11月26日 11:32:19   作者:盼小輝丶  
人臉處理是人工智能中的一個熱門話題,人臉處理可以使用計算機視覺算法從人臉中自動提取大量信息。本文將展示OpenCV Python實現(xiàn)人臉追蹤的示例代碼,需要的可以參考一下

前言

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

人臉追蹤技術簡介

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

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

使用基于 dlib DCF 的跟蹤器進行人臉跟蹤

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

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() 可以開始跟蹤。在開始追蹤前,我們需要先執(zhí)行人臉檢測,并將檢測到的人臉位置傳遞給這個方法:

if tracking_face is False:
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 嘗試檢測人臉以初始化跟蹤器
    rects = detector(gray, 0)
    # 檢查是否檢測到人臉
    if len(rects) > 0:
        # 開始追蹤
        tracker.start_track(frame, rects[0])
        tracking_face = True

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

tracker.update(frame)

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

要獲取被跟蹤對象的位置,需要調(diào)用 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)

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

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

完整代碼

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

import cv2
import dlib

def draw_text_info():
    # 繪制文本的位置
    menu_pos_1 = (10, 20)
    menu_pos_2 = (10, 40)
    # 繪制菜單信息
    cv2.putText(frame, "Use '1' to re-initialize tracking", menu_pos_1, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255))
    if tracking_face:
        cv2.putText(frame, "tracking the face", menu_pos_2, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0))
    else:
        cv2.putText(frame, "detecting a face to initialize tracking...", menu_pos_2, cv2.FONT_HERSHEY_SIMPLEX, 0.5,
                    (0, 0, 255))

# 創(chuàng)建視頻捕獲對象
capture = cv2.VideoCapture(0)
# 加載人臉檢測器
detector = dlib.get_frontal_face_detector()
# 初始化追蹤器
tracker = dlib.correlation_tracker()
# 當前是否在追蹤人臉
tracking_face = False

while True:
    # 捕獲視頻幀
    ret, frame = capture.read()
    # 繪制基本信息
    draw_text_info()
    
    if tracking_face is False:
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 嘗試檢測人臉以初始化跟蹤器
        rects = detector(gray, 0)
        # 通過判斷是否檢測到人臉來決定是否啟動追蹤
        if len(rects) > 0:
            # Start tracking:
            tracker.start_track(frame, rects[0])
            tracking_face = True

    if tracking_face is True:
        # 更新跟蹤器并打印測量跟蹤器的置信度
        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 = 0xFF & cv2.waitKey(1)

    # 按 1 初始化追蹤器
    if key == ord("1"):
        tracking_face = False
    # 按 q 退出
    if key == ord('q'):
        break
    # 顯示結(jié)果
    cv2.imshow("Face tracking using dlib frontal face detector and correlation filters for tracking", frame)
# 釋放所有資源
capture.release()
cv2.destroyAllWindows()

使用基于 dlib DCF 的跟蹤器進行對象跟蹤

除了人臉外,基于 dlib DCF 的跟蹤器可以用于跟蹤任意對象。接下來,我們使用鼠標選擇要跟蹤的對象,并監(jiān)聽鍵盤事件,如果按 1,將開始跟蹤預定義邊界框內(nèi)的對象;如果按 2,預定義的邊界框?qū)⒈磺蹇眨櫵惴▽⑼V?,并等待用戶選擇另一個邊界框。

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

完整代碼

完整代碼如下所示:

import cv2
import dlib

def draw_text_info():
    # 繪制文本的位置
    menu_pos_1 = (10, 20)
    menu_pos_2 = (10, 40)
    menu_pos_3 = (10, 60)
    # 菜單項
    info_1 = "Use left click of the mouse to select the object to track"
    info_2 = "Use '1' to start tracking, '2' to reset tracking and 'q' to exit"

    # 繪制菜單信息
    cv2.putText(frame, "Use '1' to re-initialize tracking", 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))
    if tracking_state:
        cv2.putText(frame, "tracking", menu_pos_3, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0))
    else:
        cv2.putText(frame, "not tracking", menu_pos_3, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255))

# 用于保存要跟蹤的對象坐標的結(jié)構(gòu)
points = []

def mouse_event_handler(event, x, y, flags, param):
    # 對全局變量的引用
    global points
    # 添加要跟蹤的對象的左上角坐標
    if event == cv2.EVENT_LBUTTONDOWN:
        points = [(x, y)]
    # 添加要跟蹤的對象的右下角坐標:
    elif event == cv2.EVENT_LBUTTONUP:
        points.append((x, y))
# 創(chuàng)建視頻捕獲對象
capture = cv2.VideoCapture(0)

# 窗口名
window_name = "Object tracking using dlib correlation filter algorithm"
# 創(chuàng)建窗口
cv2.namedWindow(window_name)
# 綁定鼠標事件
cv2.setMouseCallback(window_name, mouse_event_handler)

# 初始化跟蹤器
tracker = dlib.correlation_tracker()
tracking_state = False
while True:
    # 捕獲視頻幀
    ret, frame = capture.read()
    # 繪制菜單項
    draw_text_info()

    # 設置并繪制一個矩形,跟蹤矩形框內(nèi)的對象
    if len(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])

    if tracking_face is True:
        # 更新跟蹤器并打印測量跟蹤器的置信度
        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 = 0xFF & cv2.waitKey(1)

    # 按下 1 鍵,開始追蹤
    if key == ord("1"):
        if len(points) == 2:
            # Start tracking:
            tracker.start_track(frame, dlib_rectangle)
            tracking_state = True
            points = []
    # 按下 2 鍵,停止跟蹤
    if key == ord("2"):
        points = []
        tracking_state = False
    # 按下 q 鍵,返回
    if key == ord('q'):
        break

    # 展示結(jié)果圖像
    cv2.imshow(window_name, frame)

# 釋放資源
capture.release()
cv2.destroyAllWindows()

小結(jié)

dlib 庫實現(xiàn)了基于 DCF 的跟蹤器,非常適合用于進行人臉追蹤,使用 dlib.correlation_tracker() 函數(shù)初始化跟蹤器,tracker.start_track() 函數(shù)用于開始追蹤對象,tracker.update() 函數(shù)更新追蹤器并且返回追蹤器置信度,若要獲取被跟蹤對象的位置需要使用 tracker.get_position() 函數(shù)。

?以上就是Python+Opencv實戰(zhàn)之人臉追蹤詳解的詳細內(nèi)容,更多關于Python Opencv 人臉追蹤的資料請關注腳本之家其它相關文章!

相關文章

  • python2.7無法使用pip的解決方法(安裝easy_install)

    python2.7無法使用pip的解決方法(安裝easy_install)

    下面小編就為大家分享一篇python2.7無法使用pip的解決方法(安裝easy_install),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 解決Python2.7中IDLE啟動沒有反應的問題

    解決Python2.7中IDLE啟動沒有反應的問題

    今天小編就為大家分享一篇解決Python2.7中IDLE啟動沒有反應的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python 實現(xiàn)樸素貝葉斯算法的示例

    python 實現(xiàn)樸素貝葉斯算法的示例

    這篇文章主要介紹了python實現(xiàn)樸素貝葉斯算法的示例,幫助大家更好的理解和學習python 機器學習算法,感興趣的朋友可以了解下
    2020-09-09
  • python代數(shù)式括號有效性檢驗示例代碼

    python代數(shù)式括號有效性檢驗示例代碼

    這篇文章主要給大家介紹了關于python代數(shù)式括號有效性檢驗的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Django項目中model的數(shù)據(jù)處理以及頁面交互方法

    Django項目中model的數(shù)據(jù)處理以及頁面交互方法

    今天小編就為大家分享一篇Django項目中model的數(shù)據(jù)處理以及頁面交互方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python實現(xiàn)保存網(wǎng)頁到本地示例

    python實現(xiàn)保存網(wǎng)頁到本地示例

    這篇文章主要介紹了python實現(xiàn)保存網(wǎng)頁到本地示例,需要的朋友可以參考下
    2014-03-03
  • Django?ORM?多表查詢示例代碼

    Django?ORM?多表查詢示例代碼

    這篇文章主要介紹了Django?ORM?多表查詢,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Python畫圖工具Matplotlib庫常用命令簡述

    Python畫圖工具Matplotlib庫常用命令簡述

    這篇文章主要介紹了Python畫圖Matplotlib庫常用命令簡述總結(jié),文中包含詳細的圖文示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • yolov5調(diào)用usb攝像頭及本地攝像頭的方法實例

    yolov5調(diào)用usb攝像頭及本地攝像頭的方法實例

    YOLOV5模型從發(fā)布到現(xiàn)在都是炙手可熱的目標檢測模型,被廣泛運用于各大場景之中,下面這篇文章主要給大家介紹了關于yolov5調(diào)用usb攝像頭及本地攝像頭的相關資料,需要的朋友可以參考下
    2022-03-03
  • OpenCV實現(xiàn)相機校正

    OpenCV實現(xiàn)相機校正

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)相機校正,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評論