只需10行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"] )
沒錯,用這寥寥10行代碼,就能實作目前AI產品中應用廣泛的目標檢測技術,
這里要注意:光理論是不夠的,這里順便總大家一套2020最新python入門到高級專案實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流討教!
看完了代碼,下面容我們聊聊目標檢測背后的技術背景,并解讀這10行Python代碼的由來和實作原理,
目標檢測簡介
人工智能的一個重要領域就是計算機視覺,它是指計算機及軟體系統識別和理解影像與視頻的科學,計算機視覺包含很多細分方向,比如影像識別、目標檢測、影像生成和影像超解析度等,其中目標檢測由于用途廣泛,在計算機視覺領域的意義最為深遠,
目標檢測是指計算機和軟體系統能夠定位出影像/畫面中的物體,并識別出它們,目標檢測技術已經廣泛應用于人臉檢測、車輛檢測、人流量統計、網路影像、安防系統和無人車等領域,和其它計算機視覺技術一樣,目標檢測未來會進一步成為人工智能的重要組成部分,有著廣闊的發展前景,
不過,在軟體應用和系統中使用現代目標檢測方法以及根據這些方法創建應用,并非簡單直接,早期的目標檢測實作主要是應用一些經典演算法,比如OpenCV中支持的演算法,然而這些演算法的表現并不穩定,在不同情況下差異巨大,
2012年深度學習技術的突破性進展,催生了一大批高度精準的目標檢測演算法,比如R-CNN,Fast-RCNN,Faster-RCNN,RetinaNet和既快又準的SSD及YOLO,使用這些基于深度學習的方法和演算法,需要理解大量的數學和深度學習框架,現在全世界有數以百萬計的開發者在借助目標檢測技術創造新產品新專案,但由于理解和使用較為復雜困難,仍有很多人不得要領,
為了解決這個困擾開發者們的問題,計算機視覺專家Moses Olafenwa帶領團隊推出了Python庫ImageAI,能讓開發人員只需寥寥數行代碼就能很容易的將最先進的計算機視覺技術應用到自己的專案和產品中,
我們開頭所示的10行代碼實作,就是要用到ImageAI,
如何借助ImageAI輕松實作目標檢測
使用ImageAI執行目標檢測,你只需以下4步:
1.在電腦上安裝Python
2.安裝ImageAI及其環境依賴
3.下載目標檢測模塊檔案
4.運行示例代碼,就是我們展示的那10行
下面我們一步步詳細講解,
1)從Python官網下載和安裝Python 3
python.org/
2)通過pip安裝如下環境依賴
1.Tensorflow
pip install tensorflow
2.Numpy
pip install numpy
3.SciPy
pip install scipy
4.OpenCV
pip install opencv-python
5.Pillow
pip install pillow
6.Matplotlib
pip install matplotlib
7.H5py
pip install h5py
8.Keras
pip install keras
9.ImageAI
pip install
github.com
3)通過該鏈接下載RetinaNet 模型檔案用于目標檢測,
到了這里我們已經安裝好了所有依賴,就可以準備寫自己的首個目標檢測代碼了, 創建一個Python檔案,為其命名(比如FirstDetection.py),然后將如下代碼寫到檔案中,再把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所在的檔案夾,你就會發現有新的影像保存在了里面,比如下面兩張示例影像,以及執行目標檢測后保存的兩張新影像,
目標檢測之前:
目標檢測之后:
我們可以看到影像上顯示了檢測出的物體名稱及概率,
解讀10行代碼
下面我們解釋一下這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"] )
在上面兩行代碼中,我們迭代了第一行中detector.detectObjectFromImage函式回傳的所有結果,然后列印出第二行中模型對影像上每個物體的檢測結果(名稱和概率),
ImageAI支持很多強大的目標檢測自定義功能,其中一項就是能夠提取在影像上檢測到的每個物體的影像,只需將附加引數extract_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提供了很多功能,能夠用于各類目標檢測任務的自定義和生產部署,包括:
-調整最小概率:默認概率小于50%的物體不會顯示,如有需要,你可以自行調整這個數字,
-自定義目標檢測:使用提供的CustomObject類,你可以檢測一個或多個特定物體,
-調整檢測速度:可以通過將檢測速度設為“快”“更快”“最快”三個不同等級,調整檢測速度,
-輸入輸出型別:你可以自定義影像的路徑,Numpy陣列或影像的檔案流為輸入輸出,
誠然,單看這10行代碼每一行,談不上驚艷,也借助了不少庫,但是僅用10行代碼就能讓我們輕松實作之前很麻煩的目標檢測,還是能談得上“給力”二字,
最后注意:光理論是不夠的,這里順便總大家一套2020最新python入門到高級專案實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流討教!
本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/147662.html
標籤:Python
