Day09 面部偵測 Face Detection


🟡 先看看程式的效果

今天這個程式碼範例展示了如何使用 OpenCV 和 MediaPipe 來進行即時面部偵測。程式首先透過攝影機捕捉即時影像, 並會偵測影像中的面部,並使用 MediaPipe 的繪圖工具在影像上標示出偵測到的面部位置。

Today’s program uses OpenCV and MediaPipe for real-time hand detection and keypoint drawing. It serves as a basic model for hand detection programs. Over the next few days, various features will be gradually added to this program.


🟡 學習目標

使用 MediaPipe 進行面部偵測,理解如何初始化和使用其模組來偵測面部特徵。


🟡 程式碼

請先下載 “Face Detection 面部偵測.py”
請按此下載

'''

Python + AI in 21 days
https://jasonworkshop.com/python

Designed by Jason Workshop

[請勿修改以上內容]

---

預備工作:

首先,請確保已安裝 opencv-python, mediapipe 模組
如不確定可直接在 Windows 的 cmd prompt 執行以下指定
pip install opencv-python mediapipe

'''

import cv2
import mediapipe as mp

# 初始化 MediaPipe Face Detection 模組
mp_face_detection = mp.solutions.face_detection
face_detection = mp_face_detection.FaceDetection(min_detection_confidence=0.5) # min_detection_confidence 為最低可信度
mp_drawing = mp.solutions.drawing_utils

# 開啟攝影機
cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # 轉換 BGR 圖像到 RGB
    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    # 偵測面部
    result = face_detection.process(rgb_frame)

    # 繪製面部位置
    if result.detections:
        for detection in result.detections:
            mp_drawing.draw_detection(
                frame,
                detection,
                keypoint_drawing_spec=mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=2, circle_radius=2),
                bbox_drawing_spec=mp_drawing.DrawingSpec(color=(255, 255, 255), thickness=1))

    # 顯示圖像
    cv2.imshow('Face Detection', frame)

    if cv2.waitKey(1) & 0xFF == 27: # 按下 ESC 鍵退出
        break

# 釋放攝影機並關閉所有視窗
cap.release()
cv2.destroyAllWindows()

🟡 小小挑戰一下

大家可以嘗試進行一些修改或改良喔! 例如:
✌️嘗試調節程式對面部偵測變得較為寬鬆或嚴緊吧。

😁 明天見!

按這裏回到 Python + AI 的 21 天挑戰