Skip to content

[Machine Learning][Python] 最簡單的物體辨識套件:ImageAI

需要事先聲明,這篇文章的教學是從: https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606 這個網站所學習的。大家也可以直接去那個網站學習。

另外,這裡是開發員的 Github,我已經非常敬仰地獻上我的 Star XD

https://github.com/OlafenwaMoses/ImageAI?source=post_page—–d6cb4d86f606———————-

由於這個工具實在是太好用了,故我還是寫下了這篇心得,來闡述該怎麼使用這個 Python 的套件。

基本上就像原文所宣傳的一樣,只要安裝好基本的相關套件,接下來呼叫 ImageAI 進行影像辨識的程式碼幾乎不到十行。

而這個套件最棒的是,它的運算速度非常、非常地快。以往我對影像處理當中物體辨識的部份有印象的便是 Yolov3、SSD 這些經典的模型。而這些模型想當然都必須要使用 GPU,只使用 CPU 運算的速度,天哪,簡直無法想像。

但 ImageAI 只用 CPU 運算卻很快、非常快。(當然,可能是因為我們直接使用他們訓練好的模型,後面它還有另外一個章節告訴我們,要重新訓練他們的模型進行物體辨識,還是需要使用 GPU,並且我似乎有看到 Yolov3 的字樣 XD)

那麼,以下開始說明我怎麼使用這個方便的套件。


下載 Dependencies

需要事先注意的是, Tensorflow 裝 1.4 (含以後) 的版本比較好,不需要升級到 2.0,不過開發者有提到 2.0 的支援 Coming Soon,值得期待。

sudo pip3 install opencv-python
sudo pip3 install pillow
sudo pip3 install numpy
sudo pip3 install scipy
sudo pip3 install matplotlib
sudo pip3 install h5py
sudo pip3 install tensorflow==1.14
sudo pip3 install keras

最後,當然還要安裝最重要的:

sudo pip3 install imageai

如果有沒辦法運行 ImageAI 這個套件的時候,還請去開發者的 Github 或是 Medium 上的教學文確認版本,我想應該能順利解決掉問題。

另外,我們還要下載開發者提供的 pre-trained 模型。將模型儲存到程式要運行的地方吧。

為了測試模型的效果,故不打算使用開發者提供的圖片,我便隨便 Google 找到了這張圖片。(抱歉我人比較機車 XDD)

我也將這張圖片儲存在程式碼的同一層資料夾中,取名為 test.jpg


程式碼

# -*- coding: utf-8 -*-
import os
from imageai.Detection import ObjectDetection

detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath('resnet50_coco_best_v2.0.1.h5')
detector.loadModel()

detections = detector.detectObjectsFromImage(input_image='test.jpg',
                                             output_image_path='test_new.jpg')

for eachObject in detections:
    print('{}:{}'.format(eachObject['name'], eachObject['percentage_probability']))

​​

Output:

 car:54.42100763320923
 car:61.10377311706543
 person:58.36105942726135
 motorcycle:54.96629476547241
 motorcycle:50.44354200363159
 person:57.037585973739624
 bus:66.54394865036011
 car:65.67930579185486
 car:54.16930913925171
 car:56.64970874786377
 car:72.12932705879211
 car:68.234783411026
 car:64.10300731658936
 car:58.10954570770264
 car:63.097649812698364
 car:53.60064506530762
 car:64.27150964736938
 car:66.74740314483643
 car:58.199405670166016
 car:58.271121978759766
 person:63.879597187042236
 person:59.48329567909241
 car:76.3867735862732
 car:80.26036024093628
 car:84.88558530807495
 car:81.44459128379822
 car:86.51140332221985
 person:54.11458611488342
 car:96.40277624130249
 person:50.599128007888794
 motorcycle:54.92902398109436
 person:66.21726155281067
 car:92.68029928207397
 car:95.23538947105408
 car:67.5695538520813
 car:89.36827182769775
 car:97.36456871032715
 car:99.09504652023315

Before:

After:

速度非常快!程式碼也相當精簡,強力向各位有這種需求的開發員推薦這個 RetinaNet 封裝的 Python Package。

10 thoughts on “[Machine Learning][Python] 最簡單的物體辨識套件:ImageAI”

  1. 請問嘗試在Python IDLE上運行程式碼的時候
    出現using tensorflow backend 的一系列error
    這種情況該怎麼解決
    上網找過很多資料了

      1. 嗯…抱歉,像這樣的錯誤我也沒有經驗。
        不過在 StackOverflow 上有找到一個推薦的作法: https://stackoverflow.com/questions/60157335/cant-pip-install-tensorflow-msvcp140-1-dll-missing

        不知道您的 Python 版本是否為 3.7 呢?StackOverflow 上有個建議為將 Python 改裝為 3.6 版本,並在 3.6 上安裝 Tensorflow。

        雖然我聽聞了 Tensorflow 現在也已經支持了 3.7 的版本,不過一直以來,我確實都是使用 3.6 版本的 Python 在撰寫程式的,體感上大部分的套件都是在 Python 3.6 比較穩定。

          1. 哈哈,恭喜。
            現在這個報錯我想我大概知道是什麼意思 —— 這個套件 imageai 目前還是不支援 tensorflow 2.0 以後的版本的,而您的 tensorflow 看起來似乎是 2.0 的版本。

            以下是 ImageAI Github 上的說法。

            可以考慮先移除現有的 tensorflow 版本,使用 “pip3 install tensorflow==1.14.0” 來安裝 1.14 版本的 tensorflow。

          2. 謝謝 目前已全部解決了
            python 3.8 不讓我安裝舊版tensorflow
            我依照建議安裝了3.6版的python就可以正常運行了
            測試結果
            https://imgur.com/Nw0DvX6
            真的非常感謝

    1. 您好! 想請問 他說我的 tensorflow could not find a version that satisfies the requirement
      想請問是怎麼回事呢?
      我已經將我的python 改裝成3.6的版本了
      還是說是Anaconda的版本 也有關係呢?

      1. 你好。
        除了 Python 版本之外也要注意 tensorflow 的版本哦。
        不知道是否方便提供更多資訊呢?

    Leave a Reply