2020年4月6日 星期一

【Raspberry Pi 4】【python】【openCV】【TensorFlow】對象檢測API安裝教學


1.更新Raspberry Pi


首先,需要對Raspberry Pi進行全面更新。打開終端並發出:

sudo apt-get update
sudo apt-get dist-upgrade


根據您更新Pi的時間長短,升級可能需要一分鐘到一個小時。





2.安裝TensorFlow


接下來,我們將安裝TensorFlow。下載量很大(超過100MB),因此可能需要重新加載。發出以下命令:

pip3 install tensorflow

TensorFlow還需要LibAtlas軟件包。通過發出以下命令進行安裝。(如果此命令不起作用,請發出“sudo易於得到更新”,然後重試)。

sudo apt-get install libatlas-base-dev

在我們討論的同時,讓我們安裝其他將由TensorFlow目標檢測API使用的依賴項。這些列在TensorFlow的目標檢測的GitHub庫存儲中的安裝說明上。問題:

sudo pip3 install pillow lxml jupyter matplotlib cython
sudo apt-get install python-tk


3.安裝OpenCV

TensorFlow的對象檢測示例通常使用matplotlib來顯示圖像,但我更喜歡使用OpenCV,因為它使用起來更容易,出錯的可能也較小。本指南的GitHub存儲庫中的對象檢測腳本使用OpenCV。因此,我們需要安裝OpenCV。


為了使OpenCV在Raspberry Pi上運行,需要通過apt-get安裝很多依賴項。如果以下任何命令不起作用,請發出“ sudo apt-get update”,然後重試。

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install qt4-dev-tools libatlas-base-dev

現在我們已經安裝了這些,我們可以安裝OpenCV。問題:

sudo pip3 install opencv-python

4.編譯並安裝Protobuf

TensorFlow對象檢測API使用Protobuf,這是一個實現Google協議標題數據格式的串行。您以前需要從源代碼進行編譯,但是現在這很容易安裝!

sudo apt-get install protobuf-compiler

protoc --version


5.設置TensorFlow目錄結構和PYTHONPATH變量
現在我們已經安裝了所有擴展,我們需要設置TensorFlow目錄。返回到您的主目錄,然後創建一個稱為“ tensorflow1”的目錄,將其cd輸入。

mkdir tensorflow1
cd tensorflow1


通過發布從GitHub下載tensorflow存儲庫:

git clone --depth 1 https://github.com/tensorflow/models.git

接下來,我們需要修改PYTHONPATH環境變量,以指向剛下載的TensorFlow存儲庫中的某些目錄。我們希望打開終端時都設置PYTHONPATH,因此我們必須修改.bashrc文件。通過發出以下命令打開它:

sudo nano ~/.bashrc

移至文件末尾,並在最後一行添加:

export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim




然後,保存並退出文件。這樣一來,每次打開新終端時都會調用“ export PYTHONPATH”命令,因此將始終正確設置PYTHONPATH變量。關閉,然後重新打開終端。


現在,我們需要使用Protoc來編譯對象檢測API使用的協議協議(.proto)文件。.proto文件放在/ research / object_detection / protos中,但是我們需要從/ research目錄執行命令。問題:

cd /home/pi/tensorflow1/models/research
protoc object_detection/protos/*.proto --python_out=.



此命令將所有“名稱” .proto文件轉換為“ name_pb2” .py文件。接下來,進入object_detection目錄:

cd /home/pi/tensorflow1/models/research/object_detection

現在,我們將從TensorFlow檢測模型動物園中下載SSD_Lite模型。模型動物園是谷歌的預訓練對象檢測模型的集合,這些模型具有不同水平的速度和準確性。樹莓派的處理器性能較弱,因此我們需要使用處理能力較小的模型。儘管該模型將運行得更快,但要以降低精度為代價。在本教程中,我們將使用SSDLite-MobileNet,這是目前最快的模型。

Google不斷發布具有改進速度和性能的模型,因此請經常回訪模型動物園以查看是否有更好的模型。

下載SSDLite-MobileNet模型並通過發出以下命令解壓縮:

wget http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz

tar -xzvf ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz



6.檢測物體!

好的,現在一切就緒,可以在皮上執行對象檢測!此存儲庫中的Python的腳本Object_detection_picamera.py用於檢測來自Picamera或USB網絡攝像頭的實時供稿中的對象。基本上,腳本會設置模型和標籤映射的路徑,將模型加載到內存中,初始化Picamera,然後開始對Picamera中的每個視頻幀執行對象檢測。

如果您使用的是Picamera,請確保在Raspberry Pi配置菜單中將其啟用。



通過發出以下命令,將Object_detection_picamera.py文件下載到object_detection目錄中:


wget https://raw.githubusercontent.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi/master/Object_detection_picamera.py


通過發出以下命令來運行腳本:


python3 Object_detection_picamera.py


該腳本默認為使用附加的Picamera。如果您有USB網絡攝像頭,則在命令末尾添加--usbcam:


python3 Object_detection_picamera.py --usbcam


腳本初始化後(最多可能需要30秒),您將看到一個窗口,顯示相機實時取景。視圖內的公共對象將被識別並在其周圍繪製一個矩形。


使用SSDLite模型,Raspberry Pi 3的性能相當好,實現了高於1FPS的幀速率。對於大多數實時對象檢測應用來說,這足夠快。



注意:如果您打算長時間在Pi上運行此程序(大於5分鐘),請確保在Pi的主CPU上安裝了散熱器!所有處理都會導致CPU熱運行。沒有散熱器,由於高溫會關閉。