9️⃣ OpenCV 與深度學習
🎯 OpenCV 如何與深度學習結合?
OpenCV 支援深度學習模型,讓我們可以在 電腦視覺應用 中使用 YOLO、SSD、ResNet 等技術來進行物件偵測與影像分類。
✅ 適用場景:
- 物件偵測(YOLO、SSD)
- 影像分類(ResNet、MobileNet)
- 人臉辨識與關鍵點偵測
✅ 使用 OpenCV DNN 模組載入預訓練模型
OpenCV 內建 DNN(Deep Neural Network) 模組,可用於載入 TensorFlow 或 Caffe 訓練好的模型。
✅ 這允許我們使用外部的深度學習模型來進行物件偵測與分類。
✅ 使用 YOLO 進行物件偵測
YOLO(You Only Look Once)是一種高效能即時物件偵測技術。
import cv2
import numpy as np
# 載入 YOLO 模型
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
# 讀取類別名稱
with open("coco.names", "r") as f:
classes = [line.strip() for line in f.readlines()]
# 讀取影像
image = cv2.imread("image.jpg")
h, w = image.shape[:2]
# 轉換影像格式
blob = cv2.dnn.blobFromImage(image, 1/255.0, (416, 416), swapRB=True, crop=False)
net.setInput(blob)
out_layers = net.getUnconnectedOutLayersNames()
outs = net.forward(out_layers)
# 繪製偵測框
for output in outs:
for detection in output:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5:
center_x, center_y, box_w, box_h = (detection[:4] * np.array([w, h, w, h])).astype("int")
x = int(center_x - box_w / 2)
y = int(center_y - box_h / 2)
cv2.rectangle(image, (x, y), (x + box_w, y + box_h), (0, 255, 0), 2)
cv2.imshow("YOLO Object Detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
✅ 這段程式碼會使用 YOLO 偵測影像中的物件,並繪製綠色的 Bounding Box。
✅ 使用 MobileNet 進行影像分類
MobileNet 是一種適合移動裝置的輕量級影像分類模型。
import cv2
# 載入 MobileNet 模型
net = cv2.dnn.readNetFromCaffe("mobilenet.prototxt", "mobilenet.caffemodel")
# 讀取影像
image = cv2.imread("image.jpg")
blob = cv2.dnn.blobFromImage(image, scalefactor=1.0, size=(224, 224), mean=(104, 117, 123))
net.setInput(blob)
output = net.forward()
print("分類結果:", output.argmax())
✅ 這可以用來辨識影像中的主要物件,例如狗、貓、車子等。
📝 總結
功能 | 語法 |
---|---|
載入 DNN 模型 | cv2.dnn.readNet("model.weights", "model.cfg") |
YOLO 物件偵測 | cv2.dnn.readNet("yolov3.weights", "yolov3.cfg") |
MobileNet 影像分類 | cv2.dnn.readNetFromCaffe("mobilenet.prototxt", "mobilenet.caffemodel") |
🚀 現在你已經學會如何使用 OpenCV 進行深度學習應用!接下來,我們將學習進階應用與完整專案示範! 😊