工程筆記本 / Intel系列

Intel系列

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

鄭 建彥📅 2019-08-30👁 21
本文將帶讀者在嵌入式控制板上面操作OpenVINO,搭配Movidius NCS2使用Tensorflow物件辨識、圖片物件分類並使用台灣路況即時影像,對九份老街進行街景識別。
作者/攝影  袁佑緣
辨識結果請參考影片: https://www.youtube.com/watch?v=bDuQae6vaW0&feature=youtu.be  

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

  • 安裝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的壓縮檔。 [pastacode lang="markup" manual="Ls" message="" highlight="" provider="manual"/] 接下來我們需要將這個壓縮檔做解壓縮,以下的指令中跑得壓縮檔名稱會根據 讀者下載下來的版本可能有所不同,以本文章為例其壓縮檔名稱為"l_openvino_toolkit_p_2019.1.144.tgz"。   [pastacode lang="markup" manual="tar%20xvf%20l_openvino_toolkit_p_2019.1.144.tgz%20l_openvino_toolkit_p_2019.1.144%2F" message="" highlight="" provider="manual"/] 解壓縮完成後,我們切換工作目錄到解壓縮完成後的目錄,準備做下一步的安裝。 [pastacode lang="markup" manual="cd%20l_openvino_toolkit_p_2019.1.144" message="" highlight="" provider="manual"/] 另外輸入ls的話可以查看一下待會用的一些安裝檔,如下圖。 [pastacode lang="markup" manual="ls" message="" highlight="" provider="manual"/]

安裝OpenVINO

在執行安裝檔之前,我們必須先在系統上安裝必要的編譯套件, 首先輸入以下指令來更新及升級系統套件。 [pastacode lang="markup" manual="sudo%20apt-get%20update" message="" highlight="" provider="manual"/] [pastacode lang="markup" manual="sudo%20apt-get%20upgrade" message="" highlight="" provider="manual"/] 接下來安裝必要的編譯套件CMake。 [pastacode lang="markup" manual="sudo%20apt-get%20install%20cmake" message="" highlight="" provider="manual"/] 緊接著我們就可以來進行OpenVINO的安裝, 輸入以下的指令來執行安裝檔。 [pastacode lang="markup" manual="sudo%20.%2Finstall.sh" message="" highlight="" provider="manual"/]   第一步,請先輸入"Enter"確認開始安裝。   第二步,接下來是一些使用條款,請按下空白鍵進行向下翻閱 到了最後一段時請輸入"accept"表示已詳細閱讀,並進行後續的安裝。 第三步,問使用者是否同意收集使用過程的一些資用,輸入1表示同意, 輸入2表示不同意。 第四步,程式會檢查是否有缺必要的相依套件,因為之後的安裝會補足缺乏的套件 所以在這一步我們輸入1繼續進行下一步。 第五步,以下就是接下來會安裝的一些套件及所須佔用的容量大小, 可以看到有Inference Engine、Model Optimizer、OpenCV等這些下面應用時會用到的 套件都在安裝的列表當中。按下Enter鍵就會開始安裝囉! 安裝過程會需要一點時間,還請讀者耐心等候。 安裝完成後就會看到以下的提示,按下Enter鍵就可以退出安裝程式了。 最後一步,除了安裝前面一些主要套件外,還必須安裝一些OpenVINO的相依套件。

OpenVINO環境設定

為了使系統能夠使用OpenVINO的函式庫, 我們必須讓使用者操作時的Bash(系統終端機預設的Shell)可以讀到OpenVINO的路徑, 為了方便我們將環境設定的程式新增的Bash的的設定檔中, 這樣下次使用者打開Bash時就會看到OpenVINO的環境已經被設定了,如下圖。 [pastacode lang="markup" manual="echo%20%22source%20%2Fopt%2Fintel%2Fopenvino%2Fbin%2Fsetupvars.sh%22%20%3E%3E%20~%2F.bashrc" message="" highlight="" provider="manual"/] 接下來我們切換工作目錄到Model Optimizer的位置, 並安裝一些必要的相依套件。 [pastacode lang="markup" manual="cd%20%2Fopt%2Fintel%2Fopenvino%2Fdeployment_tools%2Fmodel_optimizer%2Finstall_prerequisites%0Asudo%20.%2Finstall_prerequisites.sh%0A" message="" highlight="" provider="manual"/]

OpenVINO範例測試

接下來我們來跑兩個OpenVINO內建的範例, 來測試看看我們安裝的OpenVINO是否能正常運作。 首先,請輸入以下的指令來切換工作目錄到demo這個資料夾。 [pastacode lang="markup" manual="cd%20%2Fopt%2Fintel%2Fopenvino%2Fdeployment_tools%2Fdemo" message="" highlight="" provider="manual"/]  

範例一:圖片物件分類

