DigiHouse
日本語

TECH ARTICLE · NCU · 6 MIN READ

Blog / NCU

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

📸 Raspberry Pi 5 + PiCamera2 + MediaPipe Face Mesh 教學(支援 468 點臉部特徵點) 💡 本教學將教你如何在 Raspberry Pi 5 (RP5) 使用 PiCamera2 + MediaPipe Face Mesh,進行即時臉部網格偵測(Face Mesh

💡 本教學將教你如何在 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️⃣ 開啟相機

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

2️⃣ 安裝 Python 相依套件

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

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

text
pip install mediapipe==0.10.9

✅ 確認成功安裝:

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

📸 三、PiCamera2 + Face Mesh 程式碼

建立檔案 face_mesh_picamera2.py:

補充 4

python
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 貼上虛擬物件

表情辨識 根據多組關鍵點距離與角度自建情緒分類模型

原始文章來源:https://liusming.pixnet.net/blog/posts/14223033921

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