您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用Python+MediaPipe實現(xiàn)檢測人臉功能”,在日常操作中,相信很多人在怎么用Python+MediaPipe實現(xiàn)檢測人臉功能問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python+MediaPipe實現(xiàn)檢測人臉功能”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
谷歌開源MediaPipe于2019年6月首次推出。它的目標是通過提供一些集成的計算機視覺和機器學習功能,使我們的生活變得輕松。
MediaPipe是用于構(gòu)建多模態(tài)(例如視頻、音頻或任何時間序列數(shù)據(jù))、跨平臺(即eAndroid、IOS、web、邊緣設(shè)備)應用ML管道的框架。
Mediapipe還促進了機器學習技術(shù)在各種不同硬件平臺上的演示和應用程序中的部署。
應用
人臉檢測
多手跟蹤
頭發(fā)分割
目標檢測與跟蹤
目標:三維目標檢測與跟蹤
AutoFlip:視頻裁剪管道
其他
為什么需要MediaPipe
有效管理資源(CPU和GPU)以實現(xiàn)低延遲性能,處理時間序列數(shù)據(jù)(如音頻和視頻幀)的同步。
MediaPipe將每個感知模型抽象為一個模塊,并將它們與維護圖連接起來。
除上述功能外,MediaPipe還支持TensorFlow和TF Lite推理引擎。任何TensorFlow和TF Lite模型均可用于MediaPipe。同時,在移動和嵌入式平臺上,MediaPipe還支持設(shè)備本身的GPU加速。
現(xiàn)在是時候向MediaPipe的應用邁進了,人臉檢測。
考慮一個場景,“零售商要求你計算訪客數(shù)量,并跟蹤訪客的移動。”
看起來很難??!我們怎樣才能解決這個問題?嗯…
哦,是的!我們將使用人臉檢測來解決這個問題。
人臉檢測是計算機視覺中的一個問題,即在照片中定位和定位一個或多個人臉。
問題的一般陳述可以定義如下:給定一幅靜止或視頻圖像,檢測并定位未知數(shù)量(如果有)的人臉。
使用MediaPipe執(zhí)行人臉檢測:
要執(zhí)行人臉檢測,可以使用三種模型:
近景模型(最適合距離相機2米以內(nèi)的人臉)
全范圍模型(密集型,最適合距離相機5米以內(nèi)的人臉)
全范圍模型(稀疏,最適合距離相機5米以內(nèi)的人臉)
全范圍密集模型和稀疏模型在F分數(shù)方面具有相同的質(zhì)量,但在基礎(chǔ)度量方面有所不同。
密集型模型的召回率略高于稀疏模型,而稀疏模型的精確度高于稠密模型。
現(xiàn)在是時候使用MediaPipe的人臉檢測模型了。
安裝必要的庫
要執(zhí)行人臉檢測,首先必須在機器中安裝MediaPipe。如果你是windows用戶,則可以在計算機的命令提示符下運行以下代碼。
pip install mediapipe
有關(guān)詳細說明,你可以訪問以下鏈接:
https://google.github.io/mediapipe/getting_started/python.html
你還需要為網(wǎng)絡(luò)攝像頭或圖像輸入安裝OpenCV。如果你是windows用戶,可以在命令提示符下運行以下代碼。
pip install opencv-python
有關(guān)詳細說明,你可以訪問以下鏈接:
https://pypi.org/project/opencv-python/
編寫代碼以了解API的使用:
我們使用Google Colab來運行代碼。你可以選擇使用它。
我們需要cv2,能夠讀取和顯示圖像,以及MediaPipe模塊,它公開了我們執(zhí)行人臉檢測所需的功能
import cv2 import mediapipe as mp
然后我們將訪問兩個子模塊face_detection和drawing_utils。人臉檢測用于加載所有功能以執(zhí)行人臉檢測,而繪圖工具用于在圖像上繪制檢測到的人臉。
mp_face_detection = mp.solutions.face_detection mp_drawing = mp.solutions.drawing_utils
是時候深入研究代碼了。首先,我們將圖像作為輸入。這里我們使用兩種類型的圖像
(i) 包含2米以內(nèi)的人臉的圖像
(ii)包含5米以內(nèi)的人臉的圖像。
我們使用colab中的文件直接從本地目錄加載圖像。你也可以使用cv2.imread用于在本地計算機中工作時加載圖像。
(a) 第一張照片
from google.colab import files uploaded_short_range = files.upload()
(b) 第二張照片
from google.colab import files uploaded_full_range = files.upload()
在本地PC上工作時,你可以使用
cv2.imread() # 獲取輸入
單擊此處了解有關(guān)cv2.imread:
現(xiàn)在我們將調(diào)整圖像大小并顯示圖像。為了顯示圖像,我們必須使用colab或cv2的cv2_imshow模塊。
在本地機器中工作時顯示cv2.imshow(frame name, iamge)。我們可以使用下面的代碼在google colab中調(diào)整圖像大小并顯示圖像。
用于調(diào)整圖像大小和顯示圖像的代碼:
import cv2 from google.colab.patches import cv2_imshow import math import numpy as np DESIRED_HEIGHT = 480 DESIRED_WIDTH = 480 def resize_and_show(image): h, w = image.shape[:2] if h < w: img = cv2.resize(image, (DESIRED_WIDTH, math.floor(h/(w/DESIRED_WIDTH)))) else: img = cv2.resize(image, (math.floor(w/(h/DESIRED_HEIGHT)), DESIRED_HEIGHT)) cv2_imshow(img) # 預覽圖片. short_range_images = {name: cv2.imread(name) for name in uploaded_short_range.keys()} for name, image in short_range_images.items(): print(name) resize_and_show(image) full_range_images = {name: cv2.imread(name) for name in uploaded_full_range.keys()} for name, image in full_range_images.items(): print(name) resize_and_show(image)
上述代碼的輸出示例
現(xiàn)在,我們將在臉上畫關(guān)鍵點。
我們可以如下更改thickness和circle_radius的值。
drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1)
以下代碼了解mp.solutions.face_detection的詳細信息。
help(mp_face_detection.FaceDetection)
在此之后,我們將創(chuàng)建一個FaceDetection類的對象。該對象將允許我們處理圖像并執(zhí)行人臉關(guān)鍵點檢測。此類的構(gòu)造函數(shù)支持以下參數(shù):
(i) 模型選擇:整數(shù)索引0或1。使用0選擇最適合距離攝影機2米以內(nèi)的面的短距離模型,使用1選擇最適合距離攝影機5米以內(nèi)的面的全范圍模型。對于全范圍選項,稀疏模型用于提高推理速度。
(ii)最小檢測置信度:人臉檢測模型中的最小置信值([0.0,1.0]),檢測成功。默認值為0.5。
with mp_face_detection.FaceDetection(min_detection_confidence=0.5, model_selection=0) as face_detection:
上面的代碼model_selection=0,這意味著我們選擇短距離模型進行人臉檢測。使用下面的代碼,我們使用一個簡短的圖像模型執(zhí)行最終的人臉檢測,并繪制關(guān)鍵點。
# 運行MediaPipe人臉檢測與近距離模型 with mp_face_detection.FaceDetection( min_detection_confidence=0.5, model_selection=0) as face_detection: for name, image in short_range_images.items(): # 將BGR圖像轉(zhuǎn)換為RGB,并使用MediaPipe人臉檢測進行處理。 results = face_detection.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) # 繪制每個人臉的檢測。 print(f'Face detections of {name}:') if not results.detections: continue annotated_image = image.copy() for detection in results.detections: mp_drawing.draw_detection(annotated_image, detection) resize_and_show(annotated_image)
短長度(2米以內(nèi))圖像的人臉檢測模型
現(xiàn)在對于model_selection=1,這意味著我們選擇人臉檢測全范圍模型。使用下面的代碼,我們使用完整的圖像模型執(zhí)行最終的人臉檢測,并繪制關(guān)鍵點。
with mp_face_detection.FaceDetection( min_detection_confidence=0.5, model_selection=1) as face_detection: for name, image in full_range_images.items(): # 將BGR圖像轉(zhuǎn)換為RGB,并使用MediaPipe人臉檢測進行處理。 results = face_detection.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) # 繪制每個人臉的檢測。 print(f'Face detections of {name}:') if not results.detections: continue annotated_image = image.copy() for detection in results.detections: mp_drawing.draw_detection(annotated_image, detection) resize_and_show(annotated_image)
全范圍(5米以內(nèi))圖像的人臉檢測模型
我們還可以使用全范圍人臉檢測模型的代碼對集體照片執(zhí)行此過程。
到此,關(guān)于“怎么用Python+MediaPipe實現(xiàn)檢測人臉功能”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。