MediaPipe 集成人臉識別,人體姿態評估,人手檢測模型

2023年01月03日01:30:03 科技 1629

上期文章,我們介紹了MediaPipe Holistic的基礎知識,了解到MediaPipe Holistic分別利用MediaPipe PoseMediaPipe Face MeshMediaPipe Hands中的姿勢,面部和手界標模型來生成總共543個界標(每手33個姿勢界標,468個臉部界標和21個手界標)。

對於姿勢模型的精度足夠低以至於所得到的手的ROI仍然不夠準確的情況,但我們運行附加的輕型手重新裁剪模型,該模型起著的作用,並且僅花費了手模型推斷時間的10%左右。

MediaPipe 集成人臉識別,人體姿態評估,人手檢測模型 - 天天要聞

MediaPipe

MediaPipe 是一款由 Google Research 開發並開源的多媒體機器學習模型應用框架。在谷歌,一系列重要產品,如 、Google LensARCoreGoogle Home 以及 ,都已深度整合了 MediaPipe。

MediaPipe 集成人臉識別,人體姿態評估,人手檢測模型 - 天天要聞

MediaPipe圖片檢測

作為一款跨平台框架,MediaPipe 不僅可以被部署在伺服器端,更可以在多個移動端 (安卓和蘋果 iOS)和嵌入式平台(Google Coral 和樹莓派)中作為設備端機器學習推理 (On-device Machine Learning Inference)框架。

一款多媒體機器學習應用的成敗除了依賴於模型本身的好壞,還取決於設備資源的有效調配、多個輸入流之間的高效同步、跨平台部署上的便捷程度、以及應用搭建的快速與否。

基於這些需求,谷歌開發並開源了 MediaPipe 項目。除了上述的特性,MediaPipe 還支持 TensorFlow 和 TF Lite 的推理引擎(Inference Engine),任何 TensorFlow 和 TF Lite 的模型都可以在 MediaPipe 上使用。同時,在移動端和嵌入式平台,MediaPipe 也支持設備本身的 GPU 加速。

MediaPipe 主要概念

MediaPipe 的核心框架由 C++ 實現,並提供 Java 以及 Objective C 等語言的支持。MediaPipe 的主要概念包括數據包(Packet)、數據流(Stream)、計算單元(Calculator)、圖(Graph)以及子圖(Subgraph)。數據包是最基礎的數據單位,一個數據包代表了在某一特定時間節點的數據,例如一幀圖像或一小段音頻信號;數據流是由按時間順序升序排列的多個數據包組成,一個數據流的某一特定時間戳(Timestamp)只允許至多一個數據包的存在;而數據流則是在多個計算單元構成的圖中流動。MediaPipe 的圖是有向的——數據包從數據源(Source Calculator或者 Graph Input Stream)流入圖直至在匯聚結點(Sink Calculator 或者 Graph Output Stream) 離開。

MediaPipe 集成人臉識別,人體姿態評估,人手檢測模型 - 天天要聞

MediaPipe 的核心框架

若我們想使用MediaPipe,
首先,在我們的電腦cmd命令框中輸入
python –m pip install MediaPipe安裝第三方模型,
然後我們便可以使用代碼來進行圖片或者視頻的檢測了,
此模型最主要的優點是不需要我們下載預訓練模型,只是安裝上其mediapipe包即可

MediaPipe 集成人臉識別,人體姿態評估,人手檢測模型 - 天天要聞

MediaPipe 圖片檢測

Mediapipe 模型的圖片代碼檢測

import cv2
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_holistic = mp.solutions.holistic

file = '4.jpg'
holistic = mp_holistic.Holistic(static_image_mode=True)

image = cv2.imread(file)
image_hight, image_width, _ = image.shape
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = holistic.process(image)

首先,我們導入需要的第三方庫,並配置一下需要畫圖的點的尺寸,線的尺寸以及顏色等,這些信息都可以自行修改,這裡我們直接引用官方的配置進行設計(
mp.solutions.drawing_utils函數)

然後定義一個holistic檢測模型函數

mp_holistic = mp.solutions.holistic

file = '4.jpg'
holistic = mp_holistic.Holistic(static_image_mode=True)

然後使用我們前期介紹的opencv的相關知識從系統中讀取我們需要檢測的圖片,並獲取圖片的尺寸

image = cv2.imread(file)
image_hight, image_width, _ = image.shape

由於OpenCV默認的顏色空間是BGR,但是一般我們說的顏色空間為RGB,這裡mediapipe便修改了顏色空間

然後使用我們前面建立的holistic檢測模型,對圖片進行檢測即可

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = holistic.process(image)

模型檢測完成後的結果保存在results裡面,我們需要訪問此結果,並把檢測到的人臉,人手,以及姿態評估的數據點畫在原始檢測的圖片上,以便查看

if results.pose_landmarks:
  print(
f'Nose coordinates: ('
f'{results.pose_landmarks.landmark[mp_holistic.PoseLandmark.NOSE].x * image_width}, '
f'{results.pose_landmarks.landmark[mp_holistic.PoseLandmark.NOSE].y * image_hight})'
)
annotated_image = image.copy()
mp_drawing.draw_landmarks(
annotated_image, results.face_landmarks, mp_holistic.FACE_CONNECTIONS)
mp_drawing.draw_landmarks(
annotated_image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS)
mp_drawing.draw_landmarks(
annotated_image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS)
mp_drawing.draw_landmarks(
annotated_image, results.pose_landmarks, mp_holistic.POSE_CONNECTIONS)

