黃予岑KEN
← 所有作品
Applied ML

個人助理 Personal Assistant

用筆電鏡頭即時偵測專注、姿勢、情緒與喝水,背景常駐並在適當時機提醒。整合 MediaPipe 關鍵點、YOLOv11 物件偵測與 ViT 情緒辨識多個模型,再用時間窗、多訊號投票與領域知識校正,讓辨識在真實光線與鏡頭下依然可靠。

角色:獨立開發技術主軸:即時電腦視覺 · 多模型整合平台:Windows 桌面背景程式
GitHub

重點

+

4 套即時偵測

專注 / 姿勢 / 情緒 / 喝水,單一鏡頭同時運作

一支筆電鏡頭同時跑四種偵測,彼此共用同一份影像串流,不需多開程式或外接裝置。

+

3 個 ML 模型整合

MediaPipe 關鍵點、YOLOv11 物件、ViT 情緒辨識

三個來自不同框架的模型在同一條管線裡協作:MediaPipe 出臉部 / 姿態關鍵點、YOLOv11 偵測嘴邊物體、ViT 判斷情緒。

+

模組化可開關

關閉的功能不載入模型,啟動更快

每個偵測器是獨立模組,關掉的功能連模型都不會載入,省記憶體也加快啟動。

+

背景常駐

無視窗背景執行,系統通知+冷卻機制

可開機自動啟動、無黑窗在背景跑,提醒走 Windows 系統通知並有冷卻避免短時間內連續轟炸。

↑ 點任一張卡片看它怎麼做到的

為什麼做這個

我自己長時間用電腦有一堆壞習慣:寫程式寫到忘我就會越坐越前面、臉貼近螢幕,不知不覺駝起背來,還常常一整天幾乎沒喝水。這些事我都知道不好,但光靠自己根本記不住、也撐不久。與其靠意志力,不如讓電腦用鏡頭幫我盯著,在我又離螢幕太近、駝背或太久沒喝水時主動提醒。

另一個動機是想藉這個專案,實際把幾個我還沒用過的電腦視覺技術串起來——MediaPipe 的臉部與姿態關鍵點、YOLOv11 的物件偵測、ViT 的情緒辨識,讓它們在同一支鏡頭、同一條 pipeline 裡一起運作。比起跑單一模型的範例,把這些模型整合成一個真的能背景常駐、會在對的時機提醒我的工具,對我來說更有意思、也更有挑戰。

功能總覽

🎯 專注與番茄鐘+判斷你有沒有在看螢幕

透過頭部姿態(yaw / pitch)、閉眼與虹膜視線方向判斷是否看著螢幕,分心或離開過久會提醒;專注滿 25 分鐘(可調)提示休息 5 分鐘。

🧍 姿勢偵測+個人化校正後揪出駝背

啟動時以前幾秒坐姿做個人化基準校正,之後以頭前傾、頭部下沉、身體前傾、左右側傾等多重訊號判定駝背,另偵測臉部過於靠近螢幕。

💧 喝水提醒+偵測到喝水就自動重置

每 15 分鐘(可調)提醒喝水;偵測到喝水動作(手舉到嘴邊且嘴邊有物體)會自動重置計時。

😊 情緒記錄+記時段平均、畫每日佔比

持續辨識七種情緒,每 5 分鐘記錄該時段的平均情緒分佈(而非單一瞬間),並可產生每日情緒佔比長條圖。

🔔 通知與常駐+背景常駐、開機自啟、不轟炸

所有提醒走 Windows 系統通知並有冷卻機制避免轟炸;可背景常駐執行(無黑窗)與開機自動啟動;各偵測功能可獨立開關。

關鍵技術決策

不盲信模型輸出,用領域知識校正偏差

不直接採用單一瞬間的辨識結果,而是每 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
← 回到作品列表