python運動目標檢測_十行程式碼搞定目標檢測
技術標籤:python運動目標檢測resnet50程式碼顯著性目標檢測matlab程式碼
大資料文摘出品
編譯:邢暢、寧靜
計算機視覺是人工智慧的一個重要領域,是關於計算機和軟體系統的科學,可以對影象和場景進行識別、理解。計算機視覺還包括影象識別、目標檢測、影象生成、影象超解析度重建等多個領域。由於存在大量的實際需求,目標檢測可能是計算機視覺中最有意義的領域。
目標檢測是指計算機和軟體系統對影象或場景中的目標進行定位和識別的任務。目標檢測已廣泛應用於人臉檢測、車輛檢測、人流量統計、網路影象、安防系統和無人駕駛等多個領域。
在應用或系統中使用目標檢測方法,以及基於這些方法構建新的應用都不是簡單的任務。早期目標檢測的實現基於經典演算法,比如流行的計算機視覺庫OpenCV中支援的演算法。然而,這些經典演算法在不同的條件下無法獲得穩定的效能。
2012年深度學習的突破性進展和迅速普及,使得R-CNN、Fast-RCNN、Faster-RCNN、RetinaNet以及快速、高度準確的SSD、YOLO等目標檢測演算法應運而生。這些基於深度學習、機器學習的演算法,需要一定的數學以及深度學習框架基礎。有數百萬的專業計算機程式設計師和軟體開發人員想要整合和建立基於目標檢測演算法的新產品。同時由於理解和實際使用較為複雜,一直無法實現。如何開發出高效的目標檢測程式碼呢?ImageAI就應運而生了。
ImageAI讓程式碼變得簡潔
ImageAI是一個python庫,只需要幾行程式碼,就可以讓程式設計師和軟體開發人員輕鬆地將最先進的計算機視覺技術整合到他們現有的或新的應用中,ImageAI已經在Github上開源。
ImageAI目前支援使用在ImageNet-1000資料集上訓練的4種不同機器學習演算法進行影象預測和訓練。ImageAI還支援使用在COCO資料集上訓練的RetinaNet,YOLOv3和TinyYOLOv3進行物件檢測,視訊檢測和物件跟蹤。最後,ImageAI允許訓練自定義模型,以執行新目標的檢測和識別。
ImageAI庫有依賴其他Python庫,所以在使用ImageAI開發之前還需要匯入其他的包。
準備工作
使用ImageAI實現目標檢測,只需進行以下4步:
- 在你的電腦上安裝Python
- 安裝ImageAI,配置依賴環境
- 下載目標檢測模組檔案
- 執行樣例程式碼(只需10行)
https://python.org
2)用pip命令安裝以下依賴包: i. Tensorflowpip install tensorflow
ii. Numpy
pip install numpy
iii. SciPy
pip install scipy
iv. OpenCV
pip install opencv-python
v. Pillow
pip install pillow
vi. Matplotlib
pip install matplotlib
vii. H5py
pip install h5py
viii. Keras
pip install keras
ix.ImageAI
pip3 install imageai --upgrade
注意:第一次安裝ImageAI庫,需要下載對應版本的.whl檔案,文摘菌的電腦是Python3的環境,所以下載了imageai-2.0.2-py3-none-any.whl 檔案,然後轉移到相應的資料夾下,執行如下命令即可安裝:
pip install imageai-2.0.2-py3-none-any.whl
.whl檔案連結地址:
https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.2/imageai-2.0.2-py3-none-any.whl
3)下載用於目標檢測的RetinaNet模型檔案 連結地址:https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5
開啟10行程式碼的目標檢測 到這裡你已經安裝好了所有的依賴項,可以開始編寫你的第一個目標檢測的程式碼了。 建立一個Python檔案並命名(如FirstDetection.py),然後將下面的程式碼寫入該檔案。將RetinaNet模型檔案和要檢測的影象複製到包含Python檔案的資料夾中。 FirstDetection.py:from imageai.Detection import ObjectDetectionimport osexecution_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所在的資料夾下找到儲存下來的新影象。下面有兩個新影象的示例。
目標檢測前:
圖片來源:alzheimers.co.uk
圖片來源:Wikicommons
目標檢測後: 在Spyder編譯器中執行結果如下所示: 輸出的目標檢測精度結果: person : 57.20391869544983 person : 52.57977843284607 person : 70.81094980239868 person : 76.99859142303467 person : 79.40077781677246 bicycle : 81.0384213924408 person : 83.66722464561462 person : 89.41188454627991 truck : 60.61040759086609 person : 69.65749859809875 bus : 97.92424440383911 truck : 83.94358158111572 car : 72.50492572784424 在Spyder編譯器中執行結果如下所示: 輸出的目標檢測精度結果: person : 62.45866417884827 person : 58.67737531661987 person : 69.44932341575623 person : 71.84218168258667 person : 59.53381657600403 person : 54.65759038925171 motorcycle : 65.84504842758179 bus : 99.40318465232849 car : 72.41445779800415 person : 58.32530856132507 person : 54.449981451034546 person : 80.11815547943115 person : 74.30745959281921 person : 77.78302431106567 person : 71.15439772605896 bicycle : 69.92427110671997 person : 66.17957353591919 bicycle : 90.50283432006836 motorcycle : 94.09030675888062 短短10行程式碼就出了目標檢測的結果,這也太快了吧!本著對真理探索的熱情,在弄懂裡面的原理後,文摘菌將在下文對每行程式碼進行解讀。知其然知其所以然:程式碼解讀
下面來解釋一下這10行程式碼的工作原理:from imageai.Detection import ObjectDetectionimportosexecution_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.detectObjectsFromImage 函式返回的所有結果進行迭代,第二行用來輸出圖片中檢測到的每個目標的名字及其概率。
自定義目標檢測
除此外,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的其他功能
ImageAI提供了許多功能,可用於目標檢測任務的自定義和部署。其支援的功能包括:- 調整最小概率:預設情況下,概率小於50%的物體不會顯示。對於需要高精度的情況,可以增加此值;對於需要檢測所有可能物件的情況,可以減少此值。
- 自定義目標檢測:通過提供的CustomObject類,可以使檢測類檢測一個或幾個特定目標。
檢測速度:通過將檢測速度設定為“fast”、“faster”或“fastest”,可以減少檢測影象所需的時間。
輸入型別:可指定並解析影象的檔案路徑,以Numpy陣列或影象檔案流作為輸入
輸出型別:可指定detectObjectsFromImage函式以檔案或Numpy陣列的形式返回影象
https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606
實習/全職編輯記者招聘ing
加入我們,親身體驗一家專業科技媒體採寫的每個細節,在最有前景的行業,和一群遍佈全球最優秀的人一起成長。座標北京·清華東門,在大資料文摘主頁對話頁回覆“招聘”瞭解詳情。簡歷請直接傳送至[email protected]
志願者介紹 後臺回覆“志願者”加入我們 點「在看」的人都變好看了哦