【ATU Book-i.MX8 系列 - PyeIQ】PyeIQ 2.0 安裝與應用

一.   概述

相信各位已經從上篇文章 “PyeIQ 介紹” 得知 恩智浦(NXP) 的各種機器學習套件的應用方向。
這裡將以系列博文的方式呈現 PyeIQ 的介紹,並帶領各位一步步搭建出 PyeIQ 所需的環境以及軟體套件的安裝,接續著將呈現 PyeIQ 的基本 DEMO 展示。如下圖文章架構圖所示,此文章隸屬機器學習 PyeIQ (Python edge intelligence) 機器學習開發環境的子系列,將延伸探討 PyeIQ 2.0 安裝與應用方式。


PyeIQ 系列博文 - 文章架構示意圖



二.   環境架設

首先須在 Linux (Ubuntu 18.04) 的環境下搭建環境,請開啟終端機執行以下步驟 :

 a. Yocto BSP 必要軟體安裝

(1) 安裝必要軟體 :

$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm curl repo
$ sudo apt-get upgrade

藍字為 Linux 終端機指令,直接複製即可執行,灰色租體字須對應帳號或相應位置、或是可修改參數。

 (2) 下載 jdk-8u191-linux-x64.tar.gz :

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

(3) 安裝 Java Development Kit : 

$ sudo mkdir /usr/java
$ sudo tar xf jdk-8u191-linux-x64.tar.gz -C /usr/java
$ sudo vim /etc/profile

開啟檔案添加環境變數,新增設定如下兩行:

export JAVA_HOME=/usr/java/jdk1.8.0_191
export PATH=/usr/java/jdk1.8.0_191/bin:$PATH

$ source /etc/profile$sudo update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_191/bin/java 300
$ sudo update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.8.0_191/bin/javac 300
$ sudo update-alternatives --install /usr/bin/javaws javaws /usr/java/jdk1.8.0_191/bin/javaws 300
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac$sudo update-alternatives --config javaws

確認版本,應 java version “1.8.0_191”
$ java -version 

(4) 設置 git 帳號 : 

$ git config --global user.name "user name"
$ git config --global user.email user.name@wpi-group.com

(5) 設置 repo環境 : 

$ cd ~
$ mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~ /bin/repo$ chmod a+x ~ /bin/repo
$ export PATH=~/bin:$PATH
$ mkdir 
$ cd 
$ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-zeus -m imx-5.4.3-2.0.0.xml

※ 請安裝 PyeIQ 相應的 BSP 版本,請修改灰色粗體字部份 (其他版本資訊如下表) 即可。

 

※ 請點選下方連結,即可查看最新版本資訊 (Zeus 為 Yocto 3.0 別名)

https://source.codeaurora.org/external/imx/imx-manifest 

repo sync 完成的畫面

$ repo sync

 

 b. Yocto BSP 編譯  

(1) BSP 環境設定 :

[MACHINE=] [DISTRO=fsl-imx-] source ./imx-setup-release.sh -b
$ EULA=1 MACHINE=imx8mpevk DISTRO=fsl-imx-xwayland
$ source ./imx-setup-release.sh -b buildxwayland 


※ 平台設置 (MACHINE)  :

若是建立於 i.MX8QM 須設為 imx8qmmek ,若是建立於 i.MX8MPlus 則須設為 imx8mpevk 。 其他平台以此類推…

※ 發行版 (DISTRO)  : 

 fsl-imx-wayland : Wayland weston graphics.
 fsl-imx-xwayland : Wayland graphics and X11. (建議使用)
 fsl-imx-fb : Frame Buffer graphics , no X11 or Wayland. (i.MX8不支持)

(2) 設置 local.conf 檔案:

請至 /buildxwayland/conf/local.conf 加入以下指令

$ IMAGE_INSTALL_append = "packagegroup-imx-ml" 

(3) BSP 編譯 :

支援 PyeIQ 所需的 Qt5 資源 (建議使用)
$ bitbake imx-image-full

