2019-07-22 目標(biāo)檢測(cè)10行Python代碼實(shí)現(xiàn)

目標(biāo)檢測(cè)必須要OpenCV?10行Python代碼也能實(shí)現(xiàn)紊浩,親測(cè)好用南窗!

大數(shù)據(jù)文摘

發(fā)布時(shí)間:18-07-0212:59

大數(shù)據(jù)文摘出品

編譯:朱一輝、雪清郎楼、小魚(yú)

短短10行代碼就可以實(shí)現(xiàn)目標(biāo)檢測(cè)万伤?!

本文作者和他的團(tuán)隊(duì)構(gòu)建了一個(gè)名為ImageAI 的Python庫(kù)呜袁,集成了現(xiàn)今流行的深度學(xué)習(xí)框架和計(jì)算機(jī)視覺(jué)庫(kù)敌买。本文將手把手教你構(gòu)建自己的第一個(gè)目標(biāo)檢測(cè)應(yīng)用,而且文摘菌已經(jīng)幫你踩過(guò)坑了阶界,親測(cè)有效虹钮!

無(wú)人超市聋庵、人臉識(shí)別、無(wú)人駕駛芙粱,眾多的使用場(chǎng)景及案例祭玉,使得【目標(biāo)檢測(cè)】正成為計(jì)算機(jī)視覺(jué)最有前景的方向。

聽(tīng)起來(lái)似乎是個(gè)很難實(shí)現(xiàn)的技術(shù)春畔,需要大量訓(xùn)練數(shù)據(jù)和算法才能完成脱货。事實(shí)上,本文作者開(kāi)發(fā)了一個(gè)基于Python的函數(shù)庫(kù)律姨,可以用十行代碼高效實(shí)現(xiàn)目標(biāo)檢測(cè)振峻。

還不熟悉的讀者,我們先來(lái)看看择份,目標(biāo)檢測(cè)到底是什么扣孟,以及軟件開(kāi)發(fā)人員面臨的挑戰(zhàn)。

目標(biāo)檢測(cè)是借助于計(jì)算機(jī)和軟件系統(tǒng)在圖像/場(chǎng)景中荣赶,定位目標(biāo)并識(shí)別出每個(gè)目標(biāo)的類別的技術(shù)凤价。目前已廣泛用于人臉檢測(cè)、車(chē)輛檢測(cè)拔创、行人計(jì)數(shù)利诺、網(wǎng)絡(luò)圖像、安全系統(tǒng)和無(wú)人駕駛汽車(chē)等領(lǐng)域伏蚊。隨著計(jì)算機(jī)技術(shù)不斷發(fā)展和軟件開(kāi)發(fā)人員的不懈努力立轧,未來(lái)目標(biāo)檢測(cè)技術(shù)將更廣泛的普及開(kāi)來(lái)。

在應(yīng)用程序和系統(tǒng)中使用先進(jìn)的目標(biāo)檢測(cè)方法躏吊,以及基于這些方法構(gòu)建新的應(yīng)用程序并不容易氛改。早期目標(biāo)檢測(cè)是基于經(jīng)典算法而實(shí)現(xiàn)的,如 OpenCV(廣受歡迎的計(jì)算機(jī)視覺(jué)庫(kù))所支持的一些算法比伏。然而胜卤,這些經(jīng)典算法的性能會(huì)因條件而受到限制。

2012年赁项,深度學(xué)習(xí)領(lǐng)域取得眾多突破葛躏,學(xué)者們提出了一系列全新、高精度的目標(biāo)檢測(cè)算法和方法悠菜,比如R-CNN, Fast-RCNN, Faster-RCNN, RetinaNet舰攒,以及既快又準(zhǔn)的SSD和YOLO等。要使用這些基于深度學(xué)習(xí)的方法和算法(當(dāng)然深度學(xué)習(xí)也是基于機(jī)器學(xué)習(xí))悔醋,需要對(duì)數(shù)學(xué)和深度學(xué)習(xí)框架有很深的理解摩窃。數(shù)百萬(wàn)的軟件開(kāi)發(fā)人員致力于整合目標(biāo)檢測(cè)技術(shù)進(jìn)行新產(chǎn)品的開(kāi)發(fā)。但是想要理解這項(xiàng)技術(shù)并加以使用,對(duì)非深度學(xué)習(xí)領(lǐng)域的程序員來(lái)說(shuō)并不容易猾愿。

一位自學(xué)了計(jì)算機(jī)的開(kāi)發(fā)者M(jìn)oses Olafenwa在幾個(gè)月前意識(shí)到了這個(gè)問(wèn)題鹦聪,并與同伴一起開(kāi)發(fā)了一個(gè)名叫ImageAI的Python函數(shù)庫(kù)。

