一. 概述
相信各位已经从上篇文章 “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】 !!
评论