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

一.   概述

相信各位已經從上篇文章 “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】 !!

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

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

評論