事前準備

ライブラリのビルド&インストールとカメラ設定が完了しているのであれば、 後はプログラムを動かすだけ。

今回はCUI環境をターゲットにしているので、画像の表示はせず位置情報を標準出力に出すようにする。 カメラの設定はRaspberry Piカメラの性能に合わせて行う。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/python3

import cv2
import mediapipe as mp
import time

mp_face_detection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utils

count = 0
start = time.time()
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
cap.set(cv2.CAP_PROP_FPS, 60)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*"YUYV"))
print("{}x{}({}fps)".format(cap.get(cv2.CAP_PROP_FRAME_WIDTH),
                            cap.get(cv2.CAP_PROP_FRAME_HEIGHT),
                            cap.get(cv2.CAP_PROP_FPS)))

with mp_face_detection.FaceDetection(
    model_selection=0, min_detection_confidence=0.5) as face_detection:
  while cap.isOpened():
    success, image = cap.read()
    if not success:
      print("Ignoring empty camera frame.")
      continue

    image.flags.writeable = False
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = face_detection.process(image)
    if results.detections:
      for detection in results.detections:
          print(detection)
    count += 1
    if count % 60 == 0:
        current = time.time()
        print("rate: {}".format(float(count) / (current - start)))

cap.release()

うまく顔認識できれば、顔の位置データが標準出力に出力されてくる。 複数の顔を認識した場合は、認識した分だけ位置データが出力される。