【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次,发文人进小黑屋喔~

评论