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