2023年03月29日 更新
どうも、クラゲジュニアです。
MediaPipeとは、Googleが開発しているオープンソースの機械学習ライブラリで、提供しているコードを基にカスタマイズ可能となっております。
今回は、こちらのFace Detectionモデルを用いて、PC搭載のWEBカメラでリアルタイム顔検出を行うコードを紹介します。
Open in Colab
から、Colaboratoryを開き、コードを実行できます。カメラが起動すると、顔の位置を検出し、顔の部分に丸印を描画します。
#モジュールをインポート
import numpy as np
import mediapipe as mp
from google.colab.patches import cv2_imshow
#(カメラ動画処理)
bbox = ""
video_stream()
label_html = "Capturing..."
# MediaPipe(顔検出)を準備
mp_face_detection = mp.solutions.face_detection
# 描画機能を準備
mp_drawing = mp.solutions.drawing_utils
# 顔検出実行
with mp_face_detection.FaceDetection(
model_selection=0, min_detection_confidence=0.5) as face_detection:
while True:
# js_replyにカメラ映像のデータが入っている(カメラ動画処理)
js_reply = video_frame(label_html, bbox)
if not js_reply:
break
# imageに画像データが入っている(カメラ動画処理)
image = js_to_image(js_reply["img"])
# 画像から顔の座標を検出
results = face_detection.process(image)
#(カメラ動画処理)
bbox_array = np.zeros([480,640,3], dtype=np.uint8)
# 顔の位置を描画
if results.detections:
for detection in results.detections:
mp_drawing.draw_detection(bbox_array, detection)
#(カメラ動画処理)
bbox_array = np.append(bbox_array, np.zeros([480,640,1]), axis=2)
bbox_array = bbox_array.astype(np.uint8)
bbox_array[:,:,3] = (bbox_array.max(axis = 2) > 0 ).astype(int) * 255
bbox_bytes = bbox_to_bytes(bbox_array)
bbox = bbox_bytes
以上です。