Python | OpenCV 專案:小型圖片分類專案
📚 前言
在上一篇 車牌辨識應用 中,我們完成了結合 OCR 的辨識應用。
這一篇是 小型圖片分類專案,目標是把 模型訓練與微調 系列學到的遷移學習技術,整合成一個完整的端對端系統:從蒐集資料到即時攝影機推論,一次走完全流程。
範例場景:辨識「剪刀、石頭、布」三種手勢(可替換成任何你想分類的物件)。
🎯 專案目標
- 用攝影機蒐集自訂類別的訓練資料
- 以 MobileNetV2 + 遷移學習訓練分類模型
- 評估模型表現
- 整合攝影機做即時分類推論
🗃️ 專案結構
1 | image_classifier/ |
💻 步驟一:蒐集訓練資料
開啟攝影機讓使用者逐類別按空白鍵蒐集訓練與驗證圖片,截取中央 ROI 後儲存。
1 | # 1_collect.py |
💻 步驟二:訓練模型
凍結 MobileNetV2 特徵層後只訓練分類頭,帶有增強的訓練迴圈並儲存最佳驗證準確率的模型
1 | # 2_train.py |
💻 步驟三:評估模型
載入已訓練的 MobileNetV2 模型對驗證集推論,輸出各類別 Precision、Recall、F1-Score 報告
1 | # 3_evaluate.py |
💻 步驟四:整合攝影機即時推論
整合 MobileNetV2 與攝影機,對畫面中央 ROI 即時分類手勢並顯示類別名稱與信心度
1 | # 4_inference.py |
⚠️ 注意事項
- 蒐集資料時保持背景一致:背景差異太大會讓模型學到背景而非物件本身,建議在相同背景下蒐集。
- 類別樣本數要均衡:每個類別樣本數差異不要超過 2 倍,否則模型會偏向樣本多的類別。
- 推論 ROI 與訓練 ROI 要一致:訓練時取畫面中央 ROI,推論時也要取相同位置,避免分佈偏移。
🎯 結語
這個專案把資料蒐集、模型訓練、評估、即時推論串成一條完整的 pipeline,是深度學習與 OpenCV 整合最典型的範例。
下一個專案是 MediaPipe 手勢控制應用,用 MediaPipe 的手部關鍵點做更精細的手勢辨識。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
註:以上參考了
PyTorch Transfer Learning Tutorial
torchvision MobileNetV2
scikit-learn classification_report
