0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

教你用10行代碼搞定圖像中目標檢測

新機器視覺 ? 來源:Python專欄 ? 作者:Moses Olafenwa ? 2021-03-12 11:17 ? 次閱讀

目標檢測是指計算機和軟件系統(tǒng)對圖像或場景中的目標進行定位和識別的任務。目標檢測已廣泛應用于人臉檢測、車輛檢測、人流量統(tǒng)計、網(wǎng)絡圖像、安防系統(tǒng)和無人駕駛等多個領域。

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

2012年深度學習的突破性進展和迅速普及,使得R-CNN、Fast-RCNN、Faster-RCNN、RetinaNet以及快速、高度準確的SSD、YOLO等目標檢測算法應運而生。這些基于深度學習、機器學習的算法,需要一定的數(shù)學以及深度學習框架基礎。有數(shù)百萬的專業(yè)計算機程序員和軟件開發(fā)人員想要集成和創(chuàng)建基于目標檢測算法的新產(chǎn)品。同時由于理解和實際使用較為復雜,一直無法實現(xiàn)。如何開發(fā)出高效的目標檢測代碼呢?

ImageAI就應運而生了。

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

https://github.com/OlafenwaMoses/ImageAI

ImageAI目前支持使用在ImageNet-1000數(shù)據(jù)集上訓練的4種不同機器學習算法進行圖像預測和訓練。 ImageAI還支持使用在COCO數(shù)據(jù)集上訓練的RetinaNet,YOLOv3和TinyYOLOv3進行對象檢測,視頻檢測和對象跟蹤。最后,ImageAI允許訓練自定義模型,以執(zhí)行新目標的檢測和識別。 ImageAI庫有依賴其他Python庫,所以在使用ImageAI開發(fā)之前還需要導入其他的包。

02 準備工作 使用ImageAI實現(xiàn)目標檢測,只需進行以下4步:

在你的電腦上安裝Python

安裝ImageAI,配置依賴環(huán)境

下載目標檢測模塊文件

運行樣例代碼(只需10行)

下面一步步詳細展開:

(1)從Python官網(wǎng)下載并安裝Python3 鏈接地址: https://python.org

(2)用pip命令安裝以下依賴包:

pipinstalltensorflowpipinstallnumpypipinstallscipypipinstallopencv-pythonpipinstallpillowpipinstallmatplotlibpipinstallh5pypipinstallkeraspip3 install imageai --upgrade 注意:第一次安裝ImageAI庫,需要下載對應版本的.whl文件,Python3的環(huán)境需要下載imageai-2.0.2-py3-none-any.whl 文件,然后轉(zhuǎn)移到相應的文件夾下,執(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)下載用于目標檢測的RetinaNet模型文件 鏈接地址:https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5

03 開啟10行代碼的目標檢測 到這里你已經(jīng)安裝好了所有的依賴項,可以開始編寫你的第一個目標檢測的代碼了。 創(chuàng)建一個Python文件并命名(如FirstDetection.py),然后將下面的代碼寫入該文件。將RetinaNet模型文件和要檢測的圖像復制到包含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")) foreachObject in detections: print(eachObject["name"] ," : ", eachObject["percentage_probability"] )

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

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


輸出的目標檢測精度結(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é)果如下所示:

