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熱運行。沒有散熱器,由於高溫會關閉。
