阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!

物體偵測已成為人工智慧最令人興奮的應用之一,使機器能夠理解和解釋視覺資料。在本教程中,我們將逐步介紹使用 YOLO(只看一次)演算法建立即時物件偵測應用程式的步驟。這種強大的模型可以快速準確地偵測影像和影片中的物件,使其適用於從監控到自動駕駛車輛的各種應用。

目錄

  1. 什麼是物體檢測?

  2. 了解 YOLO

  3. 設定您的環境

  4. 安裝依賴項

  5. 建構物件檢測應用程式

  6. 潛在用例

  7. 結論

什麼是物體檢測?

物件偵測是一項電腦視覺任務,涉及辨識和定位影像或視訊串流中的物件。與僅確定存在哪些物件的影像分類不同,物件偵測提供偵測到的物件周圍的邊界框及其類別標籤。

了解 YOLO

YOLO 代表“You Only Look Once”,是一種最先進的即時目標偵測演算法。 YOLO 的主要優點是速度;它即時處理影像,同時保持高精度。 YOLO 將輸入影像分割為網格,並預測每個網格單元的邊界框和機率,使其能夠在一次傳遞中偵測多個物件。

設定您的環境

在我們深入研究程式碼之前,請確保您已安裝以下軟體:

  • Python 3.x :從python.org下載。

  • OpenCV :電腦視覺任務的函式庫。

  • NumPy :用於數值計算的函式庫。

  • TensorFlow 或 PyTorch :取決於您執行 YOLO 模型的偏好。

建立虛擬環境(可選)

建立虛擬環境可以幫助有效管理依賴關係:

python -m venv yolovenv
source yolovenv/bin/activate  # On Windows use yolovenv\Scripts\activate

安裝依賴項

使用 pip 安裝所需的函式庫:

pip install opencv-python numpy

對於YOLO,您可能需要下載預先訓練的權重和設定檔。您可以在YOLO 官方網站上找到 YOLOv3 權重和配置。

建構物件檢測應用程式

現在,讓我們建立一個使用 YOLO 進行即時物件偵測的 Python 腳本。

步驟1:加載YOLO

建立一個名為object_detection.py的新 Python 文件,並先匯入必要的函式庫並載入 YOLO 模型:

import cv2
import numpy as np

# Load YOLO
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

步驟2:處理視訊串流

接下來,我們將從網路攝影機擷取影片並處理每一幀以偵測物件:

# Capture video from webcam
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    height, width, channels = frame.shape

    # Prepare the image for YOLO
    blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
    net.setInput(blob)
    outs = net.forward(output_layers)

    # Process the detections
    class_ids = []
    confidences = []
    boxes = []

    for out in outs:
        for detection in out:
            scores = detection[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]
            if confidence > 0.5:  # Adjust confidence threshold as needed
                # Object detected
                center_x = int(detection[0] * width)
                center_y = int(detection[1] * height)
                w = int(detection[2] * width)
                h = int(detection[3] * height)

                # Rectangle coordinates
                x = int(center_x - w / 2)
                y = int(center_y - h / 2)

                boxes.append([x, y, w, h])
                confidences.append(float(confidence))
                class_ids.append(class_id)

    # Apply Non-Max Suppression
    indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)

    # Draw bounding boxes and labels on the frame
    for i in range(len(boxes)):
        if i in indexes:
            x, y, w, h = boxes[i]
            label = str(classes[class_ids[i]])
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
            cv2.putText(frame, label, (x, y + 30), cv2.FONT_HERSHEY_PLAIN, 3, (0, 255, 0), 3)

    cv2.imshow("Image", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

第 3 步:執行應用程式

要執行該應用程式,請執行以下腳本:

python object_detection.py

您應該會看到一個顯示網路攝影機來源的窗口,其中偵測到的物件會即時突出顯示。

潛在用例

即時物體偵測具有廣泛的應用,包括:

  • 監控系統:自動偵測安全錄影中的入侵者或異常活動。

  • 自動駕駛車輛:辨識行人、交通標誌和其他車輛以進行導航。

  • 零售分析:分析商店中的顧客行為和流量模式。

  • 擴增實境:透過偵測現實世界的物件並與之互動來增強使用者體驗。

結論

恭喜!您已使用 YOLO 成功建立了即時物件偵測應用程式。這種強大的演算法為各領域的應用開啟了多種可能性。當您進一步探索時,請考慮深入研究更高級的主題,例如針對特定物件偵測任務微調 YOLO 或將此應用程式與其他系統整合。

如果您有興趣從事人工智慧職業,並想了解如何成為一名成功的人工智慧工程師,請查看此成為成功的人工智慧工程師的路線圖,以了解詳細的路線圖。

請隨時在下面的評論中分享您的想法、問題或經驗。快樂編碼!



原文出處:https://dev.to/abhinowww/building-a-real-time-object-detection-application-with-yolo-2b60


共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。

阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!