Python 對象識別

物體識別是屬於計算機視覺更廣泛領域的一項技術。這項技術能夠識別圖像和視頻中存在的物體,並對其進行跟蹤。物體識別又稱物體檢測,有多種應用,如人臉識別、車輛識別、行人計數、自動駕駛車輛、安全系統等等。

物體識別的兩個重要目標包括:

  1. 圖像中存在的所有對象的識別
  2. 尋求關注的對象的過濾

在下面的教程中,我們將了解如何使用 ImageAI 庫在 Python 編程語言中執行對象識別。在本教程結束之前,我們將使用 Python 中的 ImageAI 庫創建一個基本的對象識別模型。

所以,讓我們開始吧。

面向對象識別的深度學習

深度學習技術已經顯示出與對象識別相關的不同問題的技術水平。用於對象識別的深度學習的一些常用方法如下:

  1. 形象
  2. 單發探測器
  3. YOLO(你只看一次)
  4. 基於區域的卷積神經網路

但是,在本教程中,我們將了解 ImageAI 是什麼,以及如何在執行對象識別時使用它。

了解 imageio 庫

Python 提供了一個庫,該庫旨在讓程序員和開發人員能夠藉助一些簡單的編碼腳本構建具有獨立深度學習和計算機視覺功能的應用和系統。 ImageAI 由幾乎所有最先進的深度學習演算法的 Python 實現組成,如視網膜、YOLOv3 和tinyyov3。

ImageAI 利用了幾個離線工作的 API——它有對象檢測、視頻檢測和對象跟蹤 API,不需要訪問互聯網就可以調用。 ImageAI 採用預先訓練好的模型,可以輕鬆定製。

圖像庫的對象檢測類由方法組成,以便在預訓練模型的幫助下對任何圖像或圖像集執行對象檢測。藉助 ImageAI ,我們可以檢測並識別 80 種不同類型的常見日常物品。

設置環境

在本節教程中,我們將考慮安裝所需的庫,包括 ImageAI 。

為了利用 ImageAI ,我們必須安裝一些依賴項。第一步是在系統上安裝 Python。我們可以從 Python 官網:https://www.python.org/下載安裝 Python 3。

一旦我們在系統上成功安裝了 Python,我們必須藉助 pip 安裝程序安裝以下依賴項:

  1. OpenCV
  2. 張量流
  3. 形象

其安裝命令如下所示:

語法:


# installing OpenCV
$ pip install opencv-python

# installing TensorFlow
$ pip install tensorflow

# installing Keras
$ pip install keras

# installing ImageAI
$ pip install imageAI

現在我們必須下載tinyyyov3模型文件,其中包含我們將用於對象識別的分類方法。

相同的鏈接可以在下面找到:

https://github . com/olafenwamos/imageai/releases/download/1.0/yolo-tiny . H5

使用 imageio 執行對象識別

在本節中,我們將討論如何利用 Python 中的 ImageAI 庫。為了更好地理解和清晰,執行對象識別的過程分為幾個步驟。

第一步

第一步是創建必要的文件夾。對於本教程,我們需要如下所示的文件夾:

  1. Object_Recognition: 這將是根文件夾。
  2. 模型:該文件夾將存儲預先訓練好的模型。
  3. 輸入:這個文件夾會存儲我們要進行物體檢測的圖像文件。
  4. 輸出:該文件夾將存儲帶有檢測對象的圖像文件。

一旦我們創建了必要的文件夾,對象識別文件夾應該有以下子文件夾:


?   Input
?   Models
?   Output
3 directories, 0 files

第二步

對於第二步,我們將打開首選的文本編輯器,在本例中是 Visual Studio Code,以編寫 Python 腳本並創建一個新的文件識別器

第三步

現在,讓我們開始從 ImageAI 庫中導入 ObjectDetection 類。其語法如下所示:

文件:recognizer.py


# importing the required library
from imageai.Detection import ObjectDetection

第四步

現在已經導入了所需的 ImageAI 庫和 ObjectDetection 類,接下來要做的就是創建類 ObjectDetection 的實例。讓我們考慮下面的代碼片段。

文件:識別器. py


# instantiating the class
recognizer = ObjectDetection()

第五步

