硬 件 平 台
平台:OK3399-C开拓板
系统:Desktop
模块:TB-RK1808S0
环境准备:飞凌OK3399-C开拓板,RK1808人工智能打算棒(固件版本为V1.3.4),usb摄像头,摄像头和打算棒都插入OK3399-C开拓板。
利用lsusb命令查看,如下(红框部分2207:0018即为RK1808人工智能打算棒):
输入命令如下:
把稳:由于被动模式须要安装的库文件较多,占用空间较大,以是须要扩大rootfs分区,修正param/parameter.txt文件0x00f00000@0x0005a000(rootfs) //0x f00000个块(512字节)=7.5G
改为
0x01800000@0x0005a000(rootfs) //0x1800000个块=12G
修正后进入系统,查看分区大小:
概 述
AI打算区分为四个不同的象限,分别是云端演习、云端推理,边缘演习以及边缘推理。个中终端推理,险些都集中在Arm架构生态上。AI神经网络打算目前可以通过CPU、GPU、DSP、NPU、FAGA等完成,但不同的硬件特性会导致效率和功耗的不同。个中NPU——嵌入式神经网络处理器采取“数据驱动并行打算”的架构,最善于的便是视频、图像类的海量多媒体数据的处理,并且比较GPU等具有更低的功耗。我司推出OK3399-CDesktop+RK1808(含3Tops算力NPU)的组合,在知足AI边缘打算的情形下,使得功耗大幅降落。
RK1808人工智能打算棒是一个专用AI运用模块,拥有主动模式和被动模式两种模式。
主动模式下:RK1808人工智能打算棒作为主动设备,RK1808人工智能打算棒内部默认已安装rknn-toolkit和rknn-api,上位机(也称宿主机)无需安装rknn-toolkit和rknn-api,模型及算法固化在RK1808人工智能打算棒中,OK3399-C通过USB口向打算棒输入数据(例如图片和视频流),RK1808人工智能打算棒自动完成数据的前处理、推理、后处理,然后把处理结果通过USB口输出给OK3399-C。
为了方便用户通过USB口传输数据,RK1808人工智能打算棒会把USB口虚拟成网卡等标准设备,用户只需通过标准设备接口的操作(例如网络的socket编程)即可完成对RK1808人工智能打算棒数据的输入和输出。
被动模式下:OK3399-C通过RKNN-Toolkit将模型及前处理后的数据传输给RK1808人工智能打算棒,RK1808人工智能打算棒完成推理,并把结果返回OK3399-C,OK3399-C进行后处理以及显示等操作。
主 动 模 式
细节如下:
1. RK1808打算棒插入上位机后,会被虚拟成网卡设备;
2. 上位机OK3399-C进行虚拟网卡配置,配置IP为192.168.180.1,担保上位机和1808中间的网络连接正常;
3. 打算棒默认IP为192.168.180.8,账号密码皆为toybrick,用户可以SSH登录打算棒,拷贝模型和server做事程序到打算棒;
4. 打算棒端运行server做事程序,用来吸收上位机的连接要求,并调用RKNN进行处理,再返回结果;
5. 上位机运行client程序,连接server成功之后,发送推理要求,从1808端获取返回结果。
1-打算棒网络配置与网络共享配置
1、打算棒网络配置
上位机利用OK3399-C Forlinx Desktop系统,点击右下角网络按钮选择弹出窗口中的“EditConnections...”选项:
选择打算棒usb网卡天生的有线网络节点:
配置该节点为手动模式,设置IP:192.168.180.1,子网掩码:255.255.255.0,并保存:
终端输入ifconfig指令查看网络节点配置如下,可见usb网卡配置完成:
ping一下1808打算棒网络192.168.180.8,如下网络可以连通:
利用ssh登录1808打算棒,用户名和密码默认都为toybrick,如下上岸成功:
2、网络共享配置
运行ifconfig,可以看到eth0、wlan0等宿主机网卡,我们用于访问外网,enx10dcb69f022c为USB网卡(RK1808人工智能打算棒虚拟网卡)。不同的系统网卡名称可能不一样,以实际网卡名称为准。
首先配置宿主机网络,使宿主机可以连通以太网,这里我们利用wlan0节点来上网,详细配置不再赘述。
命令行实行如下命令,个中enx10dcb69f022c须要修正成用户本地实际值;正常情形只要设置一次即可,若拔插设备创造网卡名称改变了或者用户手动删除该网卡,则须要重新设置。
1. sudo nmcli connection add con-name toybrick type ethernet ifname enx10dcb69f022c autoconnect yes ip4 192.168.180.1/24
配置NAT功能,实行如下命令,个中eno1须要修正成用户本地实际值;关机失落效,以是每次电脑重启都要重新设置。
1. sudo sysctl -w net.ipv4.ip_forward=1sudo iptable -Fsudo iptables -t nat -Fsudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
把稳:以自己开拓板联网的实际端口为准,例:eth0
iptables命令部分释义如下:
iptables --help
--flush -F [chain] Delete all rules in chain or all chains
--table -t table table to manipulate (default: `filter')
--append -A chain Append to chain
--jump -j target target for rule (may load target extension)
MASQUERAD,地址伪装,算是snat中的一种特例,可以实现自动化的snat
SNAT是source networkaddress translation的缩写,即源地址目标转换。比如,多个PC机利用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址更换成路由器的ip,当外部网络的做事器比如网站web做事器接到访问要求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip,这是由于,这个做事器收到的数据包的报头里边的“源地址”,已经被更换了,以是叫做SNAT,基于源地址的地址转换。
DNAT是destinationnet workaddress translation的缩写,即目标网络地址转换,范例的运用是,有个web做事器放在内网配置内网ip,前端有个防火墙配置公网ip,互联网上的访问者利用公网ip来访问这个网站,当访问的时候,客户端发出一个数据包,这个数据包的报头里边,目标地址写的是防火墙的公网ip,防火墙会把这个数据包的报头改写一次,将目标地址改写成web做事器的内网ip,然后再把这个数据包发送到内网的web做事器上,这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了,即DNAT,基于目标的网络地址转换。
2、主动模式Mobilenet-ssd测试01 环境哀求
1)参考“打算棒网络配置与网络共享配置”章节,完成RK1808人工智能打算棒网络配置(RNDIS)以及网络共享配置。
2)宿主机须要插入USB摄像头,并连接显示器。
02 支配打算棒程序SSH办法
该办法通过ssh连接到RK1808人工智能打算棒,运行相应程序。
打算棒系统用户名:toybrick 密码:toybrick
打算棒系统用户名:root 密码:toybrick
建议用toybrick用户登录
1)利用官方链接下载Mobilenet-SSD主动模式demo软件包,解压,链接如下:
https://eyun.baidu.com/s/3htJNFwS
2)拷贝解压目录中的1808目录至打算棒
1. scp -r 1808/ toybrick@192.168.180.8:/home/toybrick/
3)ssh进入打算棒
1. ssh toybrick@192.168.180.8
4)安装依赖包
1. sudo dnf install -y cmake make
5)编译
1. cd 1808/mkdir buildcd build/cmake ..make -j4
6)直接运行程序或设置程序为开机启动
•直接运行:
1. ./1808_ssd_demo
3、支配上位机程序(以OK3399-Cdesktop为例)1)安装依赖包make/cmake/opencv
1. sudo apt-get install -y make cmake libopencv-dev
2)进入Mobilenet-SSD主动模式demo软件包中的host目录,修正host/ssd_demo.cpp,根据开拓板实际情形修正打开的摄像头节点:
1. cd host/
2. int main(void)
3. {
4. //ret = test.run(VIDEO_NODE, post_process, &data);
5. ret = test.run("/dev/video10", post_process, &data);
6. }
3)编译
1. mkdir buildcd build/cmake ..make -j4
4)打算棒程序运行起来后,运行上位机程序
1. ./ssd_demo
效果如下:
3、主动模式yolov3测试01环境哀求
1)参考“打算棒网络配置与网络共享配置”章节,完成RK1808人工智能打算棒网络配置(RNDIS)以及网络共享配置。
2)OK3399-C开拓板须要插入USB摄像头,并连接显示器。
02支配步骤打算棒端:
1)利用官方链接下载示例源码master_yolov3.zip,解压,链接如下:
https://eyun.baidu.com/s/3ekyvJS#sharelink/path=%2F
2)拷贝解压目录中的1808目录至打算棒:
scp -r 1808/ toybrick@192.168.180.8:/home/toybrick/
3)通过ssh连接到RK1808人工智能打算棒,运行yolov3master端程序
打算棒系统用户名toybrick 密码toybrick
打算棒系统用户名root 密码toybrick
建议用toybrick用户登录,安装python依赖包,root用户可能存在未知风险。
进入打算棒:
ssh toybrick@192.168.180.8
4)安装依赖包:
sudodnf install python3-opencv -y
5)进入刚才拷贝的1808目录,运行1808端程序。
宿主机端:
1)安装依赖库
pip3 install --user numpy
sudo apt-get install -y python3-opencv
2)运行host端程序
3、效果如下:
被 动 模 式
被动模式开拓流程图如下:
被动模式整体数据流程图如下:
01
被动模式Mobilenet-ssd测试
1、利用官方链接下载被动模式Mobilenet-ssd源码
http://t.rock-chips.com/wiki.php?mod=view&id=71
或者利用用户资料中供应的源码,目录为:用户资料\linux\源码\被动模式\Mobilenet-ssd\
2、安装编译器、OpenCV、rknn-api
sudo apt-get install cmake gcc g++ //安装编译器
验证编译器已安装成功:
sudo apt-get install libopencv-dev //安装opencv库文件
rknn-api 安装脚本在 slave_mobilenet_ssd 压缩包中
cd slave_mobilenet_ssd/install_rknn
sudo ./install_rknn_api.sh //安装rknn_api和通信程序
实行脚本后,下载了rknn_api和通信程序:
3、代码编译运行
1)cd slave_mobilenet_ssd
修正ssd_demo.cpp文件中main函数中如下语句,根据开拓板实际情形修正打开的摄像头节点
ret= test.run(VIDEO_NODE, post_process, &data);
改为:
ret= test.run("/dev/video10", post_process, &data);
2)mkdir build
3)cd build
4)cmake..
5)make
编译结果天生ssd_demo可实行程序:
6)npu_transfer_proxy& //启动NPU守护进程,通信代理做事。该程序由原厂供应。
7)在PC上插入USB摄像头
8)在PC界面终端上实行./ssd_demo,将会在屏幕上显示SSD图像结果
9)按'ESC'键退出运行
02
被动模式Rock-X测试
1、利用原厂链接下载Rock-X SDK并解压,链接如下:
https://eyun.baidu.com/s/3o9xqPPC#sharelink/path=%2F
或者利用用户资料中供应的源码,目录为:用户资料\linux\源码\被动模式\Rock-X\
2、安装编译器sudo apt-get install cmake gcc g++
3、插入打算棒,等待上位机识别到打算棒
4、上位机运行rock-x依赖rknn_api, npu_transfer_proxy
用户可以先按照本文档第三章“被动模式Mobilenet-ssd测试”安装rknn_api;用户也可以通过原厂供应的链接地址直接下载rknn_api, npu_transfer_proxy,如下:
http://repo.rock-chips.com/rk1808/rknn-api/
http://repo.rock-chips.com/rk1808/npu_transfer_proxy/
5、运行npu_transfer_proxy和打算棒进行通信
npu_transfer_proxy &
6、编译测试用demo
cd demo/command_line_demo
./build-linux-rk3399pro-on-device.sh
此时会编译得到rock-x中demo目录下的各用例并存放在install目录下
7、测试天生的用例中的rockx_face_landmark_demo
cd install/rockx_linux_rk3399pro/rockx_face_landmark_demo/
export LD_LIBRARY_PATH=../lib
./rockx_face_landmark face4.jpg 68 //人脸特色点定位(68点)
8、测试效果如下:
9、Rock-X command_line_demo供应的例程
rockx_carplate_demo 车牌识别
rockx_face_attribute_demo 人脸属性识别(性别、年事)
rockx_face_detection_demo 人脸检测
rockx_face_landmark_demo 人脸特色点定位
rockx_head_detection_demo 人头检测
rockx_object_detection_demo 物体检测
rockx_object_track_demo 物体运动检测
rockx_pose_body_demo 人体姿态检测
rockx_pose_finger_demo 手掌节点姿态检测
rockx_face_liveness_demo 活体检测
rockx_face_recognition_demo 人脸识别比拟
3、被动模式yolov3测试
把稳该测试中安装的部分包由于资源问题下载可能会因超时而无法下载,碰着这种情形,可以利用我司供应的现成的安装包,目录为:用户资料\ linux\源码\被动模式\yolov3 demo\安装包\
1、安装python3.5,ubuntu18.04默认python3.6,该版本部分库没有资源无法安装,以是改换为python3.5
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.5-dev
sudo apt-get --reinstall install python3.5-minimal
sudo mv /usr/bin/python3 /usr/bin/python3-old
sudo ln -s /usr/bin/python3.5 /usr/bin/python3
sudo update-alternatives --install /usr/bin/python python/usr/bin/python3.5 300
验证python3.5是否安装成功并且python3已经修正为默认利用3.5:
安装新版pip:
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
sudo pip3 install setuptools --upgrade
sudo ln -s /usr/local/bin/pip3 /usr/bin/pip3
验证pip安装成功且默认利用python3.5的pip工具:
2、安装依赖库
sudo apt-get install cmake gcc g++ libprotobuf-dev protobuf-compiler
sudo apt-get install liblapack-dev libjpeg-dev zlib1g-dev
sudo apt-get install python3-dev python3-pip python3-scipy
sudo apt-get install python3-opencv python3-numpy python3-lmd bpython3-h5py
pip3 install wheel setuptools
sudo apt-get build-dep python3-h5py && pip3 install h5py
pip3 install --user scipy
pip3 install --user grpcio==1.26.0
pip3 install --user onnx
pip3 uninstall pillow
pip3 install --user pillow==4.2.1
pip3 uninstall h5py
pip3 install --user h5py==2.8.0rc1
把稳部分安装包由于资源问题下载可能会因超时而无法下载,可以利用我司供应的现成的安装包。
查看上述指令安装的包是否安装到python3.5目录下:
3、安装TensorFlow
wget http://repo.rock-chips.com/python/tensorflow-1.11.0-cp35-none-linux_aarch64.whl
pip3 install --user tensorflow-1.11.0-cp35-none-linux_aarch64.whl
TensorFlow也可以到/home/forlinx/.local/lib/python3.5/site-packages/目录下查看安装情形
4、Python3.5安装OpenCV3
1)下载opencv和opencv_contrib,这两部分代码下载也比较困难,建议利用我司用户资料中供应的源码包,目录为:用户资料\linux\源码\被动模式\yolov3demo\安装包\:
cd~
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
2)编译opencv源码
cd~/opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DWITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -DINSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -DBUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_GTK=ON -D WITH_OPENGL=ON ..
make
编译结果如下:
3)安装OpenCV
sudo make install
部分安装信息:
OpenCV的安装文件也可以在系统中找到,例如:
/usr/local/lib/libopencv_core.so.4.3.0
/usr/local/include/opencv4/opencv2/cvconfig.h
编译时会有报错办理方法可以参考如下链接:
https://stackoverflow.com/questions/28776053/opencv-gtk2-x-error
http://www.luyixian.cn/news_show_316237.aspx
或者可以利用我司供应的现成的OpenCV的源码。
5、安装rknn-toolkit
wget http://repo.rock-chips.com/python/tensorflow-1.11.0-cp35-none-linux_aarch64.whl
pip3 --default-timeout=100000 install --user rknn_toolkit-1.1.0-cp35-cp35m-linux_aarch64.whl
rknn_toolkit也可以到/home/forlinx/.local/lib/python3.5/site-packages/目录下查看安装情形,可以看到对应安装目录:
6、下载yolov3 demo程序测试运行
wget -r -np -nc -nH http://repo.rock-chips.com/rk1808/yolov3/
cd rk1808/yolov3/
修正rknn_camera_tiny_multiProcess.py中打开的摄像头节点:
video= cv2.VideoCapture(0)
改为:
video= cv2.VideoCapture("/dev/video10")
把稳:摄像头节点须要依据自己开拓板的实际情形来修正
命令行实行:
python3.5 rknn_camera_tiny_multiProcess.py
运行结果如下:
至此,OK3399-C开拓板+RK1808人工智能打算棒在主动模式和被动模式下的测评就告一段落。