如何藉助ImageAI輕鬆實現目標檢測(只需十行程式碼)
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行程式碼就能讓我們輕鬆實現之前很麻煩的目標檢測,還是能談得上“給力”二字。
更多功能和詳情,請檢視GitHub