Python | OpenCV 與深度學習框架整合
📚 前言
在前一篇我們學會了 多物件偵測與追蹤 (YOLO + DeepSORT),這是偏向「應用層」的做法,直接利用 OpenCV 的 DNN 模組載入模型並完成任務。
然而,若要進一步開發專案或研究,就需要更高的彈性與可擴充性。
整合 PyTorch 或 TensorFlow/Keras 的好處在於:
- 可以載入各種預訓練模型(ResNet、MobileNet、YOLOv5 等)。
- 能使用自己訓練或微調過的模型,針對特定場景最佳化。
- 支援 GPU 加速,大幅提升即時推論效能。
- 允許修改網路結構、增加新層,甚至自行訓練,滿足研究與開發需求。
- 結合 OpenCV 的影像處理能力,打造更靈活的應用。
這樣不僅能「跑起來」,還能「改得動」,真正把電腦視覺應用推向研究與實務的下一步。
🎨 範例圖片/影片
這裡我們使用 Pexels 提供的免費圖片素材:Street Image。
下載後將檔名改為 street.jpg,在程式碼範例中使用。這張圖片中有車輛與行人,非常適合用來測試物件分類與定位。
這裡我們使用 Pexels 提供的免費影片素材:Street Video。
下載後將檔名改為 street.mp4,在程式碼範例中使用。影片中有車輛與行人,非常適合用來測試物件分類與定位。
🔎 原理說明
- OpenCV:負責影像擷取、前處理與顯示。
- 深度學習框架:負責模型載入、推論與微調。
- 整合方式:框架輸出推論結果,OpenCV 負責繪製邊界框或文字。
📂 模型下載與使用說明
PyTorch
- 使用
torchvision.models載入預訓練模型 (ResNet、MobileNet 等)。 - 可進行微調或自訂網路結構。
TensorFlow/Keras
- 使用
tf.keras.applications載入預訓練模型 (MobileNetV2、ResNet50 等)。 - API 友善,適合快速應用與部署。
🧠 函式與參數說明
PyTorch — torchvision.models
resnet18(weights=ResNet18_Weights.DEFAULT):載入 ResNet18 預訓練模型,建議使用weights參數取代舊版的pretrained=True,避免警告。model.eval():切換到推論模式。weights.transforms():取得官方推薦的前處理流程。torch.topk(probs, 5):取出前 5 個類別與機率。
TensorFlow/Keras — tf.keras.applications
MobileNetV2(weights="imagenet"):載入 MobileNetV2 預訓練模型。preprocess_input(x):對輸入影像做正規化。model.predict(x):進行推論,輸出 1000 類別的分數。decode_predictions(preds, top=5):解碼分類結果,顯示前 5 個預測類別與機率。
💻 範例程式 — PyTorch 整合 (ResNet18)
1 | import torch |

圖:使用 PyTorch ResNet18 對影像進行分類,Top-5 預測結果顯示模型的信心分布
📊 ResNet18 Top-5 預測結果
| 排名 | 類別 (Label) | 機率 (Probability) |
|---|---|---|
| 1 | police van | 0.3636 |
| 2 | ambulance | 0.2735 |
| 3 | garbage truck | 0.1055 |
| 4 | tow truck | 0.0890 |
| 5 | minivan | 0.0556 |
💻 範例程式 — TensorFlow/Keras 整合 (MobileNetV2)
1 | import tensorflow as tf |

圖:使用 TensorFlow/Keras MobileNetV2 對影像進行分類,顯示前 5 個預測結果
📊 MobileNetV2 Top-5 預測結果
| 排名 | 類別 (Label) | 機率 (Probability) |
|---|---|---|
| 1 | minivan | 0.2867 |
| 2 | minibus | 0.2489 |
| 3 | police van | 0.1733 |
| 4 | cab | 0.0288 |
| 5 | limousine | 0.0198 |
🛠️ 與 OpenCV 結合的應用
- 即時影像分類:用框架載入模型,OpenCV 負責影像擷取與顯示。
- 物件偵測:用 PyTorch/TensorFlow 載入 YOLOv5/SSD 模型,OpenCV 負責繪製邊界框。
- 追蹤整合:框架提供特徵抽取,OpenCV + DeepSORT 負責追蹤。
⚠️ 注意事項
- 版本相容性:建議使用 Python 3.8–3.11,避免 3.12+ 的套件相容性問題。
- GPU 支援:若要使用 CUDA,需安裝對應版本的 PyTorch/TensorFlow。
- 資料集準備:若要進行微調或訓練,需準備符合格式的影像資料集。
📊 應用場景
- 智慧交通:用框架載入 YOLOv5,結合 OpenCV 即時顯示。
- 人流分析:用 ResNet/MobileNet 做分類,OpenCV 負責影像擷取。
- 零售應用:用框架模型辨識商品,OpenCV 顯示結果。
🎯 結語
本篇我們學會了如何將 OpenCV 與深度學習框架整合,不再只是「跑起來」,而是能夠載入、修改、甚至微調模型。
這讓我們的應用更靈活,能同時滿足研究與實務需求。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
註:以上參考了
OpenCV 官方文件 — Tutorials
OpenCV 官方文件 — Python Tutorials
PyTorch 官方安裝指南
TensorFlow/Keras 官方文件
Pexels — 免費圖片與影片素材
