【OpenVINO & Movidius™ 2運算棒】使用台灣路況即時影像對九份老街做街景辨識

本文將帶讀者在嵌入式控制板上面操作OpenVINO,搭配Movidius NCS2使用Tensorflow物件辨識、圖片物件分類並使用台灣路況即時影像,對九份老街進行街景識別。

作者/攝影  袁佑緣

辨識結果請參考影片:

 

本篇文章分為以下幾個步驟分享內容:

  • 安裝OpenVINO套件包
    1. 下載/安裝OpenVINO
    2. OpenVINO環境設定
  • OpenVINO範例測試
    1. 圖片物件分類
    2. 圖片物件識別
  • 結合Movidius NCS2
    1. 設定USB介面
    2. 道路街景物件辨識

 

硬體與軟體準備:

UP Squared

本次使用的嵌入式開發版為UP Squared,使用Intel的中央處理器,可支援Windows/Linux/Android的作業系統, 具有USB3.0跟40個GPIO可用來做外部的電控,可支援OpenVINO以及PCIE版本的Intel Movidius VPU做邊緣運算。

UP Squared UP Squared + NCS2 UP Squared 內部

 

作業系統

本篇中所用的系統版本為的Ubuntu 18.04,可從官方的連結下載系統映像檔(http://releases.ubuntu.com/18.04/ubuntu-18.04.2-desktop-amd64.iso)

。系統安裝完畢後,請開機並接上乙太網路,接下來下載套件時會需要能連到外網。

 

安裝OpenVINO套件包

下載Openvino

請到Intel官方的網站(https://software.intel.com/en-us/openvino-toolkit/choose-download/free-download-linux) 點選Register & Download,註冊並下載最新的Openvino Toolkit for Linux。

下載完成後,請在UP Sqaured上打開終端機(Terminal),並找到下載的壓縮檔, 例如筆者是下載到家目錄下(~),在家目錄下輸入以下的指令的話就可以看到一個tgz的壓縮檔。

Ls

接下來我們需要將這個壓縮檔做解壓縮,以下的指令中跑得壓縮檔名稱會根據 讀者下載下來的版本可能有所不同,以本文章為例其壓縮檔名稱為”l_openvino_toolkit_p_2019.1.144.tgz”。

 

tar xvf l_openvino_toolkit_p_2019.1.144.tgz l_openvino_toolkit_p_2019.1.144/

解壓縮完成後,我們切換工作目錄到解壓縮完成後的目錄,準備做下一步的安裝。

cd l_openvino_toolkit_p_2019.1.144

另外輸入ls的話可以查看一下待會用的一些安裝檔,如下圖。

ls

安裝OpenVINO

在執行安裝檔之前,我們必須先在系統上安裝必要的編譯套件, 首先輸入以下指令來更新及升級系統套件。

sudo apt-get update

sudo apt-get upgrade

接下來安裝必要的編譯套件CMake。

sudo apt-get install cmake

緊接著我們就可以來進行OpenVINO的安裝, 輸入以下的指令來執行安裝檔。

sudo ./install.sh

 

第一步,請先輸入”Enter”確認開始安裝。

 

第二步,接下來是一些使用條款,請按下空白鍵進行向下翻閱

到了最後一段時請輸入”accept”表示已詳細閱讀,並進行後續的安裝。

第三步,問使用者是否同意收集使用過程的一些資用,輸入1表示同意, 輸入2表示不同意。

第四步,程式會檢查是否有缺必要的相依套件,因為之後的安裝會補足缺乏的套件 所以在這一步我們輸入1繼續進行下一步。

第五步,以下就是接下來會安裝的一些套件及所須佔用的容量大小, 可以看到有Inference Engine、Model Optimizer、OpenCV等這些下面應用時會用到的 套件都在安裝的列表當中。按下Enter鍵就會開始安裝囉!

安裝過程會需要一點時間,還請讀者耐心等候。

安裝完成後就會看到以下的提示,按下Enter鍵就可以退出安裝程式了。

最後一步,除了安裝前面一些主要套件外,還必須安裝一些OpenVINO的相依套件。

OpenVINO環境設定

為了使系統能夠使用OpenVINO的函式庫, 我們必須讓使用者操作時的Bash(系統終端機預設的Shell)可以讀到OpenVINO的路徑, 為了方便我們將環境設定的程式新增的Bash的的設定檔中, 這樣下次使用者打開Bash時就會看到OpenVINO的環境已經被設定了,如下圖。

echo "source /opt/intel/openvino/bin/setupvars.sh" >> ~/.bashrc

接下來我們切換工作目錄到Model Optimizer的位置, 並安裝一些必要的相依套件。

cd /opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites
sudo ./install_prerequisites.sh

OpenVINO範例測試

接下來我們來跑兩個OpenVINO內建的範例, 來測試看看我們安裝的OpenVINO是否能正常運作。

首先,請輸入以下的指令來切換工作目錄到demo這個資料夾。

cd /opt/intel/openvino/deployment_tools/demo

 

範例一:圖片物件分類

假設我們現在有一張車子的圖片,我們現在想用深度學習的模型(本範例使用的是SqueezeNet)來 辨識圖片中的物件是一台車子。

輸入以下指令來下載模型並編譯模型。

./demo_squeezenet_download_convert_run.sh

編譯模型會需要幾分鐘的時間,請耐心等候。

最後,執行完的結果如下,可以看到它認為最有可能的是跑車(Sport Car), 其機率高達0.836。另一方面,在效能上本範例能作到的表現是將近50FPS, 可說是非常高呢!

範例二:圖片物件識別

第二個範例我們來看一個街景辨識,程式會框出圖片中多個可識別出的物件。 輸入以下的指令來執行範例程式。

./demo_security_barrier_camera.sh

結合 Intel Movidius NCS 2

前面的範例使用的計算裝置都是UP Squared內建的Intel CPU, 接下來我們將來探討如何使用Intel Movidius NCS2(神經運算棒二代), 來達到加速邊緣計算的效果。 對NCS2有興趣的朋友,筆者在這邊提供購買連結

設定Udev Rules

因為NCS2使用的USB的界面,為了讓Ubuntu系統能夠讀取到外接的NCS2, 需要設定一下系統中的udev rules。

首先,先將使用者加入一個叫做users的群組。

sudo usermod -a -G users "$(whoami)"

接下來複製Intel OpenVINO提供的udev rules到系統的預設路徑中。

sudo cp /opt/intel/openvino/inference_engine/external/97-myriad-usbboot.rules /etc/udev/rules.d/

設定完成後,可以手動重新登入bash、重設udev。

bash
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo ldconfig

不過保險一點,筆者建議還是重開機會比較好。

reboot

道路街景物件辨識

安裝v4l2相關套件

sudo apt-get install v4l-utils

wget http://launchpadlibrarian.net/409574872/v4l2loopback-utils_0.12.1-1_all.deb \
http://launchpadlibrarian.net/409574871/v4l2loopback-source_0.12.1-1_all.deb \
http://launchpadlibrarian.net/409574869/v4l2loopback-dkms_0.12.1-1_all.deb

 

sudo dpkg -i v4l2loopback-*

sudo apt-get install -f

 

為了讓使用者可以取用video loopback裝置,我們必須將目前的使用者加進video這個群組中。

sudo usermod -aG video $USER
logout
groups

加完之後再登出,可以輸入groups確認目前這個使用者是否在video這個群組中。

最後為了要拿到街景影像串流,我們還必須要安裝gstreamer的相關套件。

sudo apt-get install libgstreamer1.0-0 \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
gstreamer1.0-doc \
gstreamer1.0-tools

接下來下載openvino-object-detection這個專案,並進到openvino-object-detection這個資料夾中。

git clone https://github.com/YuanYuYuan/openvino-object-detection.git
cd openvino-object-detection

然後就可以輸入以下的指令來試跑台灣街頭的影像辨識,預設為九份老街的街景。

make stream_detect

 

2 thoughts on “【OpenVINO & Movidius™ 2運算棒】使用台灣路況即時影像對九份老街做街景辨識

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *