iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0
AI/ ML & Data

基於人工智慧與深度學習對斑馬魚做行為分析系列 第 2

day 2yolo 車輛辨識模型初步介紹

  • 分享至 

  • xImage
  •  

我們第二天可以用簡單的車輛辨識做為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()
  1. 載入套件

    import cv2
    import torch
    
    • cv2 是 OpenCV 的 Python 介面,用於影像處理,比如讀取、顯示和操作影像。
    • torch 是 PyTorch,一個流行的深度學習框架,用於構建和操作神經網路模型。
  2. 載入 YOLO 模型

    model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
    
    • 這行程式碼從 ultralytics/yolov5 庫中載入 YOLOv5 模型,這是一個預訓練好的模型。yolov5s 是 YOLOv5 的輕量版,速度快,適合即時應用。torch.hub.load 是 PyTorch 提供的 API,用於從 GitHub 儲存庫中載入預訓練模型。
  3. 設定車輛類別

    vehicle_classes = ['car', 'truck', 'bus', 'motorcycle']
    
    • 這行程式碼定義了一個清單,包含我們關心的車輛類別,像是汽車、卡車、巴士和摩托車。
  4. 讀取影像

    image_path = 'path/to/your/image.jpg'
    image = cv2.imread(image_path)
    
    • image_path 是影像的路徑,需要替換為實際的影像檔案路徑。
    • cv2.imread(image_path) 函式讀取影像並將其存儲在 image 變數中。
  5. YOLO 辨識

    results = model(image)
    
    • 這行使用 YOLO 模型對影像進行物件辨識,返回的結果儲存在 results 變數中。results 包含了辨識出的物件及其相關資訊。
  6. 繪製辨識結果

    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 標註物件類別和信心度。
  7. 顯示影像

    cv2.imshow('Vehicle Detection', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 使用 OpenCV 顯示處理過的影像。
    • cv2.waitKey(0) 等待按鍵輸入,以便關閉影像視窗。
    • cv2.destroyAllWindows 關閉所有開啟的影像視窗。

模型解析

YOLO (You Only Look Once) 是一個很酷的深度學習模型,用來辨識影像中的物件。這裡有幾個重要概念:

  1. 一次看完

    • YOLO 模型只需看一次影像就能找出所有物件,速度非常快,適合即時應用。
  2. 網格劃分

    • 它把影像劃分成一個個小網格,每個網格負責找出它範圍內的物件。
  3. 邊界框和信心度

    • 每個網格會預測一些邊界框,邊界框包含物件的位置和大小,以及模型對這個預測的信心度。
  4. 物件類別

    • 每個網格還會預測物件的類別,比如車、卡車、巴士等。
  5. 過濾重疊框

    • 為了避免重複的邊界框,YOLO 使用一種技術叫非極大值抑制,保留最有信心的邊界框,去掉多餘的。

這段程式碼結合了 YOLO 的快速辨識能力和 OpenCV 的影像處理功能,能夠自動辨識影像中的車輛並加上標註。它速度快、效果好,適合用在即時監控或自動駕駛系統中。


上一篇
day 1基於人工智慧與深度學習對斑馬魚做行為分析
下一篇
day 3 yolo 停車場車牌辨識
系列文
基於人工智慧與深度學習對斑馬魚做行為分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言