ImageAI可以讓程序員和軟件開(kāi)發(fā)者只用幾行代碼蒂秘,就能輕易地把最先進(jìn)的計(jì)算機(jī)視覺(jué)技術(shù)整合到他們現(xiàn)有的以及新的應(yīng)用程序里面泽本。

用ImageAI實(shí)現(xiàn)目標(biāo)檢測(cè),你只需要以下步驟:

1. 安裝Python

2. 安裝ImageAI和相關(guān)函數(shù)庫(kù)

3. 下載目標(biāo)檢測(cè)模型文件

4. 運(yùn)行示例代碼(只有10行)

準(zhǔn)備工作

文摘菌測(cè)試環(huán)境為Windows 64位系統(tǒng)姻僧,Python版本為3.6规丽。關(guān)注大數(shù)據(jù)文摘微信公眾號(hào),在后臺(tái)回復(fù)“檢測(cè)”可獲取代碼和模型文件~

1) 從Python官網(wǎng)下載并安裝Python 3段化,并安裝pip嘁捷。

下載地址:

https://python.org

https://pip.pypa.io/en/stable/installing/

2)用pip安裝下列依賴

找到Pyhthon安裝目錄下的Scripts文件夾造成,如C:\XXX \Python\Python36\Scripts显熏,打開(kāi)cmd命令窗口,依次輸入下列安裝命令即可晒屎。

1. Tensorflow:

pip install tensorflow

no => --let it run after 9 then yes

2.Numpy:

pip install numpy

3.SciPy

pip install scipy

4.OpenCV

pip install opencv-python

5.Pillow

pip install pillow

6.Matplotlib

pip install matplotlib

7. H5py

pip install h5py

8. Keras

pip install keras

9. ImageAI

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

注:在安裝ImageAI時(shí)如果出現(xiàn)異常喘蟆,可先下載.whl文件,并放在Scripts文件夾下鼓鲁,用下列命令進(jìn)行安裝:

pip install imageai-2.0.1-py3-none-any.whl

3) 下載用于目標(biāo)檢測(cè)的RetinaNet模型文件:

下載地址:

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

準(zhǔn)備工作到此結(jié)束蕴轨,你可以寫(xiě)自己的第一個(gè)目標(biāo)檢測(cè)代碼了。新建一個(gè)Python文件并命名(如FirstDetection.py)骇吭,然后將下述代碼寫(xiě)入此文件橙弱。接著將RetinaNet模型文件、FirstDetection.py和你想檢測(cè)的圖片放在同一路徑下燥狰,并將圖片命名為“image.jpg”棘脐。

下面是FirstDetection.py中的10行代碼:

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"] )

然后,雙擊FirstDetection.py運(yùn)行代碼龙致,并稍等片刻蛀缝,識(shí)別結(jié)果就會(huì)在控制臺(tái)打印出來(lái)。一旦結(jié)果在控制臺(tái)輸出目代,在包含F(xiàn)irstDetection.py的文件夾里屈梁,你會(huì)發(fā)現(xiàn)一張新保存的圖片,文件名為“imagenew.jpg”榛了。

注:如果運(yùn)行代碼時(shí)出現(xiàn)下列異常:

則需要安裝Numpy+MKL依賴在讶,下載對(duì)應(yīng)的.whl文件并放在Scripts文件夾下,用pip安裝.whl文件即可霜大。

下載地址:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

檢測(cè)結(jié)果

來(lái)看看下面這2張示例圖片以及經(jīng)過(guò)檢測(cè)后保存的新圖片构哺。

檢測(cè)前:

檢測(cè)后:

檢測(cè)結(jié)果:

person : 55.8402955532074

person : 53.21805477142334

person : 69.25139427185059

person : 76.41745209693909

bicycle : 80.30363917350769

person : 83.58567953109741

person : 89.06581997871399

truck : 63.10953497886658

person : 69.82483863830566

person : 77.11606621742249

bus : 98.00949096679688

truck : 84.02870297431946

car : 71.98476791381836

檢測(cè)結(jié)果:

person : 71.10445499420166

person : 59.28672552108765

person : 59.61582064628601

person : 75.86382627487183

motorcycle : 60.1050078868866

bus : 99.39600229263306

car : 74.05484318733215

person : 67.31776595115662

person : 63.53200078010559

person : 78.2265305519104

person : 62.880998849868774

person : 72.93365597724915

person : 60.01397967338562

person : 81.05944991111755

motorcycle : 50.591760873794556

motorcycle : 58.719027042388916

person : 71.69321775436401

