一. 概述
相信各位已經從上篇文章 “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】 !!
評論