如何用10行代碼完成目標檢測
導語
人工智能的一個重要領域是計算機視覺。計算機視覺是計算機和軟件系統能夠識別和理解圖像和場景的科學。計算機視覺還包括圖像識別、目標檢測、圖像生成、圖像超分辨率等多個方面。由于大量的實際用例,對象檢測可能是計算機視覺最深刻的方面。
目標檢測是指計算機和軟件系統在圖像/場景中定位目標并識別每個目標的能力。目標檢測已經廣泛應用于人臉檢測、車輛檢測、行人計數、網絡圖像、安全系統和無人駕駛汽車。在許多領域的實踐中,對象檢測也有許多方法可以使用。像其他的計算機技術一樣,對象檢測的廣泛的創造性和驚人的用途肯定會來自計算機程序員和軟件開發人員的努力。
這次要介紹的一個叫做ImageAI的項目,它一個python庫,讓程序員和軟件開發人員只需幾行代碼就可以輕松地將最先進的計算機視覺技術集成到他們現有的和新的應用程序中。
ImageAI安裝工作
要使用ImageAI執行對象檢測,您需要做的就是:
- 在計算機系統上安裝Python
- 安裝ImageAI及其依賴項
- 下載對象檢測模型文件
- 運行示例代碼(只有10行)
那么我們現在開始:
- 從官方Python語言網站下載并安裝Python 3。
- 通過pip安裝:TensorFlow,OpenCV, Keras, ImageAI
- pip3 install tensorflow
- pip3 install opencv-python
- pip3 install keras
- pip3 install imageai --upgrade
3)通過此文章中的鏈接下載用于對象檢測的RetinaNet模型文件:
https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606
運行程序
太好了。我們現在已經安裝了依賴項,可以編寫第一個對象檢測代碼了。創建一個Python文件并給它起一個名字(例如,FirstDetection.py),然后將下面的代碼寫進去。將要檢測的RetinaNet模型文件圖像復制到包含python文件的文件夾中。
- 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"] )
需要注意的是,如果你在運行遇到這個錯誤:
- ValueError: Unable to import backend : theano python mymodel.py
那么你可以嘗試:
- import osos.environ['KERAS_BACKEND'] = 'tensorflow'from
- imageai.Detection import ObjectDetection
然后運行代碼并等待結果打印在控制臺中。一旦結果打印到控制臺中,轉到您的FirstDetection.py所在的文件夾,您將發現保存了一個新圖像。看看下面的兩個圖像樣本和檢測后保存的新圖像。
檢測前:
檢測后:

數據結果
我們可以看到程序會打印輸出一些各個物體的概率數據:
- 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行代碼是如何工作的。
- from imageai.Detection import ObjectDetectionimport osexecution_path
- = os.getcwd()
在上面的3行代碼中,我們在第一行導入了ImageAI對象檢測類,在第二行導入了python os類,并定義了一個變量來保存python文件、RetinaNet模型文件和圖像所在的文件夾的路徑。
- detector = ObjectDetection()detector.setModelTypeAsRetinaNet()detector.setModelP
- ath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))detector.loadModel()detections =
- detector.detectObjectsFromImage(input_image=os.path.join(execution_pa
- th , "image.jpg"), output_image_path=os.path.join(execution_path ,
- "imagenew.jpg"))
在上面的代碼中,我們定義對象檢測類在第一線,將模型類型設置為RetinaNet在第二行,設置模型路徑的路徑在第三行RetinaNet模型,該模型加載到對象檢測類在第四行,然后我們稱為檢測函數,解析輸入圖像的路徑和輸出圖像路徑在第五行。
- for eachObject in detections: print(eachObject["name"] , " : "
- , eachObject["percentage_probability"] )
在上面的代碼中,我們在第一行迭代了detector.detectObjectsFromImage函數返回的所有結果,然后在第二行打印出圖像中檢測到的每個對象的模型名稱和百分比概率。