我們第二天可以用簡單的車輛辨識做為yolo的應用範例,以下是程式碼
import cv2
import torch
# 載入 YOLO 模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
# 設定車輛類別
vehicle_classes = ['car', 'truck', 'bus', 'motorcycle']
# 讀取影像
image_path = 'path/to/your/image.jpg'
image = cv2.imread(image_path)
# YOLO 辨識
results = model(image)
# 繪製辨識結果
for result in results.xyxy[0]:
x1, y1, x2, y2, conf, cls = result
if model.names[int(cls)] in vehicle_classes:
label = f'{model.names[int(cls)]} {conf:.2f}'
cv2.rectangle(image, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
cv2.putText(image, label, (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
# 顯示影像
cv2.imshow('Vehicle Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
載入套件:
import cv2
import torch
cv2
是 OpenCV 的 Python 介面,用於影像處理,比如讀取、顯示和操作影像。torch
是 PyTorch,一個流行的深度學習框架,用於構建和操作神經網路模型。載入 YOLO 模型:
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
ultralytics/yolov5
庫中載入 YOLOv5 模型,這是一個預訓練好的模型。yolov5s
是 YOLOv5 的輕量版,速度快,適合即時應用。torch.hub.load
是 PyTorch 提供的 API,用於從 GitHub 儲存庫中載入預訓練模型。設定車輛類別:
vehicle_classes = ['car', 'truck', 'bus', 'motorcycle']
讀取影像:
image_path = 'path/to/your/image.jpg'
image = cv2.imread(image_path)
image_path
是影像的路徑,需要替換為實際的影像檔案路徑。cv2.imread(image_path)
函式讀取影像並將其存儲在 image
變數中。YOLO 辨識:
results = model(image)
results
變數中。results
包含了辨識出的物件及其相關資訊。繪製辨識結果:
for result in results.xyxy[0]:
x1, y1, x2, y2, conf, cls = result
if model.names[int(cls)] in vehicle_classes:
label = f'{model.names[int(cls)]} {conf:.2f}'
cv2.rectangle(image, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
cv2.putText(image, label, (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
results.xyxy[0]
中的每個辨識結果。x1, y1, x2, y2
是邊界框的座標,conf
是信心度,cls
是類別索引。vehicle_classes
中,就在影像上繪製綠色的方框並標註物件類別和信心度。cv2.rectangle
繪製邊界框,使用 cv2.putText
標註物件類別和信心度。顯示影像:
cv2.imshow('Vehicle Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(0)
等待按鍵輸入,以便關閉影像視窗。cv2.destroyAllWindows
關閉所有開啟的影像視窗。YOLO (You Only Look Once) 是一個很酷的深度學習模型,用來辨識影像中的物件。這裡有幾個重要概念:
一次看完:
網格劃分:
邊界框和信心度:
物件類別:
過濾重疊框:
這段程式碼結合了 YOLO 的快速辨識能力和 OpenCV 的影像處理功能,能夠自動辨識影像中的車輛並加上標註。它速度快、效果好,適合用在即時監控或自動駕駛系統中。