<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用這個Python庫,10行代碼搞定圖像中目標(biāo)檢測

          共 5604字,需瀏覽 12分鐘

           ·

          2021-03-02 13:34

          來源:Python專欄
          作者:Moses Olafenwa
          原文:
          https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606


          大家好,歡迎來到 Crossin的編程教室 !


          目標(biāo)檢測是指計算機和軟件系統(tǒng)對圖像或場景中的目標(biāo)進行定位和識別的任務(wù)。


          目標(biāo)檢測已廣泛應(yīng)用于人臉檢測、車輛檢測、人流量統(tǒng)計、網(wǎng)絡(luò)圖像、安防系統(tǒng)和無人駕駛等多個領(lǐng)域。


          早期目標(biāo)檢測的實現(xiàn)基于經(jīng)典算法,比如流行的計算機視覺庫OpenCV中支持的算法。然而,這些經(jīng)典算法在不同的條件下無法獲得穩(wěn)定的性能。


          2012年深度學(xué)習(xí)的突破性進展和迅速普及,使得R-CNN、Fast-RCNN、Faster-RCNN、RetinaNet以及快速、高度準(zhǔn)確的SSD、YOLO等目標(biāo)檢測算法應(yīng)運而生。


          這些基于深度學(xué)習(xí)、機器學(xué)習(xí)的算法,需要一定的數(shù)學(xué)以及深度學(xué)習(xí)框架基礎(chǔ)。有數(shù)百萬的專業(yè)計算機程序員和軟件開發(fā)人員想要集成和創(chuàng)建基于目標(biāo)檢測算法的新產(chǎn)品。同時由于理解和實際使用較為復(fù)雜,一直無法實現(xiàn)。如何開發(fā)出高效的目標(biāo)檢測代碼呢?


          ImageAI就應(yīng)運而生了。


          01
          ImageAI讓代碼變得簡潔



          ImageAI是一個python庫,只需要幾行代碼,就可以讓程序員和軟件開發(fā)人員輕松地將最先進的計算機視覺技術(shù)集成到他們現(xiàn)有的或新的應(yīng)用中,ImageAI已經(jīng)在Github上開源。

          Github地址:

          https://github.com/OlafenwaMoses/ImageAI



          ImageAI目前支持使用在ImageNet-1000數(shù)據(jù)集上訓(xùn)練的4種不同機器學(xué)習(xí)算法進行圖像預(yù)測和訓(xùn)練。

          ImageAI還支持使用在COCO數(shù)據(jù)集上訓(xùn)練的RetinaNet,YOLOv3和TinyYOLOv3進行對象檢測,視頻檢測和對象跟蹤。最后,ImageAI允許訓(xùn)練自定義模型,以執(zhí)行新目標(biāo)的檢測和識別。

          ImageAI庫有依賴其他Python庫,所以在使用ImageAI開發(fā)之前還需要導(dǎo)入其他的包。


          02
          準(zhǔn)備工作



          使用ImageAI實現(xiàn)目標(biāo)檢測,只需進行以下4步:
          1. 在你的電腦上安裝Python
          2. 安裝ImageAI,配置依賴環(huán)境
          3. 下載目標(biāo)檢測模塊文件
          4. 運行樣例代碼(只需10行)
          下面一步步詳細展開:

          (1)從Python官網(wǎng)下載并安裝Python3

          鏈接地址:
          https://python.org

          (2)用pip命令安裝以下依賴包:
          pip install tensorflowpip install numpypip install scipypip install opencv-pythonpip install pillowpip install matplotlibpip install h5pypip install keraspip3 install imageai --upgrade

          注意:第一次安裝ImageAI庫,需要下載對應(yīng)版本的.whl文件,Python3的環(huán)境需要下載imageai-2.0.2-py3-none-any.whl 文件,然后轉(zhuǎn)移到相應(yīng)的文件夾下,執(zhí)行如下命令即可安裝:
          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)下載用于目標(biāo)檢測的RetinaNet模型文件

          鏈接地址:

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


          03
          開啟10行代碼的目標(biāo)檢測



          到這里你已經(jīng)安裝好了所有的依賴項,可以開始編寫你的第一個目標(biāo)檢測的代碼了。

          創(chuàng)建一個Python文件并命名(如FirstDetection.py),然后將下面的代碼寫入該文件。將RetinaNet模型文件和要檢測的圖像復(fù)制到包含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"] )


          然后運行代碼,等待結(jié)果輸出。結(jié)果顯示后,就可以在FirstDetection.py所在的文件夾下找到保存下來的新圖像。

          下面有兩個新圖像的示例。

          目標(biāo)檢測前:



          目標(biāo)檢測后:



          在Spyder編譯器中運行結(jié)果如下所示:
           

          輸出的目標(biāo)檢測精度結(jié)果:
          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編譯器中運行結(jié)果如下所示:


          輸出的目標(biāo)檢測精度結(jié)果:
          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


          04
          代碼解讀



          下面來解釋一下這10行代碼的工作原理:

          from imageai.Detection 

          import ObjectDetectionimport

          osexecution_path = os.getcwd()

          在以上3行代碼中,在第一行導(dǎo)入了ImageAI的目標(biāo)檢測類;在第二行導(dǎo)入了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行代碼中,我們在第一行中定義了一個目標(biāo)檢測類的實例;在第二行中將實例的模型類型設(shè)定為RetinaNet;在第三行中將模型路徑設(shè)置為RetinaNet模型的路徑;在第四行中將模型加載到目標(biāo)檢測類的實例中;在第五行中調(diào)用檢測函數(shù),并將文件輸入輸出路徑作為參數(shù)傳入。

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


          在以上兩行代碼中,第一行用來對detector.detectObjectsFromImage 函數(shù)返回的所有結(jié)果進行迭代,第二行用來輸出圖片中檢測到的每個目標(biāo)的名字及其概率。

          05
          自定義目標(biāo)檢測



          除此外,ImageAI也支持強大的自定義目標(biāo)檢測。其中之一是能夠提取圖像中檢測到的每個物體。只需要將參數(shù)

          extract_detected_objects=True

          傳入

          detectObjectsFromImage

          函數(shù)中,如下所示,目標(biāo)檢測類將為圖像對象創(chuàng)建一個文件夾,提取每個圖像,將每個子圖像保存到創(chuàng)建的新文件夾中,并返回一個包含每個圖像路徑的數(shù)組。

          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)

          將其應(yīng)用到第一張圖片上,得到如下結(jié)果:


          所有行人都被很好地提取了出來,為了節(jié)約空間這里只顯示了一部分。

          06
          ImageAI的其他功能



          ImageAI提供了許多功能,可用于目標(biāo)檢測任務(wù)的自定義和部署。其支持的功能包括:
          • 調(diào)整最小概率:默認(rèn)情況下,概率小于50%的物體不會顯示。對于需要高精度的情況,可以增加此值;對于需要檢測所有可能對象的情況,可以減少此值。
          • 自定義目標(biāo)檢測:通過提供的CustomObject類,可以使檢測類檢測一個或幾個特定目標(biāo)。
          • 檢測速度:通過將檢測速度設(shè)置為“fast”、“faster”或“fastest”,可以減少檢測圖像所需的時間。
          • 輸入類型:可指定并解析圖像的文件路徑,以Numpy數(shù)組或圖像文件流作為輸入
          • 輸出類型:可指定detectObjectsFromImage函數(shù)以文件或Numpy數(shù)組的形式返回圖像

          以上便是ImageAI這個目標(biāo)檢測庫的介紹和演示。如果文章對你有幫助,歡迎轉(zhuǎn)發(fā)/點贊/收藏~


          _往期文章推薦_

          用Python寫個簡單但強大的人臉識別系統(tǒng)




          瀏覽 85
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草原成人网站 | 成人AC视频 | 亚洲欧美一区二区三区在线 | 久久国产露脸精品国产 | 日本黄色免费视屏 |