📸 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 貼上虛擬物件 |
| 表情辨識 | 根據多組關鍵點距離與角度自建情緒分類模型 |
文章標籤
全站熱搜
