作為人工智能的一個(gè)重要領(lǐng)域,計(jì)算機(jī)視覺是一門可以識(shí)別并理解圖像和場景的計(jì)算機(jī)及軟件系統(tǒng)科學(xué)。該領(lǐng)域主要包括圖像識(shí)別,目標(biāo)檢測,圖像生成,圖像超分辨率等多個(gè)方向。由于現(xiàn)實(shí)中存在眾多的實(shí)際案例,目標(biāo)檢測應(yīng)該是計(jì)算機(jī)視覺中最令人深刻的一個(gè)方向。在本教程中,我們將簡要介紹包括當(dāng)前目標(biāo)檢測的概念,軟件開發(fā)人員所面臨的挑戰(zhàn),相應(yīng)的解決方案以及執(zhí)行高性能目標(biāo)檢測的編碼教程等內(nèi)容。
目標(biāo)檢測是指計(jì)算機(jī)和軟件系統(tǒng)在圖像/場景中定位并識(shí)別出每個(gè)目標(biāo)的能力,已廣泛應(yīng)用于人臉檢測,車輛檢測,行人計(jì)數(shù),網(wǎng)絡(luò)圖像,安全系統(tǒng)和無人駕駛汽車等領(lǐng)域。當(dāng)前有很多目標(biāo)檢測方法能夠在實(shí)踐中應(yīng)用。像其他任何計(jì)算機(jī)技術(shù)一樣,各種創(chuàng)造性和效果驚人的目標(biāo)檢測方法都是來自計(jì)算機(jī)程序員和軟件開發(fā)人員的努力。
在應(yīng)用程序和系統(tǒng)中使用目標(biāo)檢測方法,并基于這些方法構(gòu)建新的應(yīng)用并不是一項(xiàng)直接的任務(wù)。在早期,目標(biāo)檢測的實(shí)現(xiàn)包括一些經(jīng)典算法的使用,如在受歡迎的計(jì)算機(jī)視覺庫OpenCV中支持的算法。然而,這些經(jīng)典算法無法在不同條件下達(dá)到同等優(yōu)秀的工作性能。
2012 年之后,深度學(xué)習(xí)技術(shù)的突破性及其快速應(yīng)用,帶來了諸如 R-CNN,F(xiàn)ast-RCNN,F(xiàn)aster-RCNN,RetinaNet等諸多高精度目標(biāo)檢測方法,以及以 SSD和YOLO為代表的等快而準(zhǔn)的目標(biāo)檢測算法。想要使用這些基于深度學(xué)習(xí)的目標(biāo)檢測方法,我們需要對(duì)數(shù)學(xué)知識(shí)及深度學(xué)習(xí)框架的深刻理解。數(shù)百萬的專業(yè)計(jì)算機(jī)程序員和軟件開發(fā)人員想要集成和創(chuàng)建用于目標(biāo)檢測的新產(chǎn)品。但是,理解并在實(shí)際中使用目標(biāo)檢測產(chǎn)品需要額外且復(fù)雜的方法,這種技術(shù)超出了一般程序員的能力范圍。
在幾個(gè)月前,我的團(tuán)隊(duì)就意識(shí)到了這個(gè)問題,這就是為什么我和John Olafenwa構(gòu)建ImageAI的原因。這是一個(gè)基于 Python程序庫,它允許程序員和軟件開發(fā)人員輕松地將最先進(jìn)的計(jì)算機(jī)視覺技術(shù)集成到他們現(xiàn)有的或新的應(yīng)用程序中。
想要使用ImageAI實(shí)現(xiàn)目標(biāo)檢測任務(wù),你需要做的就是:
1.在計(jì)算機(jī)系統(tǒng)上安裝Python
2.安裝ImageAI及其依賴庫
3.下目標(biāo)象檢測的模型文件
4.運(yùn)行示例代碼(只有10行)
現(xiàn)在讓我們開始吧~
1)從Python官網(wǎng)上下載并安裝 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)通過此鏈接下載用于目標(biāo)檢測的RetinaNet模型文件。
https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5
現(xiàn)在,你已經(jīng)安裝了需要的依賴庫。接下來,你就可以編寫第一段目標(biāo)檢測代碼了。創(chuàng)建一個(gè)Python文件并為其命名(例如,F(xiàn)irstDetection.py),然后寫入下面的 10 行代碼,并將RetinaNet模型文件和需要檢測的圖像復(fù)制到包含這個(gè) 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"])
然后運(yùn)行代碼,稍等片刻結(jié)果將顯示在控制臺(tái)中。一旦控制臺(tái)打印出結(jié)果后,轉(zhuǎn)到FirstDetection.py所在的文件夾,你將找到所保存的新圖像。如下是兩個(gè)原圖像樣本,檢測后將保存新圖像。
Before Detection:
Image Credit: alzheimers.co.uk
Image Credit: Wikicommons
After Detection:
控制臺(tái)打印的檢測結(jié)果:
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
控制臺(tái)打印的檢測結(jié)果:
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
現(xiàn)在,我們來解釋下這 10 行代碼是如何工作的。
fromimageai.DetectionimportObjectDetectionimportosexecution_path=os.getcwd()
在上面 3 行代碼種,第一行我們導(dǎo)入了ImageAI目標(biāo)檢測類,第二行導(dǎo)入了 python 的 os 類,第三行定義了一個(gè)變量用來保存我們的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 行代碼中,第一行定義了目標(biāo)檢測類,第二行將模型的類型設(shè)置為RetinaNet,并在第三行將模型路徑設(shè)置為RetinaNet模型的路徑,第四行將模型加載到的目標(biāo)檢測類,第五行調(diào)用目標(biāo)檢測函數(shù),解析輸入的和輸出的圖像路徑。
foreachObjectindetections:print(eachObject["name"]+":"+eachObject["percentage_probability"])
在上面的2行代碼中,第一行迭代執(zhí)行 detector.detectObjectsFromImage函數(shù)并返回所有的結(jié)果,然后在第二行打印出所檢測到的每個(gè)目標(biāo)的名稱及其概率值。
ImageAI支持許多強(qiáng)大的目標(biāo)檢測過程。其中之一就是能夠提取圖像中檢測到的每個(gè)目標(biāo)。如下所示,通過簡單地解析將extra_detected_objects = True變?yōu)?detectObjectsFromImage函數(shù),目標(biāo)檢測類將為圖像目標(biāo)創(chuàng)建一個(gè)新的文件夾,提取每張圖像,并將每張圖像保存到新創(chuàng)建的文件夾中,同時(shí)返回一個(gè)包含每張圖像路徑的額外數(shù)組。
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)
下面我們來看看在第一張圖像上取得的目標(biāo)檢測結(jié)果:
所有包含行人的圖像都能被提取出來了,我沒有保存所有的目標(biāo),因?yàn)樗鼈儠?huì)占用太多不必要的空間。
ImageAI還提供了更多功能,可用于定制和生產(chǎn)功能部署所需的目標(biāo)檢測任務(wù)。一些支持的功能如下:
Adjusting Minimum Probability:默認(rèn)情況下,檢測概率低于 50% 的對(duì)象將不會(huì)顯示或報(bào)告。你可以增加高確定性目標(biāo)的檢測概率,或者在需要檢測所有可能對(duì)象的情況下降低該概率值。
Custom Objects Detection:使用所提供的CustomObject類,如此檢測類函數(shù)將打印出一個(gè)或幾個(gè)唯一目標(biāo)的檢測結(jié)果。
Detection Speed:通過將檢測速度設(shè)置為“fast”、“faster”和“fastest”,以便縮短目標(biāo)檢測所需的時(shí)間。
Input Types:你可以指定并解析圖像的文件路徑,Numpy數(shù)組或圖像文件流作為輸入圖像
Output Types:你可以指定detectObjectsFromImage函數(shù)所返回的圖像格式,可以是以文件或Numpy數(shù)組的形式。
-
人工智能
+關(guān)注
關(guān)注
1792文章
47442瀏覽量
239020 -
計(jì)算機(jī)視覺
+關(guān)注
關(guān)注
8文章
1698瀏覽量
46033
原文標(biāo)題:10行代碼實(shí)現(xiàn)目標(biāo)檢測,請收下這份教程
文章出處:【微信號(hào):AI_Thinker,微信公眾號(hào):人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論