Python | OpenCV 影片資料集建立與品質檢查
📚 前言
在上一篇 資料蒐集 中,我們介紹了四種基礎的資料蒐集方式,其中方法四(從影片截取影格)操作最簡單,但有兩個實際問題:
- 模糊幀:動態模糊導致影像無法使用
- 重複幀:相機靜止時連續影格幾乎一樣,徒增資料量
本篇介紹如何自動過濾這兩類問題,建立高品質的訓練資料集,最後再加上資料品質檢查。
🎬 從影片自動建立高品質訓練資料集
圖:從影片建立高品質訓練資料集完整流程 ─ 診斷影片 → 自動過濾模糊與重複幀 → 品質檢查
💡 執行前建議:不同影片的壓縮程度差異很大,先執行
diagnose_video.py確認影片的 Laplacian 值範圍,再決定BLUR_THRESHOLD。手機直拍通常在 50 ~ 200 之間。
🎨 範例影片:
- 來源:Toy Car Video,自行拍攝的玩具車影片,可自由下載與使用。
- 內容:影片靜態玩具車,透過旋轉拍攝不同角度支影片,長度約 1分 31 秒,非常適合用來資料蒐集。
- 下載為
toy_car.zip,解壓縮並放到專案的assets/目錄下。
📊 步驟一:診斷影片 Laplacian 值分布
1 | # diagnose_video.py |

圖:diagnose_video.py 輸出影片幀的 Laplacian 值統計與建議閾值
確認數值後,將結果填入下方腳本的 BLUR_THRESHOLD。
🧹 步驟二:自動過濾模糊與重複幀
拍攝情境與參數建議:
| 拍攝方式 | INTERVAL_SEC | BLUR_THRESHOLD | HASH_THRESHOLD |
|---|---|---|---|
| 手持繞物行走(鏡頭移動) | 0.5 | 依診斷值 | 5 ~ 8 |
| 轉盤旋轉 + 固定鏡頭 | 1.0 | 依診斷值 | 1 |
| 行車記錄器或街景 | 0.3 | 依診斷值 | 8 ~ 10 |
💡 轉盤拍攝注意事項:轉盤拍攝的背景完全靜止,pHash 對整張圖計算,背景佔大部分畫面,導致每幀 hash 非常相近,幾乎全被判成重複。建議將
HASH_THRESHOLD設為1(僅過濾完全相同的幀),改用INTERVAL_SEC控制取樣密度即可。
1 | # collect_from_video.py |

圖:collect_from_video.py 執行輸出,顯示進度與過濾統計
🔍 資料品質檢查
蒐集完後,建議先掃描是否有損壞的圖片:
1 | # check_images.py |

圖:check_images.py 掃描資料集,輸出損壞圖片清單
⚠️ 注意事項
- BLUR_THRESHOLD 依影片調整:不同攝影機、不同壓縮率的影片,Laplacian 值範圍差異很大,務必先跑
diagnose_video.py確認。 - HASH_THRESHOLD 依拍攝方式調整:固定背景(如轉盤)建議設為
1,移動鏡頭建議設為5 ~ 8。 - 資料多樣性優先:過濾後的資料集應涵蓋不同光線、角度與背景,避免模型只認得單一情境。
- 訓練/驗證集分離:確保驗證集的影格不來自訓練集同一段影片。
🎯 結語
透過 diagnose_video.py 診斷、collect_from_video.py 過濾、check_images.py 品質掃描,能有效從影片中建立乾淨的訓練資料集。
下一篇進入 資料標註,為每張圖片建立模型學習所需的正確答案。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
註:以上參考了
OpenCV 官方文件 — Tutorials
