
偵測家中貓咪行為
為了可以適用於所有牌子的監視器,所以監測方式是兩種:1.錄影器存檔後讀取檔案進行 2.監視器即時上傳同時進行判斷
判斷後的行為紀錄於LOG後進行統計傳到LINE上面(LINE上是通知行為與次數而已)
這是我第一次投稿黑客松,不知道為什麼以前我一直以為是什麼喝可樂比賽(?)之類的東西。
本次工具開發是為了投稿高通的黑客松,因此程式中都有加上高通的部分(選用),就算沒有使用高通也能正常運行。
順帶一提因為東西做得太爛所以連初賽都沒通過哈哈
這次也讓我了解到原來有這麼多的黑客松比賽
以下進入正文
題目構想(Problem → Value)
要解決的問題:家中寵物監控依賴雲端→延遲、隱私疑慮、月費;且無法「理解」行為(只會錄影)。
解法:在 Snapdragon X 系列筆電本地推論(比賽方要求,因為我沒進到決賽所以實際的運行皆在我的ASUS筆電內),偵測「貓」+判斷行為(吃飯、喝水、睡覺、梳理、抓沙發、跳上桌、進出貓砂、激烈打鬧…),即時提醒與日誌統計。
價值:
低延遲(本地 NPU):即時預警「抓沙發」「上桌」;
高隱私(影像不出門);
省成本(免雲端費);
可擴充到多寵物/多攝影機。
我們的目標行為有:
- eating:正在吃東西
- drinking:正在喝水
- litter_usage:正在使用貓砂盆
- scratching:抓沙發
判斷邏輯:
先用 YOLOv8 模型 偵測出:
貓咪
水碗 / 食碗 / 沙發角 / 貓砂盆
接著根據貓框與區域 (ROI) 是否重疊判斷行為:cat + food_bowl ROI → eating
cat + water_bowl ROI → drinking
cat + litter_box ROI → litter_usage
cat + sofa_corner ROI → scratching
可以由使用者自己選擇區域,標記水碗在影片上的哪個位置,就算改變位置後要重新標記也很方便。
總體流程
攝影機
↓
影格預處理(縮放、轉色)
↓Qualcomm AI Hub 模型
(如 YOLOv8 / MobileNet-SSD 貓/碗/沙發偵測模型)
↓
得到物件 Bounding Boxes
(類別 & 座標)
↓
檢查 BBox
與 ROI
是否重疊
↓
行為判斷(貓 + 碗 → 吃/喝;貓 + 沙發角 → 抓沙發…)
↓
記錄事件 & 顯示畫面
程式架構
必備lib
1 |
|
比賽要求使用
1 |
|
開發時
app/main.py 開發時入口,顯示疊圖與事件列表,主程式
app/main_heuristic.py 試跑版,不加入AI模型
app/behaviors.py 行為判斷(喝水/吃東西、貓砂、抓沙發邏輯)
app/markers.py 標記偵測(若 opencv-contrib-python 沒安裝,會自動走無標記模式)
app/zones.yaml ROI 設定
app/config.json 門檻參數(例如最小停留秒數)
app/event_logger.py 事件寫入 CSV
app/capture.py — 攝影機或是影片讀取
app/aihub_backend.py 使用本機模型,不跑高通AI HUB比賽用
app/catsense.py 比賽用入口,–mode ai|heuristic,可自由選擇是否使用NPU進行運行
app/detector_yolov8_onnx.py(ONNX Runtime 推論 + 解析 YOLOv8 輸出)
app/utils.py(letterbox、NMS、重疊計算等工具)
scripts/visualize_events.py 快速看統計
README.md 安裝與 Snapdragon X 備註
標記 ROI 區域(貓碗/沙發/貓砂)
我們使用自製腳本 calibrate_bowl.py
來標記影片中的四個區域:
1 |
|
- 操作方式:
- 用滑鼠拖曳框選區域
- 依序標記:
- water_bowl
- food_bowl
- litter_box
- sofa_corner
- 快捷鍵:
- n:下一個目標
- p:上個目標
- r:重設當前框
- s:儲存至 app/zones.yaml
- q:離開
- space / p:暫停/繼續播放
- , / .:單步播放(前進 / 後退)
啟動行為偵測(AI 模式)
使用剛剛訓練好的模型與標記好的 ROI,執行行為分析:
1 |
|
畫面左上會顯示目前偵測到的行為,例如:eating food_bowl
圖上是因為我把所有區域都寫在一起(除了沙發)
因為我自己沒養貓,問了好幾個有養貓的才知道他們食盆跟水盆居然是一起的,我還以為通常都會分開。
- 模型部屬(比賽要求)
模型部屬教學可使用模型1
2
3
4
5pip install "qai-hub-models[yolov8-det]”
pip install -U qai-hub onnxruntime-directml
#設定前先跑這個
pip install -U qai-hub onnxruntime-directml
qai-hub configure --api_token <你的AI Hub token>
由於沒有到決賽所以我沒有裝比賽要求的Turu,有興趣的再自己去查一下吧,我都只有在本機運行
推薦開源專案與資源
這個題目已經很多人做了,所以在正式開始製作前先上網查了一些其他人造好的輪子
BeRSTID – Behaviour Real-Time Spatial Tracking Identification
這是一套在收容所內使用 2D 標誌(fiducial markers)追蹤貓咪吃飯與喝水行為的系統,能在影像中對行為進行即時與後製分析,且與人工標註 closely correlation。是針對貓咪特定行為的監控方案,可供參考或擴展。
Nature
YOLO-Behaviour 框架
這是一套通用的行為偵測框架,使用 YOLO + 少量標註即可自動量化動物(如鳥類、斑馬等)的特定行為事件。雖非專為貓設計,但可以借鑑其範式或自訓貓咪行為的模型。
DeepLabCut(DLC)
這是一個領先的 markerless 動物姿態估計工具,可用於貓咪身體各部位的追蹤與分析。對於我們需要偵測抓沙發時的爪子動作、喝水時頭部姿勢等行為非常實用,且使用少量標註即可有高精度表現。
AnimalTracker(基於 ImageJ)
提供行為區域(zone)自訂設定 + 追蹤分析功能的模組化工具,適合進行進出貓砂盒或水碗區域的監測,也可當作行為觸發條件的前處理工具。
SimBA (Simple Behavioral Analysis)
專為動物行為分類建構的平台,具備影片預處理、姿態標註資料輸入、行為分類器與視覺化報表,可用於行為分類與驗證策略的快速實作。
MammalNet
提供大規模哺乳類動物行為識別資料集與 benchmark,涵蓋眾多行為類型。雖不專注於家貓,但可作為行為模型訓練時的參考或預訓練。
DeepCat – 貓咪行為分析工具
這是一個針對貓咪身體語言(如尾巴、眼睛等姿勢訊息)進行分析的專案,透過 OpenCV 和 landmark 偵測來推估其行為意涵,可當作輔助視覺分析模塊。
Qualcomm® AI Hub 是什麼?
介紹一下我參加的黑客松要求Qualcomm® AI Hub
Qualcomm® AI Hub 是 Qualcomm 提供的 Edge AI 模型部署平台,它提供:
可直接部署在 Qualcomm SoC/NPU(如:Snapdragon、RB5)上的 高效能 AI 模型
提供 ONNX/TFLite 模型格式
提供用於行動裝置、邊緣裝置的模型優化與量化(Quantization)支援
搭配 Qualcomm® AI Engine / SDK (如 QNN, SNPE) 使用
主要跑在 手機、IoT 裝置、嵌入式裝置 上
主要用途:
嵌入式 AI 推論(影像辨識、關鍵字偵測等)
利用 Qualcomm NPU/Hexagon DSP 執行高效率 AI
小結:NPU跟高通AI Hub我都是第一次碰,在怎麼設定上摸索了一下,最後還是覺得用習慣的ollama比較好用。
我還跑去跟好幾個有養貓的朋友問說能不能錄一下吃飯和喝水的影片,有夠好笑
遺憾的是連初賽都沒過,可惜了隊友寫的簡報
畢竟初賽是先看簡報,決賽才會提供高通的電腦使用NPU進行,好險我初期就加上GPU運算功能不然我這個程式白寫了哈哈
NPU在這次黑客松之前連聽都沒聽過,我孤陋寡聞了。