10行代碼實現目標檢測

做爲人工智能的一個重要領域,計算機視覺是一門能夠識別並理解圖像和場景的計算機及軟件系統科學。該領域主要包括圖像識別,目標檢測,圖像生成,圖像超分辨率等多個方向。因爲現實中存在衆多的實際案例,目標檢測應該是計算機視覺中最使人深入的一個方向。在本教程中,咱們將簡要介紹包括當前目標檢測的概念,軟件開發人員所面臨的挑戰,相應的解決方案以及執行高性能目標檢測的編碼教程等內容。python

目標檢測是指計算機和軟件系統在圖像/場景中定位並識別出每一個目標的能力,已普遍應用於人臉檢測,車輛檢測,行人計數,網絡圖像,安全系統和無人駕駛汽車等領域。當前有不少目標檢測方法可以在實踐中應用。像其餘任何計算機技術同樣,各類創造性和效果驚人的目標檢測方法都是來自計算機程序員和軟件開發人員的努力。git

在應用程序和系統中使用目標檢測方法,並基於這些方法構建新的應用並非一項直接的任務。在早期,目標檢測的實現包括一些經典算法的使用,如在受歡迎的計算機視覺庫 OpenCV 中支持的算法。然而,這些經典算法沒法在不一樣條件下達到同等優秀的工做性能。程序員

2012 年以後,深度學習技術的突破性及其快速應用,帶來了諸如 R-CNN,Fast-RCNN,Faster-RCNN,RetinaNet 等諸多高精度目標檢測方法,以及以 SSD 和 YOLO 爲表明的等快而準的目標檢測算法。想要使用這些基於深度學習的目標檢測方法,咱們須要對數學知識及深度學習框架的深入理解。數百萬的專業計算機程序員和軟件開發人員想要集成和建立用於目標檢測的新產品。可是,理解並在實際中使用目標檢測產品須要額外且複雜的方法,這種技術超出了通常程序員的能力範圍。github

在幾個月前,個人團隊就意識到了這個問題,這就是爲何我和 John Olafenwa構建 ImageAI 的緣由。這是一個基於 Python 程序庫,它容許程序員和軟件開發人員輕鬆地將最早進的計算機視覺技術集成到他們現有的或新的應用程序中。算法

想要使用 ImageAI 實現目標檢測任務,你須要作的就是:數組

1. 在計算機系統上安裝 Python安全

2. 安裝 ImageAI 及其依賴庫網絡

3. 下載目標檢測的模型文件框架

4. 運行示例代碼 (只有 10 行)函數

如今讓咱們開始吧~

1) 從 Python 官網上下載並安裝 Python 3:

https://python.org

2) 經過 pip 安裝如下依賴庫:

Ⅰ. Tensorflow:pip install tensorflow

II. NumPy:pip install numpy

III. SciPy:pip install scipy

IV. OpenCV:pip install opencv-python

Ⅴ. Pillow:pip install pillow

Ⅵ. Matplotlib: pip install matplotlib

Ⅶ. H5py:pip install h5py

Ⅷ. Keras:pip install keras

Ⅸ. ImageAI:pip install

https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl

3) 經過此連接下載用於目標檢測的 RetinaNet 模型文件。

https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5

如今,你已經安裝了須要的依賴庫。接下來,你就能夠編寫第一段目標檢測代碼了。建立一個 Python 文件併爲其命名 (例如,FirstDetection.py),而後寫入下面的 10 行代碼,並將 RetinaNet 模型文件和須要檢測的圖像複製到包含這個 python 文件的文件夾中。

FirstDetection.py

from imageai.Detection import ObjectDetection

import os

execution_path = os.getcwd

detector = ObjectDetection

detector.setModelTypeAsRetinaNet

detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))

detector.loadModel

detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))

for eachObject in detections:

print(eachObject["name"] + " : " + eachObject["percentage_probability"] )

而後運行代碼,稍等片刻結果將顯示在控制檯中。一旦控制檯打印出結果後,轉到 FirstDetection.py 所在的文件夾,你將找到所保存的新圖像。以下是兩個原圖像樣本,檢測後將保存新圖像。

Before Detection:

10行代碼實現目標檢測,請收下這份教程