(4) BSP 編譯完成 :

BSP 建置完成的畫面

 

c. Yocto BSP 編譯至 SD Card 

(1) 確認是否已讀取 SD Card :

$ ls /dev/sd*


通常 SD Card位置為 /dev/sdb

(2) 燒錄 Image 檔至 SD Card 中 :

$ export DEVSD=/dev/sdb
$ cd  /buildxwayland/tmp/deploy/images/imx8mpevk
$ bunzip2 -dk -f imx-image-full-imx8mpevk.wic.bz
$ sudo dd if=imx-image-full-imx8mpevk.wic of=${DEVSD} bs=1M && sync

(此圖 mx-image-full-imx8qmmek.wic 應改為 imx-image-full-imx8mpevk.wic)

可利用軟體方式重新分配 filesystem 的容量

(3) 燒錄完成後,將 SD Card 放置 i.MX8M Plus 開機 :

開機成功畫面

 

三.  PyeIQ 2.0 安裝

*** 快速安裝方式 (執行於 i.MX8M Plus 系統)$ pip3 install eiq

(1) 建立 PyeIQ v2.2.0資料夾 (執行於 linux 系統)

***目前最新版本為 PyeIQ 2.2.0 故以此版本作參考

$ mkdir PyeIQ_v2.2.0
$ cd PyeIQ_v2.2.0

(2) 下載 PyeIQ v2.0.0套件 (執行於 linux 系統)

$ git clone https://source.codeaurora.org/external/imxsupport/pyeiq/ -b v2.0.0
$ cd pyeiq

*** 可以至 https://source.codeaurora.org/external/imxsupport/pyeiq/ 查詢最新版本

(3) 查詢 PyeIQ 現有版本 (執行於 linux 系統)

$ git tag -l

(4) 切換 PyeIQ v2.2.0版本 (執行於 linux 系統)

$ git checkout tag_v2.2.0


(5) 產生 PyeIQ 安裝壓縮檔 (執行於 linux 系統)

$ sudo python3 setup.py sdist bdist_wheel
$ cd dist

(6) 進入 i.MX8 Yocto 系統中,查詢當前 ip 位置 (執行於 i.MX8M Plus 系統)

$ ifconfig

(7) PyeIQ v2.0.0 安裝檔放置 i.MX8 Yocto 系統之根目錄下,並開始安裝 (執行於 i.MX8M Plus 系統)

$ scp eiq-2.2.0.tar.gz root@10.2.7.xxx:~
$ pip3 install eiq-2.2.0.tar.gz
PyeIQ v2.2.0 安裝成功之畫面

(8) 測試 PyeIQ v2.2.0 (執行於 i.MX8MP 系統)

$ python3
$ import eiq
若成功載入 eiq 資料庫,則表示可以運行 PyeIQ

$ exit()

  

四.   PyeIQ 2.0 DEMO 範例執行

本篇文章提供數個範例用法,因首次使用會下載相關模組,故請確認開發版有連上網路 :

a. Basic Operationa. Basic Operation 

(1) 列出操作方式 :

$ pyeiq 

(2) 查詢現有應用程式 :

$ pyeiq –list-apps 

(3) 查詢現有應用模組 :

$ pyeiq --list-demos 

(4) 進階查詢各 API 使用方式 :

$ pyeiq -h object_detection_dnn  

 

b. Object Classification

說明 : 

此範例使用 Tensorflow lite 框架結合輕量化網路模型 MobileNet去分類物件。

範例之使用方式 :

$ pyeiq --run object_classification_tflite

運行結果 :

如下圖所示,分類結果依序為 山貓(lynx)  46.67 % 、 虎貓(tiger cat)  23.92 % 、 埃及貓(Egyptian cat)  23.92 %。為此圖片最相似於 山貓(lynx) 的特徵分類,在影像尺寸為 548x728則推理時間約0.0029 秒。 

查詢使用方式 :

$ pyeiq --run object_classification_tflite --help

影像來源之使用方式  :

