」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Python 物件偵測初學者指南

Python 物件偵測初學者指南

發佈於2024-11-02
瀏覽:836

A Beginner’s Guide to Object Detection in Python

目標偵測是電腦視覺中最令人興奮的領域之一,它允許機器識別和定位影像或影片中的目標。本指南將向您介紹使用 Python 進行物件檢測,幫助您使用流行的程式庫實現基本的檢測管道。無論您是初學者還是想要增強現有技能,本教程都將提供入門所需的基本見解。


什麼是物體檢測? ?

物件偵測涉及兩個主要任務:

  1. 影像分類:確定影像中存在哪個物件。
  2. 物件定位:使用邊界框找出物件的位置。

這使得它比簡單的圖像分類更複雜,其中模型僅預測類別標籤。物件偵測需要預測影像中物件的類別和位置。


流行的物體偵測演算法?

1. YOLO(你只看一次)

  • YOLO 以其速度而聞名,是一種即時目標檢測系統,可同時預測邊界框和類別機率。

2.SSD(單次多盒子探測器)

  • SSD 單次偵測物體,擅長使用特徵圖偵測不同尺度的物體。

3.更快的R-CNN

  • 一個兩階段模型,首先產生區域提案,然後將它們分類。它比 YOLO 和 SSD 更準確,但速度較慢。

設定你的 Python 環境? ️

要開始在 Python 中進行物件檢測,您需要一些函式庫。

第1步:安裝Python

前往 python.org 並下載最新版本的 Python (3.8 )。

第 2 步:安裝所需的庫

我們將使用OpenCV進行影像處理,使用TensorFlow進行物件偵測。

pip install opencv-python tensorflow

(選購)安裝Matplotlib以視覺化檢測結果。

pip install matplotlib

用於目標偵測的預訓練模型?

不用從頭開始訓練,而是使用 TensorFlow 的物件偵測 APIPyTorch 中的預訓練模型。預訓練模型透過利用 COCO(上下文中的通用物件)等資料集來節省資源。

在本教程中,我們將使用 TensorFlow 的 ssd_mobilenet_v2,這是一種快速且準確的預訓練模型。


使用 TensorFlow 和 OpenCV 進行物體偵測 ?‍?

以下是如何實現簡單的物件偵測管道。

第 1 步:載入預訓練模型

import tensorflow as tf

# Load the pre-trained model
model = tf.saved_model.load("ssd_mobilenet_v2_fpnlite_320x320/saved_model")

您可以從 TensorFlow 的模型動物園下載模型。

第 2 步:載入並處理圖像

import cv2
import numpy as np

# Load an image using OpenCV
image_path = 'image.jpg'
image = cv2.imread(image_path)

# Convert the image to a tensor
input_tensor = tf.convert_to_tensor(image)
input_tensor = input_tensor[tf.newaxis, ...]

第 3 步:執行物體偵測

# Run inference on the image
detections = model(input_tensor)

# Extract relevant information like bounding boxes, classes, and scores
num_detections = int(detections.pop('num_detections'))
detections = {key: value[0, :num_detections].numpy() for key, value in detections.items()}
boxes = detections['detection_boxes']
scores = detections['detection_scores']
classes = detections['detection_classes'].astype(np.int64)

第 4 步:可視化結果

# Draw bounding boxes on the image
for i in range(num_detections):
    if scores[i] > 0.5:  # Confidence threshold
        box = boxes[i]
        h, w, _ = image.shape
        y_min, x_min, y_max, x_max = box

        start_point = (int(x_min * w), int(y_min * h))
        end_point = (int(x_max * w), int(y_max * h))

        # Draw rectangle
        cv2.rectangle(image, start_point, end_point, (0, 255, 0), 2)

