
安裝所需模塊:
pip install cv2
pip install midiapipe
MidiaPipe
MediaPipe 為直播和流媒體提供跨平臺、可定制的機器學習解決方案,
- 端到端加速引擎:內置的快速 ML 推理和處理即使在常見硬體上也能加速
- 一次構建,任意部署:統一解決方案適用于 Android、iOS、桌面/云、Web 和物聯網
- 即用型解決方案:先進的機器學習解決方案展示了框架的全部功能
- 免費開源:Apache 2.0下的框架和解決方案,完全可擴展和可定制
FaceDetection模型
MediaPipe 人臉檢測是一種超快的人臉檢測解決方案,帶有 6 個地標和多人臉支持,它基于 BlazeFace,這是一種輕量級且性能良好的人臉檢測器,專為移動 GPU 推理量身定制,檢測器的超實時性能使其能夠應用于任何需要準確的面部感興趣區域作為其他任務特定模型輸入的實時取景器體驗,例如 3D 面部關鍵點或幾何估計(例如 MediaPipe Face Mesh),面部特征或表情分類,以及面部區域分割, BlazeFace 使用了一個輕量級特征提取網路,其靈感來自 MobileNetV1/V2,但與 MobileNetV1/V2 不同,它是一種從 Single Shot MultiBox Detector (SSD) 修改而來的 GPU 友好錨點方案,以及一種替代非極大值抑制的改進的 tie 解析度策略,

論文名稱:SSD: Single Shot MultiBox Detector
原文地址:Single Shot
配置模型引數
with mp_face_detection.FaceDetection(
model_selection=1, min_detection_confidence=0.5) as face_detection:
- model_selection:使用 0 選擇最適合距離相機 2 米以內的人臉的短距離模型,使用 1 選擇最適合距離相機 5 米以內的人臉的全距離模型,
- min_detection_confidence:人臉檢測模型的最小置信值 ([0.0, 1.0]),以便將檢測視為成功,默認為 0.5,
人臉地標
檢測到的人臉的集合,其中每個人臉都表示為一個檢測集合,其中包含一個邊界框和 6 個關鍵點(右眼、左眼、鼻尖、嘴巴中心、右耳和左耳),
邊界框由 xmin 和寬度和 ymin 和高度組成,每個關鍵點由 x 和 y 組成,分別通過影像寬度和高度歸一化為 [0.0, 1.0],
if results.detections:
for detection in results.detections: # 獲取人臉地標
people += 1
mp_drawing.draw_detection(image, detection)

部分代碼
本專案可以使用檔案輸入和攝像頭進行輸入,下面代碼采用的是檔案輸入,如果需要使用攝像頭作為輸入源,只需要將 cap = cv2.VideoCapture("video/finger3.MP4") 內部引數置為0即可,不過還需要調整一下其它位置,這里不做過多敘述,
import cv2
import mediapipe as mp
mp_face_detection = mp.solutions.face_detection # 人臉檢測器
mp_drawing = mp.solutions.drawing_utils # 繪制人臉地標
cap = cv2.VideoCapture('video/head3.MP4') # 視頻輸入源
with mp_face_detection.FaceDetection(
model_selection=1, min_detection_confidence=0.5) as face_detection:
while cap.isOpened():
success, image = cap.read()
if not success:
print("Ignoring empty camera frame.")
break
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = face_detection.process(image)
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) # 將圖片轉化為標準RGB格式
people = 0
if results.detections:
for detection in results.detections: # 獲取人臉地標
people += 1
mp_drawing.draw_detection(image, detection)
print(fr'[視頻中人數:{people}] ')
# 設定視窗大小
cv2.namedWindow("image", 0)
cv2.resizeWindow("image", 500, 460)
cv2.imshow('image', image)
if cv2.waitKey(10) & 0xFF == 27:
break
cap.release()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/375939.html
標籤:其他
