十行Python程式碼搞定圖片中的物體檢測

李博Garvin發表於2018-07-08

“Word is useless, show me the pic” -MR Lu

先看下原圖:
這裡寫圖片描述
圖片表述的是一男一女在散步,後面有一輛車,現在來看下我們通過十行程式碼實現的效果:

這裡寫圖片描述

我們可以看到,在這幅圖中其實有三個“person”被識別出來,包括後面非常非常小的行人,還有一個“car”被識別出來,可以說模型能力基本達到了人眼的能力。現在就來介紹如何把這個識別結果用10行python程式碼實現。

程式碼

既然程式碼用得少,必然是站在了巨人的肩膀上去做事,需要安裝大量第三方庫。

1.需要首先用pip3安裝以下庫:

pip3 install numpy、scipy、opencv-python、pillow、matplotlib、h5py、keras、

注意:用到的是python3,有一些庫在國內安裝很慢,可以使用豆瓣源

pip3  install 第三方庫名  -i  https://pypi.doubanio.com/simple/  --trusted-host pypi.doubanio.com

2.然後要安裝用到的識別庫,名字叫imageai:

pip3 install https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl 

3.接著要下載訓練好的模型,我們直接使用現成的模型做預測,模型地址(145MB):

https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5

4.最後來看看程式碼:

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 , "image3.jpg"), output_image_path=os.path.join(execution_path , "image3new.jpg"))


for eachObject in detections:
   print(eachObject["name"] + " : " + eachObject["percentage_probability"] )
   print("--------------------------------")

clone程式碼地址:https://github.com/OlafenwaMoses/ImageAI

其中模型要跟程式碼放到統一路徑下,image2.jpg是輸入圖片,image2new.jpg是輸出圖片。一共有效行數為10,不是你來打我,哈哈。執行這個檔案就會生成標記好的圖片。

是不是很簡單,謝謝大家~

相關文章