# Display the image
cv2.imshow("Detections", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

此程式碼載入映像、偵測物件並使用邊界框將它們視覺化。置信度閾值設定為 50%,過濾掉低置信度檢測。


高級主題 ?

準備好將您的物件偵測技能提升到新的水平了嗎?

  • 自訂物件偵測:使用 TensorFlow 或 PyTorch 在您自己的資料集上訓練自訂模型。
  • 即時偵測:在即時視訊串流上應用物件偵測,用於安全或自動駕駛等應用。
  • 邊緣設備部署:優化行動與物聯網設備的物件偵測模型。

結論 ?

Python 中的物件偵測為醫療保健、安全和自動駕駛等行業開闢了一個充滿可能性的世界。透過 TensorFlow 和 OpenCV 等工具,您可以使用 YOLO 或 SSD 等預訓練模型快速實現檢測管道。熟悉基礎知識後,您可以探索更進階的主題,例如即時偵測和自訂模型訓練。

接下來您將在哪裡應用物件偵測?下面評論區一起討論吧!


關鍵字:目標偵測、Python、電腦視覺、OpenCV、TensorFlow、YOLO、SSD、Faster R-CNN

版本聲明 本文轉載於:https://dev.to/abhinowww/a-beginners-guide-to-object-detection-in-python-5ahp?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • PHP刷新後為什麼會丟失會話數據?
    PHP刷新後為什麼會丟失會話數據?
    故障排除PHP會話數據損失 在這種特定情況下,用戶遇到了一個特殊情況,在這些情況下,在頁面刷新後未保留會話數據。 Investigation revealed no apparent changes to the PHP scripts.To determine the root cause, t...
    程式設計 發佈於2025-04-20
  • 使用SQL Server中的NOLOCK提升性能嗎?
    使用SQL Server中的NOLOCK提升性能嗎?
    SQL Server 中的 NOLOCK:性能提升與風險並存 SQL Server 的事務隔離級別確保並發事務的數據修改對彼此不可見。然而,這種安全機制可能會導致爭用和性能瓶頸。為了緩解這些問題,開發人員經常求助於在 SQL 語句中使用 NOLOCK 提示。 雖然使用 NOLOCK 可以消除表鎖...
    程式設計 發佈於2025-04-20
  • 如何使用FormData()處理多個文件上傳?
    如何使用FormData()處理多個文件上傳?
    )處理多個文件輸入時,通常需要處理多個文件上傳時,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    程式設計 發佈於2025-04-20
  • 如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    從python import codecs import codecs import codecs 導入 text = codecs.decode('這狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#帶有...
    程式設計 發佈於2025-04-20
  • 如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    將pandas dataframe列轉換為dateTime格式示例:使用column(mycol)包含以下格式的以下dataframe,以自定義格式:})指定的格式參數匹配給定的字符串格式。轉換後,MyCol列現在將包含DateTime對象。 date date filtering > = ...
    程式設計 發佈於2025-04-20
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-04-20
  • 在精靈組中檢測點擊對象並解決“AttributeError: Group has no attribute rect”錯誤
    在精靈組中檢測點擊對象並解決“AttributeError: Group has no attribute rect”錯誤
    在sprite組中檢測單擊對象在PyGame應用程序中使用Sprites時,必須檢測用戶何時單擊特定的精靈。本文討論了在Sprite組中檢測單擊的問題,特別是突出顯示“ attributeError:組沒有屬性rect”錯誤。 挑戰的目標是確定用戶何時在特定組屬於名為guess的特定組屬於spri...
    程式設計 發佈於2025-04-20
  • 編譯器報錯“usr/bin/ld: cannot find -l”解決方法
    編譯器報錯“usr/bin/ld: cannot find -l”解決方法
    錯誤:“ usr/bin/ld:找不到-l “ 此錯誤表明鏈接器在鏈接您的可執行文件時無法找到指定的庫。為了解決此問題,我們將深入研究如何指定庫路徑並將鏈接引導到正確位置的詳細信息。 添加庫搜索路徑的一個可能的原因是,此錯誤是您的makefile中缺少庫搜索路徑。要解決它,您可以在鏈接器命令中添...
    程式設計 發佈於2025-04-20
  • Python多進程池中如何處理鍵盤中斷?
    Python多進程池中如何處理鍵盤中斷?
    與python 處理鍵盤板的處理對於有效地管理並行過程至關重要。多處理庫提供了一種創建可以同時執行任務的工作過程池的方法。但是,當執行這些過程期間啟動鍵盤間斷時,就會出現問題。 問題:塊很大很高。但是,除了塊外,相應的代碼永遠不會執行,而將程序掛起。 嘗試: 結果= pool..map(慢...
    程式設計 發佈於2025-04-20
  • 如何垂直對齊Inline-Block列?
    如何垂直對齊Inline-Block列?
    inline-block列的垂直對齊 使用display:inline-block to創建列,很明顯,當內容被添加到第一列中時,後續列會在後續列降低。可以通過利用垂直空電CSS屬性來解決這。 避免了此問題,請添加垂直align:top;向CSS聲明容器。這樣可以確保所有列在頂部垂直對齊,而不論...
    程式設計 發佈於2025-04-20
  • 大批
    大批
    [2 數組是對象,因此它們在JS中也具有方法。 切片(開始):在新數組中提取部分數組,而無需突變原始數組。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    程式設計 發佈於2025-04-20
  • 使用jQuery如何有效修改":after"偽元素的CSS屬性?
    使用jQuery如何有效修改":after"偽元素的CSS屬性?
    在jquery中了解偽元素的限制:訪問“ selector 嘗試修改“:”選擇器的CSS屬性時,您可能會遇到困難。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    程式設計 發佈於2025-04-20
  • 將圖片浮動到底部右側並環繞文字的技巧
    將圖片浮動到底部右側並環繞文字的技巧
    在Web設計中圍繞在Web設計中,有時可以將圖像浮動到頁面右下角,從而使文本圍繞它纏繞。這可以在有效地展示圖像的同時創建一個吸引人的視覺效果。 css位置在右下角,使用css float and clear properties: img { 浮點:對; ...
    程式設計 發佈於2025-04-20
  • `console.log`顯示修改後對象值異常的原因
    `console.log`顯示修改後對象值異常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    程式設計 發佈於2025-04-20
  • 哪種在JavaScript中聲明多個變量的方法更可維護?
    哪種在JavaScript中聲明多個變量的方法更可維護?
    在JavaScript中聲明多個變量:探索兩個方法在JavaScript中,開發人員經常遇到需要聲明多個變量的需要。對此的兩種常見方法是:在單獨的行上聲明每個變量: 當涉及性能時,這兩種方法本質上都是等效的。但是,可維護性可能會有所不同。 第一個方法被認為更易於維護。每個聲明都是其自己的語句,使...
    程式設計 發佈於2025-04-20

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3