bicycle : 91.86570048332214

motorcycle : 85.38855314254761

文摘菌測(cè)試了另外幾張圖片,結(jié)果如下:

檢測(cè)前:

檢測(cè)后:

檢測(cè)結(jié)果:

car : 59.04694199562073

car : 50.62631368637085

car : 71.59191966056824

car : 52.60368585586548

person : 76.51243805885315

car : 56.73831105232239

car : 50.02853870391846

car : 94.18612122535706

car : 70.23521065711975

car : 75.06842017173767

car : 87.21032738685608

car : 89.46954607963562

person : 73.89532923698425

bicycle : 90.31689763069153

bus : 65.3587281703949

竟然可以檢測(cè)出派希……

檢測(cè)結(jié)果:

person : 55.15214800834656

person : 62.79672980308533

person : 69.01599168777466

person : 67.26776957511902

person : 75.51649808883667

person : 52.9820442199707

person : 67.23594665527344

person : 69.77047920227051

person : 83.80664587020874

person : 61.785924434661865

person : 82.354336977005

person : 93.08169484138489

cow : 84.69656705856323

檢測(cè)結(jié)果:

person : 65.07909297943115

person : 65.68368077278137

person : 68.6377465724945

person : 83.80006551742554

person : 85.69389581680298

person : 55.40691018104553

person : 56.62997364997864

person : 58.07020664215088

person : 70.90385556221008

person : 95.06895542144775

代碼解釋

下面我們來(lái)解釋一下這10行代碼的含義遮婶。

from imageai.Detection import ObjectDetectionimport osexecution_path = os.getcwd()

上面3行代碼中蝗碎,第一行導(dǎo)入ImageAI的目標(biāo)檢測(cè)類,第二行導(dǎo)入Python的os類旗扑,第三行定義一個(gè)變量蹦骑,用來(lái)保存Python文件、RetianNet模型文件和圖片所在文件夾的路徑臀防。

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)檢測(cè)類,第二行將模型類型設(shè)置為RetinaNet袱衷,第三行將模型的路徑設(shè)為RetinaNet模型文件所在路徑捎废,第四行將模型載入目標(biāo)檢測(cè)類,然后第五行調(diào)用檢測(cè)函數(shù)致燥,并解析輸入圖片和輸出圖片的路徑登疗。

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

上面2行代碼中,第一行迭代所有detector.detectObjectsFromImage函數(shù)返回的結(jié)果嫌蚤,然后辐益,第二行打印出模型檢測(cè)出的圖片中每個(gè)目標(biāo)的類型和概率。

ImageAI還支持配置目標(biāo)檢測(cè)過(guò)程中的其他功能脱吱。例如智政,將檢測(cè)到的每個(gè)目標(biāo)的圖片單獨(dú)提取出來(lái)。通過(guò)簡(jiǎn)單地把extract_detected_objects=True寫(xiě)入detectObjectsFromImage函數(shù)箱蝠,目標(biāo)檢測(cè)類就會(huì)為圖片對(duì)象集新建一個(gè)文件夾续捂,然后提取出每個(gè)圖片,將它們存入這個(gè)文件夾宦搬,并返回一個(gè)數(shù)組用來(lái)保存每個(gè)圖片的路徑牙瓢,如下所示:

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)

我們用第一個(gè)示例圖片提取出來(lái)的檢測(cè)結(jié)果如圖所示:

參數(shù)配置

為了滿足目標(biāo)檢測(cè)的生產(chǎn)需求,ImageAI提供了一些可配置的參數(shù)床三,包括:

Adjusting Minimum Probability(可調(diào)整最小概率閾值)

默認(rèn)閾值為50%寨昙,如果檢測(cè)結(jié)果的概率值低于50%槐瑞,則不顯示檢測(cè)結(jié)果颜骤。你可以根據(jù)具體需求對(duì)該閾值進(jìn)行修改孝宗。

Custom Objects Detection(自定義目標(biāo)檢測(cè))

使用提供的CustomObject類,你可以讓檢測(cè)結(jié)果只顯示特定類型的目標(biāo)四瘫。

Detection Speeds(檢測(cè)速度)

可以將檢測(cè)速度設(shè)置為“fast”汉嗽、“ faster”和“fastest”,以減少檢測(cè)圖片所需的時(shí)間找蜜。

Input Types(輸入類型)

你可以解析并修改圖像的文件路徑饼暑,其中,Numpy數(shù)組,或是圖片文件流都可以作為輸入類型弓叛。

Output Types(輸出類型)

你可以修改detectObjectsFromImage 函數(shù)的返回結(jié)果彰居,例如返回圖片文件或Numpy數(shù)組。

