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