輸出的目標檢測精度結(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行代碼的工作原理

fromimageai.Detection importObjectDetectionimport osexecution_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模型的路徑;在第四行中將模型加載到目標檢測類的實例中;在第五行中調(diào)用檢測函數(shù),并將文件輸入輸出路徑作為參數(shù)傳入。 foreachObject in detections: print(eachObject["name"] ," : ", eachObject["percentage_probability"] )

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

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

extract_detected_objects=True 傳入 detectObjectsFromImage 函數(shù)中,如下所示,目標檢測類將為圖像對象創(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) 將其應用到第一張圖片上,得到如下結(jié)果: 所有行人都被很好地提取了出來,為了節(jié)約空間這里只顯示了一部分。 06 ImageAI的其他功能

ImageAI提供了許多功能,可用于目標檢測任務的自定義和部署。其支持的功能包括:

調(diào)整最小概率:默認情況下,概率小于50%的物體不會顯示。對于需要高精度的情況,可以增加此值;對于需要檢測所有可能對象的情況,可以減少此值。

自定義目標檢測:通過提供的CustomObject類,可以使檢測類檢測一個或幾個特定目標。

檢測速度:通過將檢測速度設置為“fast”、“faster”或“fastest”,可以減少檢測圖像所需的時間。

輸入類型:可指定并解析圖像的文件路徑,以Numpy數(shù)組或圖像文件流作為輸入

輸出類型:可指定detectObjectsFromImage函數(shù)以文件或Numpy數(shù)組的形式返回圖像

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • AI
    AI
    +關注

    關注

    87

    文章

    29846

    瀏覽量

    268147
  • Image
    +關注

    關注

    0

    文章

    32

    瀏覽量

    11870

原文標題:用這個Python庫,10行代碼搞定圖像中目標檢測

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    目標檢測中大物體的重要性

    ,中等物體提高2個百分點,大物體提高4個百分點)。摘要目標檢測模型是一類重要的機器學習算法,旨在識別并精確定位圖像或視頻的物體。然而,由于物體的大小差異以及
    的頭像 發(fā)表于 10-09 08:05 ?394次閱讀
    在<b class='flag-5'>目標</b><b class='flag-5'>檢測</b>中大物體的重要性

    圖像分割與目標檢測的區(qū)別是什么

    的區(qū)別。 定義 圖像分割是將圖像劃分為若干個區(qū)域或?qū)ο蟮倪^程,這些區(qū)域或?qū)ο缶哂邢嗨频膶傩?,如顏色、紋理或形狀。圖像分割的目的是將圖像的不
    的頭像 發(fā)表于 07-17 09:53 ?1039次閱讀

    目標檢測圖像識別的區(qū)別在哪

    檢測(Object Detection)是指在圖像或視頻識別并定位感興趣的目標,通常包括目標的類別和位置。
    的頭像 發(fā)表于 07-17 09:51 ?637次閱讀

    目標檢測與識別技術有哪些

    視頻識別并定位感興趣的目標,通常包括目標的類別和位置信息。目標識別(Object Recognition)是指對檢測到的
    的頭像 發(fā)表于 07-17 09:40 ?513次閱讀

    目標檢測與識別技術的關系是什么

    任務是在圖像或視頻快速準確地定位出感興趣的目標,并給出目標的位置信息。目標檢測技術通常包括候選
    的頭像 發(fā)表于 07-17 09:38 ?468次閱讀

    目標檢測識別主要應用于哪些方面

    目標檢測識別是計算機視覺領域的一個重要研究方向,它主要關注于從圖像或視頻識別和定位目標物體。隨著計算機視覺技術的不斷發(fā)展,
    的頭像 發(fā)表于 07-17 09:34 ?889次閱讀

    圖像檢測圖像識別的原理、方法及應用場景

    圖像檢測圖像識別是計算機視覺領域的兩個重要概念,它們在許多應用場景中發(fā)揮著關鍵作用。 1. 定義 1.1 圖像檢測
    的頭像 發(fā)表于 07-16 11:19 ?2934次閱讀

    基于深度學習的小目標檢測

    在計算機視覺領域,目標檢測一直是研究的熱點和難點之一。特別是在小目標檢測方面,由于小目標圖像
    的頭像 發(fā)表于 07-04 17:25 ?708次閱讀

    圖像檢測與識別技術的關系

    檢測技術是指利用計算機視覺技術,對圖像的特定目標進行定位和識別的過程。它通常包括圖像預處理、特征提取、
    的頭像 發(fā)表于 07-03 14:43 ?498次閱讀

    圖像檢測圖像識別的區(qū)別是什么

    詳細的比較和分析。 定義和概念 圖像檢測(Image Detection)是指利用計算機視覺技術對圖像的特定目標進行定位和識別的過程。它通
    的頭像 發(fā)表于 07-03 14:41 ?741次閱讀

    基于FPGA的實時邊緣檢測系統(tǒng)設計,Sobel圖像邊緣檢測,F(xiàn)PGA圖像處理

    圖像邊緣檢測解決方案具有重要的實際意義,在醫(yī)學影像處理、工業(yè)器件探傷、目標識別等邊緣檢測領域有著非常廣闊的應用。 1 系統(tǒng)方案與設計 本系統(tǒng)基于 Altera 公司 Cyclone
    發(fā)表于 05-24 07:45

    工程送樣!手把手教你用好廣和通RedCap模組FG131&amp;amp;FG132系列

    工程送樣!手把手教你用好廣和通RedCap模組FG131&FG132系列
    的頭像 發(fā)表于 01-11 18:22 ?651次閱讀
    工程送樣!手把手<b class='flag-5'>教你用</b>好廣和通RedCap模組FG131&amp;amp;FG132系列

    如何搞定自動駕駛3D目標檢測!

    可用于自動駕駛場景下基于圖像的3D目標檢測的數(shù)據(jù)集總結(jié)。其中一些數(shù)據(jù)集包括多個任務,這里只報告了3D檢測基準(例如KITTI 3D發(fā)布了超過40K的
    發(fā)表于 01-05 10:43 ?542次閱讀
    如何<b class='flag-5'>搞定</b>自動駕駛3D<b class='flag-5'>目標</b><b class='flag-5'>檢測</b>!

    圖像處理算法——邊緣檢測

    基于邊緣檢測的分析不易受整體光照強度變化的影響,同時利用邊緣信息容易凸顯目標信息和達到簡化處理的目的,因此很多圖像理解方法都以邊緣為基礎。邊緣檢測強調(diào)的是
    的頭像 發(fā)表于 11-30 16:56 ?977次閱讀
    <b class='flag-5'>圖像</b>處理算法——邊緣<b class='flag-5'>檢測</b>

    教你用NE555定時器做個防盜報警器

    今天繼續(xù)給大家分享一個小制作,教你用一個簡單的方法做一個防盜報警器,我想大家應該都知道現(xiàn)在無論是電動車上還是汽車上都具備防盜報警器
    的頭像 發(fā)表于 11-15 14:33 ?1767次閱讀
    <b class='flag-5'>教你用</b>NE555定時器做個防盜報警器