在本文中,我們將使用Python來檢測人臉和手部標志,我們將使用一個模塊
檢測所有面部和手部標志的解決方案,此外,我們亦會看看如何取得不同的面部及手上標志,這些標志可應用于不同的電腦視覺應用,例如手語偵測、睡意偵測等
所需模塊
-
Mediapipe是一個跨平臺的庫,由谷歌開發,為計算機視覺任務提供驚人的現成的ML解決方案,
-
OpenCVPython庫是一個廣泛應用于影像分析、影像處理、檢測、識別等領域的計算機視覺庫,
安裝所需的庫
pip install opencv-python mediapipe msvc-runtime
復制代碼
下面是一種分步驟的人臉和手部地標檢測方法,
步驟1:匯入所有必需的庫,在本例中只需要兩個庫,
Python 3
# Import Libraries
import cv2
import time
import mediapipe as mp
步驟2:初始化整體模型和繪圖功能,以檢測和繪制影像上的地標,
Python 3
# Grabbing the Holistic Model from Mediapipe and
# Initializing the Model
mp_holistic = mp.solutions.holistic
holistic_model = mp_holistic.Holistic(
min_detection_confidence = 0.5 ,
min_tracking_confidence = 0.5
)
# Initializing the drawng utils for drawing the facial landmarks on image
mp_drawing = mp.solutions.drawing_utils
讓我們研究一下整體模型的引數:
Holistic(
static_image_mode=False,
model_complexity=1,
smooth_landmarks=True,
min_detection_confidence=0.5,
min_tracking_confidence=0.5
)
復制代碼
- **靜態影像模式:**它用于指定輸入影像是否必須被視為靜態影像或視頻流,默認值為false,
- **模型復雜性:**它用于描述姿態地標模型的復雜度:0,1,或2,隨著模型復雜度的增加,地標精度和延遲增加,默認值為1,
- **平滑的地標:**該引數通過對不同輸入影像的姿態標志進行濾波,減少預測中的抖動,默認值為True,
- **最小檢測可信度:**它被用來指定從人-檢測模型中檢測成功的最小置信度值,可以在[0.01.0]中指定一個值,默認值為0.5,
- **最小跟蹤信心:**它被用來指定從地標跟蹤模型中檢測成功的最小置信度值,可以在[0.01.0]中指定一個值,默認值為0.5,
第三步:從影像中檢測臉部和手部的地標,整體模型對影像進行處理,為面部、左手和右手生成地標,并檢測
- 使用OpenCV從攝像機中連續捕獲幀,
- 將BGR映像轉換為RGB映像,并使用初始化的整體模型進行預測,
- 整體模型所做的預測保存在結果變數中,從該變數中,我們可以分別使用Resul.Faces_landmark、Resul.right_Hand_landmark、Resul.左側_Hand_landmark來訪問地標,
- 使用繪圖功能在影像上繪制檢測到的地標,
- 顯示結果影像,
Python 3
# (0) in VideoCapture is used to connect to your compyter's default camera
capture = cv2.VideoCapture( 0 )
# Initializing current time and precious time for calculating the FPS
previousTime = 0
currentTime = 0
while capture.isOpened():
# capture frame by frame
ret, frame = capture.read()
# resizing the frame for better view
frame = cv2.resize(frame, ( 800 , 600 ))
# Converting the from from BGR to RGB
image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# Making predictions using holistic model
# To improve performance, optionally mark the image as not writeable to
# pass by reference.
image.flags.writeable = False
results = holistic_model.process(image)
image.flags.writeable = True
# Converting back the RGB image to BGR
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
# Drawing the Facial Landmarks
mp_drawing.draw_landmarks(
image,
results.face_landmarks,
mp_holistic.FACE_CONNECTIONS,
mp_drawing.DrawingSpec(
color = ( 255 , 0 , 255 ),
thickness = 1 ,
circle_radius = 1
),
mp_drawing.DrawingSpec(
color = ( 0 , 255 , 255 ),
thickness = 1 ,
circle_radius = 1
)
)
# Drawing Right hand Land Marks
mp_drawing.draw_landmarks(
image,
results.right_hand_landmarks,
mp_holistic.HAND_CONNECTIONS
)
# Drawing Left hand Land Marks
mp_drawing.draw_landmarks(
image,
results.left_hand_landmarks,
mp_holistic.HAND_CONNECTIONS
)
# Calculating the FPS
currentTime = time.time()
fps = 1 / (currentTime - previousTime)
previousTime = currentTime
# Displaying FPS on the image
cv2.putText(image, str ( int (fps)) + " FPS" , ( 10 , 70 ), cv2.FONT_HERSHEY_COMPLEX, 1 , ( 0 , 255 , 0 ), 2 )
# Display the resulting image
cv2.imshow( "Facial and Hand Landmarks" , image)
# Enter key 'q' to break the loop
if cv2.waitKey( 5 ) & 0xFF = = ord ( 'q' ):
break
# When all the process is done
# Release the capture and destroy all windows
capture.release()
cv2.destroyAllWindows()
整體模型可產生468個正面地標、21個左側地標和21個右側地標.可以通過指定所需地標的索引來訪問單個地標,例:結果.左_HAND_landmark.地標[0],您可以使用以下代碼獲取所有單個地標的索引:
Python 3
# Code to access landmarks
for landmark in mp_holistic.HandLandmark:
print (landmark, landmark.value)
print (mp_holistic.HandLandmark.WRIST.value)
HandLandmark.WRIST 0
HandLandmark.THUMB_CMC 1
HandLandmark.THUMB_MCP 2
HandLandmark.THUMB_IP 3
HandLandmark.THUMB_TIP 4
HandLandmark.INDEX_FINGER_MCP 5
HandLandmark.INDEX_FINGER_PIP 6
HandLandmark.INDEX_FINGER_DIP 7
HandLandmark.INDEX_FINGER_TIP 8
HandLandmark.MIDDLE_FINGER_MCP 9
HandLandmark.MIDDLE_FINGER_PIP 10
HandLandmark.MIDDLE_FINGER_DIP 11
HandLandmark.MIDDLE_FINGER_TIP 12
HandLandmark.RING_FINGER_MCP 13
HandLandmark.RING_FINGER_PIP 14
HandLandmark.RING_FINGER_DIP 15
HandLandmark.RING_FINGER_TIP 16
HandLandmark.PINKY_MCP 17
HandLandmark.PINKY_PIP 18
HandLandmark.PINKY_DIP 19
HandLandmark.PINKY_TIP 20
0
復制代碼
?
?
?
產出

???
?
???
注意讀取器!現在不要停止學習,掌握所有重要的機器學習概念
到這里就結束了,你學會了嗎?
???完整原始碼點:這里領取
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302595.html
標籤:其他