讓我們使用下面的代碼片段指定模型、輸入圖像和輸出圖像的路徑。

文件:識別器. py


# defining the paths
path_model = "./Models/yolo-tiny.h5"
path_input = "./Input/images.jpg"
path_output = "./Output/newimage.jpg"

第六步

一旦我們實例化了 ObjectDetection 類,我們現在就可以從該類中調用不同的函數。為了調用預先訓練的模型,該類由以下函數組成:

  1. setModelTypeAsRetinaNet()
  2. setModelTypeAsYOLOv3()
  3. setModelTypeAsTinyYOLOv3()

出於本教程的目的,我們將使用預訓練的 TinyYOLOv3 模型,因此,我們將使用setmodeltypastayyolov3()函數來載入模型。

讓我們考慮下面的代碼片段:

文件:識別器. py


# using the setModelTypeAsTinyYOLOv3() function
recognizer.setModelTypeAsTinyYOLOv3()

第七步

現在,我們將調用函數 setModelPath() 。該函數將接受一個字元串,該字元串包含預訓練模型的路徑。

讓我們考慮下面的代碼片段:

文件:識別器. py


# setting the path to the pre-trained Model
recognizer.setModelPath(path_model)

第八步

在這一步中,我們將從識別器實例中調用 loadModel() 函數。該函數將在 setModelPath() 類方法的幫助下,從上面指定的路徑載入模型。

讓我們考慮下面的代碼片段。

文件:識別器. py


# loading the model
recognizer.loadModel()

第九步

我們必須在前面創建的識別器對象的幫助下調用detectobjectsfroimage()函數。

該功能接受兩個參數:輸入 _ 圖像和輸出 圖像 路徑。輸入 _ 圖像參數是我們識別的圖像所處的路徑,而輸出 圖像 路徑參數是存儲帶有檢測對象的圖像的路徑。這個函數將返回包含圖像中檢測到的每個對象的名稱和百分比概率的措辭。

其語法如下所示:

文件:識別器. py


# calling the detectObjectsFromImage() function
recognition = recognizer.detectObjectsFromImage(
    input_image = path_input,
    output_image_path = path_output
    )

步驟 10

最後,我們可以通過遍歷字典中的每個元素來訪問字典元素。

其語法如下所示:

文件:識別器. py


# iterating through the items found in the image
for eachItem in recognition:
    print(eachItem["name"] , " : ", eachItem["percentage_probability"])

對象識別模型的完整 Python 腳本

讓我們考慮下面的對象識別模型腳本。

文件:識別器. py


# importing the required library
from imageai.Detection import ObjectDetection

# instantiating the class
recognizer = ObjectDetection()

# defining the paths
path_model = "./Models/yolo-tiny.h5"
path_input = "./Input/images.jpg"
path_output = "./Output/newimage.jpg"

# using the setModelTypeAsTinyYOLOv3() function
recognizer.setModelTypeAsTinyYOLOv3()
# setting the path of the Model
recognizer.setModelPath(path_model)
# loading the model
recognizer.loadModel()
# calling the detectObjectsFromImage() function
recognition = recognizer.detectObjectsFromImage(
    input_image = path_input,
    output_image_path = path_output
    )

# iterating through the items found in the image
for eachItem in recognition:
    print(eachItem["name"] , " : ", eachItem["percentage_probability"])

輸出:

car  :  88.85036110877991
car  :  85.83406209945679
bus  :  70.04978060722351
car  :  80.88288903236389
car  :  55.334705114364624
person  :  61.084866523742676
car  :  68.46083402633667
person  :  56.165677309036255
person  :  71.58655524253845
car  :  59.49597954750061
person  :  55.276620388031006
person  :  69.08922791481018
person  :  59.92640256881714
car  :  82.73208141326904
person  :  54.69227433204651
person  :  67.25137233734131
car  :  68.9003050327301
person  :  77.32996344566345
person  :  53.02640199661255
person  :  81.33729696273804
person  :  83.60849618911743
person  :  50.34937262535095

實際圖像:

物體識別後的圖像:

最後,我們可以觀察到 ImageAI 已經成功地識別了圖像中的汽車和人。


原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/307038.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-02 18:06
下一篇 2025-01-02 18:06

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論