整合 YOLO 物件偵測、MediaPipe 手部追蹤、臉部網格與即時影像串流的智慧監控平台
點擊任意圖片可放大瀏覽 · 支援鍵盤 ← → 切換 · 滾輪縮放 · ESC 關閉
本系統是以 Python 為後端核心,結合多種電腦視覺技術所建構的即時智慧監控平台。 透過 Web Camera 擷取影像,經由 YOLOv8 進行物件偵測、MediaPipe 實現手部追蹤與臉部網格偵測, 最終透過 Flask 將影像串流呈現於前端網頁,實現完整的 AI 監視功能。
app.py 匯入所有 core/ 模組camera.py 提供影像幀給各偵測器event_logger.py 接收各模組事件GET / — 主監控頁面GET /video_feed — MJPEG 串流GET /events — SSE 事件推送POST /config — 切換偵測模式
使用 OpenCV 的 cv2.VideoCapture(0) 開啟預設攝影機,
讀取影像幀後透過 Flask 的 MJPEG 串流回應傳送至前端 <img> 標籤顯示。
測試重點為攝影機存取權限、幀率穩定性與串流延遲。
pip install opencv-pythoncap = cv2.VideoCapture(0)ret, frame = cap.read()
載入 Ultralytics YOLOv8 Nano 模型(yolov8n.pt),
對每幀影像進行物件偵測,支援 COCO 資料集的 80 種類別。
重點偵測對象為人員(person)與車輛(car/truck/bus),並將偵測結果繪製邊界框與信心分數。
pip install ultralyticsmodel = YOLO('yolov8n.pt')results = model(frame)使用 Google MediaPipe 的 Hands 解決方案,偵測畫面中的手部並標記 21 個關節點(Landmark)。 可同時偵測最多雙手,輸出每個關節的 3D 座標(x, y, z),並繪製手部骨架連線。
pip install mediapipemp_hands = mp.solutions.hands.Hands()hands.process(image)使用 MediaPipe FaceMesh 模型,對影像中的臉部偵測並輸出 468 個精密網格點(3D Landmark)。 可用於臉部特徵分析、頭部姿態估計(Head Pose Estimation)與眨眼偵測等應用。
face_mesh = mp.solutions.face_mesh.FaceMesh()face_mesh.process(rgb_frame)mp.solutions.drawing_utils 繪製網格透過 Flask 的 MJPEG multipart 串流技術,將處理後的影像即時傳送至前端。支援多個客戶端同時觀看,幀率穩定於 25-30 fps。
偵測到物件時,於影像上疊加彩色邊界框(Bounding Box)與資訊標籤,顯示物件類別、信心分數與編號。同時在側欄顯示結構化物件列表。
以 Server-Sent Events (SSE) 技術,將偵測到的重要事件(如有人進入、車輛出現)即時推送至前端,以時序方式顯示於時間軸 UI 元件中。
系統依據規則(如連續幀偵測到 person 超過閾值)自動觸發警示事件,於畫面角落顯示閃爍標示,並同步寫入 JSON 日誌檔。
YOLO 偵測結果按類別(person / car / truck / bus)分類統計,即時顯示當前幀中的人員數量與車輛數量,並繪製數量折線圖於儀表板。
前端介面提供切換按鈕,可在 Raw Camera、YOLO、手部偵測、臉部網格、全功能模式間即時切換,POST 請求更新後端 mode 變數。
Response(stream_with_context(...)) 完整範例mimetype='multipart/x-mixed-replace; boundary=frame',
並在 <img src="/video_feed"> 中直接指向串流路由即可。
model(frame, imgsz=320),推論速度提升至 18-22 fps。
cv2.equalizeHist)預處理,顯著提升偵測穩定性。
Access-Control-Allow-Origin: *,並使用 Flask-CORS 套件統一處理。