一. 概述
相信各位已經從上篇文章 “PyeIQ 介紹” 得知 恩智浦(NXP) 的各種機器學習套件的應用方向。
這裡將以系列博文的方式呈現 PyeIQ 的介紹,並帶領各位一步步搭建出 PyeIQ 所需的環境以及軟體套件的安裝,接續著將呈現 PyeIQ 的基本 DEMO 展示。如下圖文章架構圖所示,此文章隸屬機器學習 PyeIQ (Python edge intelligence) 機器學習開發環境的子系列,將延伸探討 PyeIQ 1.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.bz2
$ 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 1.0 安裝
(1) 建立 PyeIQ v1.0資料夾 (執行於 linux 系統) :
$ mkdir PyeIQ_v1.0
$ cd PyeIQ_v1.0
(2) 下載 PyeIQ v1.0套件 (執行於 linux 系統) :
$ git clone https://source.codeaurora.org/external/imxsupport/pyeiq/ -b v1.0
$ cd pyeiq
$ sudo python3 setup.py sdist bdist_wheel
$ cd dist
(3) 進入 i.MX8 Yocto 系統中,查詢當前 ip 位置 (執行於 i.MX8M Plus 系統) :
$ ifconfig
(4) 將 PyeIQ v1.0 安裝檔放置 i.MX8 Yocto 系統之根目錄下,並開始安裝 (執行於 i.MX8M Plus 系統) :
$ scp eiq-1.0.1.tar.gz root@10.2.7.186:~
$ pip3 install eiq-1.0.1.tar.gz
PyeIQ v1.0 安裝成功之畫面
(5) 測試 PyeIQ v1.0 (執行於 i.MX8M Plus 系統) :
$ python3
$ import eiq
若成功載入 eiq 資料庫,則表示可以運行 PyeIQ
$ exit()
四. PyeIQ 1.0 DEMO 範例執行
本篇文章提供數個範例用法,因首次使用會下載相關模組,故請確認開發版有連上網路 :
a. Object Classification
說明 :
此範例使用 Tensorflow lite 框架結合網路模型 MobileNet V2 識別物件。
傳入測試圖片 :
$ scp grace_hopper.bmp root@10.2.7.186:~
查詢使用方式 :
$ python3 label_image.py –help
範例之使用方式 :
$ cd ../../opt/eiq/demos
$ python3 label_image.py --image=~/grace_hopper.bmp
運行結果 :
如下圖所示,傳入測試圖片成功分類出軍服,且準確度高達 87.5 %,推理時間為 3.95 秒。
b. Object Detection
說明 :
此範例使用 Tensorflow lite 框架結合輕量化網路模型 MobileNet V2 -SSD 識別物件。
查詢使用方式 :
$ python3 object_detection_opnecv.py –help
攝像頭來源使用方式 (OpenCV) :
$ python3 object_detection_opencv.py –webcam=”3”
使用微軟的COCO dataset作訓練的 MobileNet V2 + SSD 模型。
攝像頭來源使用方式 (GStream) :
$ python3 object_detection_gstream.py –webcam=”3”
使用微軟的COCO dataset作訓練的 MobileNet V2 + SSD 模型。
c. Fire Detection
說明 :
此範例使用 Tensorflow lite 框架結合網路模型 CNN 識別是否有火源。
傳入測試圖片 :
$ scp campfire.jpg root@10.2.7.186:~
範例之使用方式 :
$ cd ../../opt/eiq/demos
$ python3 fire_detection_image.py --image=~/campfire.jpg
運行結果 :
如下圖所示,傳入營火之測試圖片成功識別出有火源,顯示出 Fire 文字,則推理時間約 0.146 秒。
攝像頭來源使用方式 :
$ python3 fire_detection_camera.py –webcam=”3”
d. Switch Label
說明 :
此範例使用 Tensorflow lite 框架結合輕量化網路模型 MobileNet 識別影像的物件,並提供 GPU 與 NPU 的運行模式,讓使用者快速驗證結果與效益。
範例之使用方式 :
$ cd ../../opt/eiq/apps
$ python3 switch-label.py
運行結果 :
如下圖所示,可以選擇任一預設好的圖片進行測試,已識別該照片(Daisy.bmp) 為雛菊機率會 100%,使用 CPU 運行花費 152.43 ms,而使用 NPU 運行花費 2.47 ms 。
五. 結語
上述已經詳細介紹如何安裝與使用恩智浦的機器學習開發環境 PyeIQ 1.0,更多應用請參考該官方網站。
或是參考另一篇【ATU Book-PyeIQ 系列】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】 !!
評論