📸 Raspberry Pi 5 + PiCamera2 + MediaPipe Face Mesh 教學(支援 468 點臉部特徵點)

💡 本教學將教你如何在 Raspberry Pi 5 (RP5) 使用 PiCamera2 + MediaPipe Face Mesh,進行即時臉部網格偵測(Face Mesh)。
Face Mesh 可用於表情分析、人臉對齊、AR 濾鏡、嘴唇追蹤等用途。


🧰 一、環境需求

✅ 硬體

  • Raspberry Pi 5

  • Raspberry Pi Camera Module v2/v3(需透過 CSI 接口)

  • microSD(安裝 Raspberry Pi OS Bookworm 64-bit)

✅ 軟體

  • Python 3.9+

  • picamera2

  • OpenCV

  • mediapipe(重點:原版 mediapipe 支援 aarch64 的預建 wheel,v0.10.9 起正式可用


🛠️ 二、安裝套件

1️⃣ 開啟相機

sudo raspi-config
# Interface Options → Camera → Enable
sudo reboot

2️⃣ 安裝 Python 相依套件

sudo apt update
sudo apt install -y python3-picamera2 libatlas-base-dev python3-opencv

3️⃣ 安裝 MediaPipe(最新版支援 ARM)

pip install mediapipe==0.10.9

確認成功安裝:

python3 -c "import mediapipe as mp; print(mp.__version__)"

📸 三、PiCamera2 + Face Mesh 程式碼

建立檔案 face_mesh_picamera2.py

import cv2
import mediapipe as mp
from picamera2 import Picamera2
import time

# 初始化 MediaPipe Face Mesh 與 Drawing
mp_face_mesh = mp.solutions.face_mesh
mp_drawing = mp.solutions.drawing_utils
drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1, color=(0,255,0))

# 初始化 PiCamera2
picam2 = Picamera2()
picam2.preview_configuration.main.size = (640, 480)
picam2.preview_configuration.main.format = "RGB888"
picam2.configure("preview")
picam2.start()
time.sleep(2)

# 啟用 Face Mesh
with mp_face_mesh.FaceMesh(
        static_image_mode=False,
        max_num_faces=1,
        refine_landmarks=True,  # 支援眼睛/唇細節
        min_detection_confidence=0.5,
        min_tracking_confidence=0.5) as face_mesh:

    while True:
        frame = picam2.capture_array()
        image = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)

        # 處理臉部特徵點
        results = face_mesh.process(image)

        # 畫出 mesh 點位
        if results.multi_face_landmarks:
            for face_landmarks in results.multi_face_landmarks:
                mp_drawing.draw_landmarks(
                    image=image,
                    landmark_list=face_landmarks,
                    connections=mp_face_mesh.FACEMESH_TESSELATION,
                    landmark_drawing_spec=None,
                    connection_drawing_spec=drawing_spec)

        cv2.imshow("RP5 + Face Mesh", image)

        if cv2.waitKey(1) & 0xFF == 27:
            break

cv2.destroyAllWindows()
picam2.stop()
✅ 效果展示

執行後你會看到畫面中人臉會出現 468 個臉部特徵點連成的網格,包括:

  • 臉部輪廓

  • 雙眼、嘴唇、鼻尖、眉毛

  • 細緻曲線點位(開啟 refine_landmarks=True


📌 故障排查

問題 解決方式
❌ No module named 'mediapipe' 安裝 pip install mediapipe==0.10.9
❌ No camera image 確認 PiCamera2 已設定成功並用 picamera2.preview() 測試
❌ 顯示卡頓 可改用解析度 320x240 或僅顯示 1/2 面積 ROI

🧠 延伸應用方向

應用 說明
臉部對齊/旋轉校正 使用 5 個特徵點計算仿射轉換矩陣
嘴型偵測 可用來做嘴唇辨識 / 唇語判讀
AR 臉部貼圖 根據 landmark 貼上虛擬物件
表情辨識 根據多組關鍵點距離與角度自建情緒分類模型

 

文章標籤
全站熱搜
創作者介紹
創作者 liusming 的頭像
liusming

劉老師的跨域創想工坊

liusming 發表在 痞客邦 留言(0) 人氣(27)