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

评论