假設我們現在有一張車子的圖片,我們現在想用深度學習的模型(本範例使用的是SqueezeNet)來 辨識圖片中的物件是一台車子。 輸入以下指令來下載模型並編譯模型。 [pastacode lang="markup" manual=".%2Fdemo_squeezenet_download_convert_run.sh" message="" highlight="" provider="manual"/] 編譯模型會需要幾分鐘的時間,請耐心等候。 最後,執行完的結果如下,可以看到它認為最有可能的是跑車(Sport Car), 其機率高達0.836。另一方面,在效能上本範例能作到的表現是將近50FPS, 可說是非常高呢!

範例二:圖片物件識別

第二個範例我們來看一個街景辨識,程式會框出圖片中多個可識別出的物件。 輸入以下的指令來執行範例程式。 [pastacode lang="markup" manual=".%2Fdemo_security_barrier_camera.sh" message="" highlight="" provider="manual"/]

結合 Intel Movidius NCS 2

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

設定Udev Rules

因為NCS2使用的USB的界面,為了讓Ubuntu系統能夠讀取到外接的NCS2, 需要設定一下系統中的udev rules。 首先,先將使用者加入一個叫做users的群組。 [pastacode lang="markup" manual="sudo%20usermod%20-a%20-G%20users%20%22%24(whoami)%22" message="" highlight="" provider="manual"/] 接下來複製Intel OpenVINO提供的udev rules到系統的預設路徑中。 [pastacode lang="markup" manual="sudo%20cp%20%2Fopt%2Fintel%2Fopenvino%2Finference_engine%2Fexternal%2F97-myriad-usbboot.rules%20%2Fetc%2Fudev%2Frules.d%2F" message="" highlight="" provider="manual"/] 設定完成後,可以手動重新登入bash、重設udev。 [pastacode lang="markup" manual="bash%0Asudo%20udevadm%20control%20--reload-rules%0Asudo%20udevadm%20trigger%0Asudo%20ldconfig%0A" message="" highlight="" provider="manual"/] 不過保險一點,筆者建議還是重開機會比較好。 [pastacode lang="markup" manual="reboot" message="" highlight="" provider="manual"/]

道路街景物件辨識

安裝v4l2相關套件 [pastacode lang="markup" manual="sudo%20apt-get%20install%20v4l-utils" message="" highlight="" provider="manual"/] [pastacode lang="markup" manual="wget%20http%3A%2F%2Flaunchpadlibrarian.net%2F409574872%2Fv4l2loopback-utils_0.12.1-1_all.deb%20%5C%0A%20%20%20%20http%3A%2F%2Flaunchpadlibrarian.net%2F409574871%2Fv4l2loopback-source_0.12.1-1_all.deb%20%5C%0A%20%20%20%20http%3A%2F%2Flaunchpadlibrarian.net%2F409574869%2Fv4l2loopback-dkms_0.12.1-1_all.deb%0A" message="" highlight="" provider="manual"/]   [pastacode lang="markup" manual="sudo%20dpkg%20-i%20v4l2loopback-*" message="" highlight="" provider="manual"/] [pastacode lang="markup" manual="sudo%20apt-get%20install%20-f" message="" highlight="" provider="manual"/]   為了讓使用者可以取用video loopback裝置,我們必須將目前的使用者加進video這個群組中。 [pastacode lang="markup" manual="sudo%20usermod%20-aG%20video%20%24USER%0Alogout%0Agroups%0A" message="" highlight="" provider="manual"/] 加完之後再登出,可以輸入groups確認目前這個使用者是否在video這個群組中。 最後為了要拿到街景影像串流,我們還必須要安裝gstreamer的相關套件。 [pastacode lang="markup" manual="sudo%20apt-get%20install%20libgstreamer1.0-0%20%5C%0A%20%20%20%20gstreamer1.0-plugins-base%20%5C%0A%20%20%20%20gstreamer1.0-plugins-good%20%5C%0A%20%20%20%20gstreamer1.0-plugins-bad%20%5C%0A%20%20%20%20gstreamer1.0-plugins-ugly%20%5C%0A%20%20%20%20gstreamer1.0-libav%20%5C%0A%20%20%20%20gstreamer1.0-doc%20%5C%0A%20%20%20%20gstreamer1.0-tools%0A" message="" highlight="" provider="manual"/] 接下來下載openvino-object-detection這個專案,並進到openvino-object-detection這個資料夾中。 [pastacode lang="markup" manual="git%20clone%20https%3A%2F%2Fgithub.com%2FYuanYuYuan%2Fopenvino-object-detection.git%0Acd%20openvino-object-detection%0A" message="" highlight="" provider="manual"/] 然後就可以輸入以下的指令來試跑台灣街頭的影像辨識,預設為九份老街的街景。 [pastacode lang="markup" manual="make%20stream_detect" message="" highlight="" provider="manual"/] https://www.youtube.com/watch?v=bDuQae6vaW0  

相關文章 📎

留言 💬 (0)

還沒有留言,來當第一個。