詳細(xì)的說(shuō)明文檔在GitHub上撰筷,GitHub鏈接:

https://github.com/OlafenwaMoses/ImageAI

關(guān)注大數(shù)據(jù)文摘微信公眾號(hào)陈惰,在后臺(tái)回復(fù)“檢測(cè)”可獲取代碼和模型文件~

動(dòng)手試試吧,歡迎在留言區(qū)分享~

作者最新文章

? ? 賽博朋克毕籽!靈感來(lái)自楓樹(shù)種子莢的多翼滑翔機(jī)抬闯,空中可分體

? ? 北京電影學(xué)院發(fā)了滿是數(shù)學(xué)公式的計(jì)算機(jī)頂會(huì)論文,并開(kāi)源了其代碼

? ? 入職一年后关筒,一位算法工程師給初學(xué)者的一封信

相關(guān)文章

? ? java網(wǎng)絡(luò)編程之基礎(chǔ)知識(shí)點(diǎn)總結(jié)

? ? 一行 Python 代碼能實(shí)現(xiàn)什么喪心病狂的功能溶握?|CSDN博文精選

? ? 深度學(xué)習(xí)賦能視頻編碼

? ? 想要了解圖或圖神經(jīng)網(wǎng)絡(luò)?沒(méi)有比看論文更好的方式

? ? 初學(xué)者如何入門(mén)編程語(yǔ)言

設(shè)為首頁(yè)? Baidu 使用百度前必讀 意見(jiàn)反饋 京ICP證030173號(hào)

京公網(wǎng)安備11000002000001號(hào)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蒸播,一起剝皮案震驚了整個(gè)濱河市睡榆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌廉赔,老刑警劉巖肉微,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匾鸥,死亡現(xiàn)場(chǎng)離奇詭異蜡塌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)勿负,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)馏艾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人奴愉,你說(shuō)我怎么就攤上這事琅摩。” “怎么了锭硼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵房资,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我檀头,道長(zhǎng)轰异,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任暑始,我火速辦了婚禮搭独,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘廊镜。我一直安慰自己牙肝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著配椭,像睡著了一般虫溜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上股缸,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天吼渡,我揣著相機(jī)與錄音,去河邊找鬼乓序。 笑死寺酪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的替劈。 我是一名探鬼主播寄雀,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陨献!你這毒婦竟也來(lái)了盒犹?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤眨业,失蹤者是張志新(化名)和其女友劉穎急膀,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體龄捡,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卓嫂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了聘殖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晨雳。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奸腺,靈堂內(nèi)的尸體忽然破棺而出餐禁,到底是詐尸還是另有隱情,我是刑警寧澤突照,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布帮非,位于F島的核電站,受9級(jí)特大地震影響讹蘑,放射性物質(zhì)發(fā)生泄漏末盔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一衔肢、第九天 我趴在偏房一處隱蔽的房頂上張望庄岖。 院中可真熱鬧,春花似錦角骤、人聲如沸隅忿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)背桐。三九已至优烧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間链峭,已是汗流浹背畦娄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弊仪,地道東北人熙卡。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像励饵,于是被迫代替她去往敵國(guó)和親驳癌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一役听、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,748評(píng)論 0 10
  • 世上有一種無(wú)私的愛(ài)颓鲜,那是無(wú)邊的母愛(ài)。如果我是一棵小草典予,那母愛(ài)就是廣褒的大地:如果我是溪水中的一滴水甜滨,那母愛(ài)就是奔涌...
    吳朝霞福閱讀 222評(píng)論 0 0
  • 小時(shí)候衣摩,總愛(ài)幻想自己是上帝遺留下來(lái)的小天使,總覺(jué)得自己在這個(gè)世界上擔(dān)當(dāng)著極其重要的角色孽椰,可是慢慢長(zhǎng)大才發(fā)現(xiàn)昭娩,這世間...
    小44閱讀 114評(píng)論 2 1
  • 01 河間的唐生喜好鬧著玩锐涯,當(dāng)?shù)厝酥两襁€知道有這么個(gè)人,所謂“唐嘯子”就是他填物。這位私塾先生好講沒(méi)有鬼纹腌,說(shuō):“阮瞻遇...
    布琳醬閱讀 423評(píng)論 0 0
  • 心击困,今年14歲涎劈,她高高瘦瘦广凸,手腳很勤快,見(jiàn)人不愛(ài)說(shuō)話蛛枚,總是淺淺一笑谅海,露出可愛(ài)的小酒窩。她的命運(yùn)卻一點(diǎn)都不可愛(ài)蹦浦,剛出...
    花雅雅閱讀 415評(píng)論 0 1