作為人工智能的一個重要領域,計算機視覺是一門可以識別并理解圖像和場景的計算機及軟件系統科學。該領域主要包括圖像識別,目標檢測,圖像生成,圖像超分辨率等多個方向。由于現實中存在眾多的實際案例,目標檢測應該是計算機視覺中最令人深刻的一個方向。在本教程中,我們將簡要介紹包括當前目標檢測的概念,軟件開發人員所面臨的挑戰,相應的解決方案以及執行高性能目標檢測的編碼教程等內容。
目標檢測是指計算機和軟件系統在圖像/場景中定位并識別出每個目標的能力,已廣泛應用于人臉檢測,車輛檢測,行人計數,網絡圖像,安全系統和無人駕駛汽車等領域。當前有很多目標檢測方法能夠在實踐中應用。像其他任何計算機技術一樣,各種創造性和效果驚人的目標檢測方法都是來自計算機程序員和軟件開發人員的努力。
在應用程序和系統中使用目標檢測方法,并基于這些方法構建新的應用并不是一項直接的任務。在早期,目標檢測的實現包括一些經典算法的使用,如在受歡迎的計算機視覺庫OpenCV中支持的算法。然而,這些經典算法無法在不同條件下達到同等優秀的工作性能。
2012 年之后,深度學習技術的突破性及其快速應用,帶來了諸如 R-CNN,Fast-RCNN,Faster-RCNN,RetinaNet等諸多高精度目標檢測方法,以及以 SSD和YOLO為代表的等快而準的目標檢測算法。想要使用這些基于深度學習的目標檢測方法,我們需要對數學知識及深度學習框架的深刻理解。數百萬的專業計算機程序員和軟件開發人員想要集成和創建用于目標檢測的新產品。但是,理解并在實際中使用目標檢測產品需要額外且復雜的方法,這種技術超出了一般程序員的能力范圍。
在幾個月前,我的團隊就意識到了這個問題,這就是為什么我和John Olafenwa構建ImageAI的原因。這是一個基于 Python程序庫,它允許程序員和軟件開發人員輕松地將最先進的計算機視覺技術集成到他們現有的或新的應用程序中。
想要使用ImageAI實現目標檢測任務,你需要做的就是:
1.在計算機系統上安裝Python
2.安裝ImageAI及其依賴庫
3.下目標象檢測的模型文件
4.運行示例代碼(只有10行)
現在讓我們開始吧~
1)從Python官網上下載并安裝 Python 3:
https://python.org
2)通過 pip 安裝以下依賴庫:
Ⅰ. Tensorflow:pipinstall tensorflow
II. NumPy:pip install numpy
III. SciPy:pipinstall scipy
IV. OpenCV:pipinstall opencv-python
Ⅴ. Pillow:pip install pillow
Ⅵ. Matplotlib:pipinstall matplotlib
Ⅶ. H5py:pipinstall h5py
Ⅷ. Keras:pip install keras
Ⅸ. ImageAI:pipinstall
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
fromimageai.DetectionimportObjectDetectionimportosexecution_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"))foreachObjectindetections:print(eachObject["name"]+":"+eachObject["percentage_probability"])
然后運行代碼,稍等片刻結果將顯示在控制臺中。一旦控制臺打印出結果后,轉到FirstDetection.py所在的文件夾,你將找到所保存的新圖像。如下是兩個原圖像樣本,檢測后將保存新圖像。
Before Detection:
Image Credit: alzheimers.co.uk
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
控制臺打印的檢測結果:
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 行代碼是如何工作的。
fromimageai.DetectionimportObjectDetectionimportosexecution_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模型的路徑,第四行將模型加載到的目標檢測類,第五行調用目標檢測函數,解析輸入的和輸出的圖像路徑。
foreachObjectindetections: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)
下面我們來看看在第一張圖像上取得的目標檢測結果:
所有包含行人的圖像都能被提取出來了,我沒有保存所有的目標,因為它們會占用太多不必要的空間。
ImageAI還提供了更多功能,可用于定制和生產功能部署所需的目標檢測任務。一些支持的功能如下:
Adjusting Minimum Probability:默認情況下,檢測概率低于 50% 的對象將不會顯示或報告。你可以增加高確定性目標的檢測概率,或者在需要檢測所有可能對象的情況下降低該概率值。
Custom Objects Detection:使用所提供的CustomObject類,如此檢測類函數將打印出一個或幾個唯一目標的檢測結果。
Detection Speed:通過將檢測速度設置為“fast”、“faster”和“fastest”,以便縮短目標檢測所需的時間。
Input Types:你可以指定并解析圖像的文件路徑,Numpy數組或圖像文件流作為輸入圖像
Output Types:你可以指定detectObjectsFromImage函數所返回的圖像格式,可以是以文件或Numpy數組的形式。
-
人工智能
+關注
關注
1796文章
47678瀏覽量
240297 -
計算機視覺
+關注
關注
8文章
1700瀏覽量
46128
原文標題:10行代碼實現目標檢測,請收下這份教程
文章出處:【微信號:AI_Thinker,微信公眾號:人工智能頭條】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論