$ pyeiq --run object_classification_tflite --image=/path_to_the_image

影片來源之使用方式  :

$ pyeiq --run object_classification_tflite --video_src=/path_to_the_video

攝像頭來源之使用方式 :

$ pyeiq --run object_classification_tflite --video_src=/dev/video

 

c. Object Detection

說明 : 

此範例使用 Tensorflow lite 框架結合輕量化網路模型 MobileNet -SSD 識別物件。

範例之使用方式 :

$ pyeiq --run object_detection_tflite

運行結果 :

如下圖所示,由左至右各別識別出公車(bus)、時鐘(clock)、汽車(car)、人(person),在影像尺寸為 538x390則推理時間約0.0135 秒。 

查詢使用方式 :

$ pyeiq --run object_detection_tflite --help

影像來源之使用方式  :

$ pyeiq --run object_detection_tflite --image=/path_to_the_image

影片來源之使用方式  :

$ pyeiq --run object_detection_tflite --video_src=/path_to_the_video

攝像頭來源之使用方式 :

$ pyeiq --run object_detection_tflite --video_src=/dev/video

 

d. Switch Classification Image

說明 : 

此範例使用 Tensorflow lite 框架結合輕量化網路模型 MobileNet 識別影像的物件,並提供 CPU 與 NPU 的運行模式,讓使用者快速驗證結果與效益。

Switch Classification Image範例之使用方式 :

$ pyeiq --run switch_image

運行結果 :

如下圖所示,可以選擇任一預設好的圖片進行測試,已識別該照片(Daisy.bmp) 為雛菊機率會 100%,使用 CPU 運行花費 152.82 ms,而使用 NPU 運行花費 2.67 ms 。  

Switch Detection Video範例之使用方式  :

$ pyeiq --run switch_video

 

e. Using Camera DEMO

說明 : 

此小節為上述所有範例的延伸應用,將介紹如何確認開啟 Camera 以展現 DEMO (僅適用PyeIQ v2.x )。

查詢攝像頭裝置位置 :

$ ls -ltrh /dev/video* 

使用 Gstream 資料庫方式,確認攝像頭是否成功運行 :

$ gst-launch-1.0 v4l2src device=/dev/video* num-buffers=1 ! queue ! jpegenc ! filesink location=test.jpg  
檢查輸出圖片(test.jpg) 是否有正確擷取當前畫面。 

已確認該 USB Webcam 為裝置 /dev/video1。(因擷取初始畫面故容易有曝光問題)

攝像頭來源之使用方式 (一般使用方式) :

$ pyeiq --run object_detection_tflite --video_src=1

攝像頭來源之使用方式 (Gstream指令) :

$ pyeiq --run object_detection_tflite --video_src="v4l2src device=/dev/video1!videoscale!videoconvert!appsink"

運行結果 :

如下圖所示,使用效果最佳的 object_detection_tflite 範例來識別物件。
(實際測試在複雜度較低的環境最高可達每秒 56 張 FPS、不畫框則平均每秒可達43張 FPS)

 

五.  結語

上述已經詳細介紹如何安裝與使用恩智浦的機器學習開發環境 PyeIQ 2.0,更多應用請參考該官方網站
相對於 eIQ 而言, PyeIQ 更加注重於平台的轉移與快速實現 !! 後續章節,將介紹 eIQ 該如何使用以及各推理引擎的用法,幫助開發者快速地搭建所需的環境 !!

 

六.  參考文件

[1] NXP Community -  PyeIQ 1.x 網站
[2] NXP Community -  PyeIQ 2.x 網站
[3] NXP Community -  A Python Framework for eIQ on i.MX Processors
[4] NXP Document - i.MX Yocto Project User's Guide.pdf

如有任何相關 PyeIQ 技術問題,歡迎至博文底下留言提問 !!
接下來還會分享更多 PyeIQ 的技術文章 !!敬請期待 【ATU Book-i.MX8 系列 - PyeIQ】 !!


 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論