這裡我們列印了圖片檢測的結果,並分別畫出人臉檢測模型數據,人左右手的檢測數據,以及人體姿態檢測數據

#cv2.imshow('annotated_image',annotated_image)
cv2.imwrite('4.png', annotated_image)
cv2.waitKey(0)
holistic.close()

畫圖完成後,我們可以顯示圖片方便查看,也可以直接使用OpenCV的imwrite 函數進行結果圖片的保存,最後只需要close holistic檢測模型,這裡在檢測多人的時候出現了問題,只是檢測了單人,我們後期研究

MediaPipe 集成人臉識別,人體姿態評估,人手檢測模型 - 天天要聞

圖片檢測

Mediapipe 模型的視頻代碼檢測

當然,我們也可以直接在視頻裡面進行Mediapipe的模型檢測

MediaPipe 集成人臉識別,人體姿態評估,人手檢測模型 - 天天要聞

import cv2
import time
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_holistic = mp.solutions.holistic

holistic = mp_holistic.Holistic(
min_detection_confidence=0.5, min_tracking_confidence=0.5)

首先跟圖片檢測一致,我們建立一個holistic檢測模型,然後便可以打開攝像頭進行模型的檢測

cap = cv2.VideoCapture(0)
time.sleep(2)
while cap.isOpened():
success, image = cap.read()
if not success:
print("Ignoring empty camera frame.")
continue
image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)
image.flags.writeable = False
results = holistic.process(image)

首先我們打開默認攝像頭,並從攝像頭中獲取檢測的實時圖片

cap = cv2.VideoCapture(0)
while cap.isOpened():
success, image = cap.read()

檢測到圖片後,我們便可以直接使用圖片檢測的步驟,進行模型的檢測

image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)
image.flags.writeable = False
results = holistic.process(image)

這裡我們使用到了cv2.flip(image, 1)圖片翻轉函數來增強數據圖片,由於我們攝像頭中的影像跟我們是鏡像關係

MediaPipe 集成人臉識別,人體姿態評估,人手檢測模型 - 天天要聞

cv2.flip(image, 1)

使用此函數便可以鏡像我們的圖片影像,最後把圖片賦值給holistic模型進行檢測

image.flags.writeable = True
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
mp_drawing.draw_landmarks(
image, results.face_landmarks, mp_holistic.FACE_CONNECTIONS)
mp_drawing.draw_landmarks(
image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS)
mp_drawing.draw_landmarks(
image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS)
mp_drawing.draw_landmarks(
image, results.pose_landmarks, mp_holistic.POSE_CONNECTIONS)
cv2.imshow('MediaPipe Holistic', image)
if cv2.waitKey(5) & 0xFF == ord('q'):
break
holistic.close()
cap.release()

檢測完成後,我們便可以把數據實時進行繪製,以便在視頻中實時進行結果的查看

MediaPipe 集成人臉識別,人體姿態評估,人手檢測模型 - 天天要聞

視頻檢測

這裡由於默認設置,線條與點的尺寸不太合適,我們後期慢慢優化

科技分類資訊推薦

引領科技豪華MPV新風尚 第二代騰勢D9西安車展亮相 - 天天要聞

引領科技豪華MPV新風尚 第二代騰勢D9西安車展亮相

兼具宜商氣度與家用溫情的科技豪華旗艦MPV,第二代騰勢D9迎來西安地區正式亮相。新車依託全球新能源MPV冠軍底蘊,以第二代刀片電池、雙閥雲輦-C、天神之眼5.0智駕等核心技術全面升級,兼顧商務體面與家庭舒適,為西北高端用戶帶來一站式全能出行解決方案。
採購禁入!科華數據材料造假被拒門外 - 天天要聞

採購禁入!科華數據材料造假被拒門外

本報(chinatimes.net.cn)記者胡雅文 北京報道這家趕上AI算力風口的公司,因投標材料造假,被相關採購方列入禁入名單兩年,其此前提出的複議申請也被正式駁回。相關採購平台近日發布公告,明確駁回科華數據股份有限公司(下稱「科華數據」,002335.SZ)此前提交的複議申請。早在一年前,科華數據已被認定在「信息通信樞紐...
快評樂道L80:15萬元級買大五座,這波值得沖? - 天天要聞

快評樂道L80:15萬元級買大五座,這波值得沖?

日前,樂道L80正式發布並開啟預售,其整車購買預售價為24.58萬元起,租電購買預售價則低至15.98萬元起。面對大型SUV市場「細分再細分」之競爭趨勢,這款樂道年度重磅新車都有哪些優勢?又能否成為「大五座SUV革新之作」?下面,圈哥就帶大家全方位感受。
成都直擊凱威德:純電全尺寸SUV的張揚與大氣 - 天天要聞

成都直擊凱威德:純電全尺寸SUV的張揚與大氣

4月22日,凱迪拉克以奧斯卡級盛典規格,將上海保利大劇院點亮為璀璨舞台,在品牌代言人倪妮與全場嘉賓的共同見證下,凱迪拉克全尺寸純電公路旗艦——凱威德耀然上市。新車共推出長續航四驅Pro、高性能四驅Ultra兩款配置,官方售價區間為46.88萬-50.88萬元。