Applied ML
個人助理 Personal Assistant
用筆電鏡頭即時偵測專注、姿勢、情緒與喝水,背景常駐並在適當時機提醒。整合 MediaPipe 關鍵點、YOLOv11 物件偵測與 ViT 情緒辨識多個模型,再用時間窗、多訊號投票與領域知識校正,讓辨識在真實光線與鏡頭下依然可靠。
角色:獨立開發技術主軸:即時電腦視覺 · 多模型整合平台:Windows 桌面背景程式
重點
+
4 套即時偵測
專注 / 姿勢 / 情緒 / 喝水,單一鏡頭同時運作
+
3 個 ML 模型整合
MediaPipe 關鍵點、YOLOv11 物件、ViT 情緒辨識
+
模組化可開關
關閉的功能不載入模型,啟動更快
+
背景常駐
無視窗背景執行,系統通知+冷卻機制
↑ 點任一張卡片看它怎麼做到的
為什麼做這個
我自己長時間用電腦有一堆壞習慣:寫程式寫到忘我就會越坐越前面、臉貼近螢幕,不知不覺駝起背來,還常常一整天幾乎沒喝水。這些事我都知道不好,但光靠自己根本記不住、也撐不久。與其靠意志力,不如讓電腦用鏡頭幫我盯著,在我又離螢幕太近、駝背或太久沒喝水時主動提醒。
另一個動機是想藉這個專案,實際把幾個我還沒用過的電腦視覺技術串起來——MediaPipe 的臉部與姿態關鍵點、YOLOv11 的物件偵測、ViT 的情緒辨識,讓它們在同一支鏡頭、同一條 pipeline 裡一起運作。比起跑單一模型的範例,把這些模型整合成一個真的能背景常駐、會在對的時機提醒我的工具,對我來說更有意思、也更有挑戰。
功能總覽
關鍵技術決策
不盲信模型輸出,用領域知識校正偏差
不直接採用單一瞬間的辨識結果,而是每 5 分鐘記錄「該時段的平均情緒分佈」以稀釋偶發誤判;針對模型已知偏差用 EMOTION_CLASS_WEIGHTS 補償(sad / angry 不敏感 → 加權、happy 過敏 → 降權、fear 易與 surprise 混淆 → 降權);再用幾何特徵(偵測到嘟嘴 / 嘴角下垂時)額外加倍 sad / angry。
取捨
犧牲即時性換取穩定度,因為提醒場景不需要毫秒級反應。
系統架構
單一鏡頭 frame
├─ 各偵測器獨立 module(可單獨開關,關閉者不載入模型)
│ ├─ 專注:MediaPipe FaceMesh → yaw/pitch、閉眼、虹膜視線
│ ├─ 姿勢:MediaPipe Pose → 基準校正 + 多訊號投票
│ ├─ 喝水:YOLOv11(低信心門檻)+ 手部關鍵點 + 時間窗
│ └─ 情緒:ViT 七情緒 → 時段平均 + 類別權重校正
├─ 所有閾值集中於 config.py
└─ 輸出:Windows 系統通知(plyer,含冷卻)/ 每日情緒圖(matplotlib)
技術棧
PythonOpenCVMediaPipeUltralytics YOLOv11HuggingFace Transformers (ViT)pandas / matplotlibplyer