物體識別是屬於計算機視覺更廣泛領域的一項技術。這項技術能夠識別圖像和視頻中存在的物體,並對其進行跟蹤。物體識別又稱物體檢測,有多種應用,如人臉識別、車輛識別、行人計數、自動駕駛車輛、安全系統等等。
物體識別的兩個重要目標包括:
- 圖像中存在的所有對象的識別
- 尋求關注的對象的過濾
在下面的教程中,我們將了解如何使用 ImageAI 庫在 Python 編程語言中執行對象識別。在本教程結束之前,我們將使用 Python 中的 ImageAI 庫創建一個基本的對象識別模型。
所以,讓我們開始吧。
面向對象識別的深度學習
深度學習技術已經顯示出與對象識別相關的不同問題的技術水平。用於對象識別的深度學習的一些常用方法如下:
- 形象
- 單發探測器
- YOLO(你只看一次)
- 基於區域的卷積神經網路
但是,在本教程中,我們將了解 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 安裝程序安裝以下依賴項:
- OpenCV
- 張量流
- 硬
- 形象
其安裝命令如下所示:
語法:
# 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 庫。為了更好地理解和清晰,執行對象識別的過程分為幾個步驟。
第一步
第一步是創建必要的文件夾。對於本教程,我們需要如下所示的文件夾:
- Object_Recognition: 這將是根文件夾。
- 模型:該文件夾將存儲預先訓練好的模型。
- 輸入:這個文件夾會存儲我們要進行物體檢測的圖像文件。
- 輸出:該文件夾將存儲帶有檢測對象的圖像文件。
一旦我們創建了必要的文件夾,對象識別文件夾應該有以下子文件夾:
? 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 類,我們現在就可以從該類中調用不同的函數。為了調用預先訓練的模型,該類由以下函數組成:
- setModelTypeAsRetinaNet()
- setModelTypeAsYOLOv3()
- 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