Image Credit: alzheimers.co.uk

10行代碼實現目標檢測,請收下這份教程

Image Credit: Wikicommons

After Detection:

控制檯打印的檢測結果:

person : 55.8402955532074

person : 53.21805477142334

person : 69.25139427185059

person : 76.41745209693909

bicycle : 80.30363917350769

person : 83.58567953109741

person : 89.06581997871399

truck : 63.10953497886658

person : 69.82483863830566

person : 77.11606621742249

bus : 98.00949096679688

truck : 84.02870297431946

car : 71.98476791381836

10行代碼實現目標檢測,請收下這份教程

控制檯打印的檢測結果:

person : 71.10445499420166

person : 59.28672552108765

person : 59.61582064628601

person : 75.86382627487183

motorcycle : 60.1050078868866

bus : 99.39600229263306

car : 74.05484318733215

person : 67.31776595115662

person : 63.53200078010559

person : 78.2265305519104

person : 62.880998849868774

person : 72.93365597724915

person : 60.01397967338562

person : 81.05944991111755

motorcycle : 50.591760873794556

motorcycle : 58.719027042388916

person : 71.69321775436401

bicycle : 91.86570048332214

motorcycle : 85.38855314254761

如今,咱們來解釋下這 10 行代碼是如何工做的。

from imageai.Detection import ObjectDetection

import os

execution_path = os.getcwd

在上面 3 行代碼種,第一行咱們導入了 ImageAI 目標檢測類,第二行導入了 python 的 os 類,第三行定義了一個變量用來保存咱們的 python 文件,其中 RetinaNet 模型文件和圖像都將存放在該文件夾路徑下。

detector = ObjectDetection

detector.setModelTypeAsRetinaNet

detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))

detector.loadModel

detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))

在上面的 5 行代碼中,第一行定義了目標檢測類,第二行將模型的類型設置爲 RetinaNet,並在第三行將模型路徑設置爲 RetinaNet 模型的路徑,第四行將模型加載到的目標檢測類,第五行調用目標檢測函數,解析輸入的和輸出的圖像路徑。

for eachObject in detections:

print(eachObject["name"] + " : " + eachObject["percentage_probability"] )

在上面的2行代碼中,第一行迭代執行 detector.detectObjectsFromImage 函數並返回全部的結果,而後在第二行打印出所檢測到的每一個目標的名稱及其機率值。

ImageAI 支持許多強大的目標檢測過程。其中之一就是可以提取圖像中檢測到的每一個目標。以下所示,經過簡單地解析將 extra_detected_objects = True 變爲 detectObjectsFromImage 函數,目標檢測類將爲圖像目標建立一個新的文件夾,提取每張圖像,並將每張圖像保存到新建立的文件夾中,同時返回一個包含每張圖像路徑的額外數組。

detections, extracted_images = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"), extract_detected_objects=True)

下面咱們來看看在第一張圖像上取得的目標檢測結果:

10行代碼實現目標檢測,請收下這份教程

全部包含行人的圖像都能被提取出來了,我沒有保存全部的目標,由於它們會佔用太多沒必要要的空間。

ImageAI 還提供了更多功能,可用於定製和生產功能部署所需的目標檢測任務。一些支持的功能以下:

  • Adjusting Minimum Probability:默認狀況下,檢測機率低於 50% 的對象將不會顯示或報告。你能夠增長高肯定性目標的檢測機率,或者在須要檢測全部可能對象的狀況降低低該機率值。

  • Custom Objects Detection:使用所提供的 CustomObject 類,如此檢測類函數將打印出一個或幾個惟一目標的檢測結果。

  • Detection Speed:經過將檢測速度設置爲「fast」、「faster」和「fastest」,以便縮短目標檢測所需的時間。

  • Input Types:你能夠指定並解析圖像的文件路徑,Numpy 數組或圖像文件流做爲輸入圖像

  • Output Types:你能夠指定 detectObjectsFromImage 函數所返回的圖像格式,能夠是以文件或 Numpy 數組的形式。

最後,送上 GitHub 地址:

https://github.com/OlafenwaMoses/ImageAI

原文連接:

https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606

相關文章
相關標籤/搜索