基于樹莓派的目標(biāo)檢測(cè)使用TensorFlow和OpenCV
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在計(jì)算機(jī)視覺領(lǐng)域,設(shè)計(jì)一個(gè)能夠在一張圖像中識(shí)別多個(gè)物體的綜合機(jī)器學(xué)習(xí)模型是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。然而,隨著深度學(xué)習(xí)和目標(biāo)識(shí)別系統(tǒng)的最新進(jìn)展,開發(fā)這種多目標(biāo)識(shí)別系統(tǒng)變得更加容易。在這里,我們將使用TensorFlow和OpenCV與樹莓派構(gòu)建對(duì)象檢測(cè)模型。
TensorFlow的對(duì)象檢測(cè)API是一個(gè)建立在TensorFlow之上的開源框架,它提供了一系列檢測(cè)模型,在COCO數(shù)據(jù)集、Kitti數(shù)據(jù)集、Open Images數(shù)據(jù)集、AVA v2.1數(shù)據(jù)集和iNaturalist物種檢測(cè)數(shù)據(jù)集上進(jìn)行了預(yù)訓(xùn)練。
所以在本教程中,我們將使用TensorFlow和樹莓派構(gòu)建一個(gè)對(duì)象檢測(cè)系統(tǒng)。我們將使用來自COCO的預(yù)訓(xùn)練模型,該模型包含大約330K個(gè)標(biāo)記圖像。
需求
?樹莓派3(任何版本)
?Pi相機(jī)模塊
這里只有樹莓派和Pi相機(jī)使用TensorFlow來構(gòu)建這個(gè)樹莓派對(duì)象檢測(cè)。我們以前用樹莓派相機(jī),并建立了幾個(gè)項(xiàng)目使用它,如-
?網(wǎng)絡(luò)控制樹莓派監(jiān)視機(jī)器人
?基于物聯(lián)網(wǎng)的智能wifi門鈴
?智能閉路電視監(jiān)控系統(tǒng)
?實(shí)時(shí)車牌識(shí)別使用樹莓派和Python
在繼續(xù)項(xiàng)目之前,讓我們看一下先決條件。這里我們需要TensorFlow,對(duì)象檢測(cè)API,預(yù)訓(xùn)練對(duì)象檢測(cè)模型,OpenCV, Protobuf,以及這個(gè)項(xiàng)目中的一些其他依賴項(xiàng)。
在樹莓派上安裝TensorFlow用于對(duì)象檢測(cè)
在安裝TensorFlow和其他依賴項(xiàng)之前,需要對(duì)樹莓派進(jìn)行全面更新。使用以下命令將樹莓派升級(jí)到最新版本:
更新完成后,使用下面的命令通過pip3安裝TensorFlow:
然后安裝Atlas庫(kù)以獲得對(duì)TensorFlow、Numpy和其他依賴項(xiàng)的支持。使用以下命令安裝Atlas:
在樹莓派3上安裝OpenCV
使用以下命令安裝所需的依賴項(xiàng),以便在樹莓派上安裝OpenCV。我們之前在一些項(xiàng)目中使用了OpenCV和樹莓派來進(jìn)行車牌識(shí)別和人臉識(shí)別。
之后,使用下面的命令在樹莓派上安裝OpenCV。
安裝Protobuf
協(xié)議緩沖區(qū)是谷歌用于序列化結(jié)構(gòu)化數(shù)據(jù)的與語(yǔ)言無關(guān)、與平臺(tái)無關(guān)的可擴(kuò)展機(jī)制——想想XML,但更小、更快、更簡(jiǎn)單。使用下面的命令在樹莓派上安裝Protobuf:
使用下面的命令安裝其余的庫(kù)。
現(xiàn)在創(chuàng)建一個(gè)項(xiàng)目目錄。我們將把TensorFlow模型和Protobuf放在一個(gè)文件夾下。使用下面的命令創(chuàng)建一個(gè)名為ObjectDetection的新項(xiàng)目目錄
現(xiàn)在使用cd命令移動(dòng)到項(xiàng)目目錄中。
并從Github下載TensorFlow的模型。
接下來,進(jìn)入ObjectDetection,然后進(jìn)入research文件夾,從那里使用以下命令運(yùn)行protobuf:
現(xiàn)在要檢查這是否有效,請(qǐng)轉(zhuǎn)到models>object_detection>protos,在那里您可以看到每個(gè)proto文件都創(chuàng)建了一個(gè)python文件。
當(dāng)本地運(yùn)行時(shí),ObjectDetection/models/research/和slim目錄應(yīng)該被附加到PYTHONPATH。這可以通過在ObjectDetection/models/research/中運(yùn)行以下命令來完成:
在樹莓派上安裝SSD_Lite:
接下來,我們將從TensorFlow檢測(cè)模型動(dòng)物園下載SSD_Lite模型,該模型是在COCO數(shù)據(jù)集上訓(xùn)練的。Tensorflow檢測(cè)模型zoo提供了在COCO數(shù)據(jù)集、Kitti數(shù)據(jù)集、Open Images數(shù)據(jù)集、AVA v2.1數(shù)據(jù)集和iNaturalist物種檢測(cè)數(shù)據(jù)集上預(yù)訓(xùn)練的檢測(cè)模型集合。COCO代表上下文中的公共對(duì)象;這個(gè)數(shù)據(jù)集包含大約330K個(gè)帶標(biāo)簽的圖像。我們需要在object_detection目錄中安裝SSD_Lite模型,所以首先使用下面的命令導(dǎo)航到object_detection目錄:
現(xiàn)在使用以下命令下載并解壓縮SSD_Lite模型:
在安裝了所有依賴項(xiàng)和SSD_Lite模型之后,您需要在同一目錄(object_detection)中創(chuàng)建一個(gè)新的python文件。使用下面的命令創(chuàng)建一個(gè)新的python文件:
使用TensorFlow的OpenCV對(duì)象檢測(cè)的完整代碼在本頁(yè)末尾給出。復(fù)制代碼,將其粘貼到該文件中,并使用Ctrl+X > Y > Enter保存更改。
Python代碼說明
完整的python代碼在本頁(yè)末尾給出。為了更好地解釋,我們?cè)谶@里解釋代碼的重要部分。
因此,在代碼的開頭,我們導(dǎo)入了將在這個(gè)項(xiàng)目中使用的所有必需的庫(kù)。
sys。Path函數(shù)是一個(gè)列表,用于包含指向我們想要導(dǎo)入的模塊的新文件路徑。這是必需的,因?yàn)楣ぷ髂夸浭莖bject_detection文件夾。
接下來,我們提供包含對(duì)象檢測(cè)模塊的目錄和凍結(jié)檢測(cè)圖。pb文件的路徑,其中包含用于對(duì)象檢測(cè)的模型。
現(xiàn)在,我們要加載所有的標(biāo)簽。標(biāo)簽映射將索引映射到類別名稱。
現(xiàn)在,將Tensorflow模型裝入內(nèi)存。
物體周圍的每個(gè)框表示檢測(cè)到一個(gè)特定的物體
分?jǐn)?shù)顯示在結(jié)果圖像上表示信心。
現(xiàn)在,在while循環(huán)中初始化相機(jī)對(duì)象,并將分辨率設(shè)置為(640,480),幀率設(shè)置為10fps
然后以圖像為輸入,運(yùn)行模型,執(zhí)行目標(biāo)檢測(cè)。
通過在被檢測(cè)對(duì)象周圍畫一個(gè)帶有置信度百分比和被檢測(cè)對(duì)象的類標(biāo)簽的方框,可視化檢測(cè)結(jié)果。
測(cè)試基于TensorFlow的對(duì)象檢測(cè)
設(shè)置好一切后,導(dǎo)航到程序目錄并啟動(dòng)對(duì)象檢測(cè)程序。您將看到一個(gè)窗口,顯示您的相機(jī)的實(shí)時(shí)視圖(可能需要20到30秒)。已識(shí)別的對(duì)象周圍會(huì)畫一個(gè)矩形,如下圖所示:
本文編譯自iotdesignpro