点击头像,立即联系微信客服
       福州牛新牛科技有限公司是一家专业的嵌入式人工智能物联网(Embedded AIoT)产品供应商和技术方案商,同时也是一家集设计、研发、生产和销售于一体的国家级高新技术企业。公司批量供应AI核心板、工控板、AIoT智能网关、AI边缘计算终端等产品,并提供定制开发服务和一站式AIoT解决方案。NNEWN提供免费技术方案咨询和项目评估,有需要的读者可以点击右侧图标跳转到需求提交页面提交您的项目需求:
树莓派3b+上使用RK1808人工智能计算棒(主动模式)实现物体识别
来源: | 作者:nnewn | 发布时间: 2021-07-12 | 2257 次浏览 | 分享到:

1.主动模式介绍


主动模式的上位机可以是任何带有USB接口的平台及任何操作系统,包括了x86/x64/arm32/arm64的linux/windows/mac os及单片机、树莓派等等。

本教程以树莓派为例讲述主动模式的单计算棒部署流程。


1808计算棒插入树莓派后,会被虚拟成网卡设备

  • 进行虚拟网卡配置,保证上位机和1808中间的网络连接正常

  • 计算棒默认IP为192.168.180.8,账号密码皆为toybrick

  • 计算棒端运行server服务程序,用来接收上位机的连接请求,并调用RKNN进行处理,再返回结果

  • 上位机运行client程序,连接server成功之后,发送推理请求,从1808端获取返回结果



2.硬件组成


  • raspberrypi 3b+

  • 1808人工智能计算棒

  • 键盘、鼠标

  • USB camera

  • 显示屏

  • HDMI数据线

  • USB HUB

  • 网线用于连接因特网

  • micro USB供电




3. 树莓派网络配置


网络配置的目的,是为了使树莓派和计算棒之间能够通过网络进行通信。

3.1 虚拟网卡配置


1808计算棒插入树莓派后,会被虚拟成网卡设备,树莓派会自动生成网卡节点eth1。我们需要使用nmcli 工具删除eth1,再重新进行虚拟网卡配置。

sudo apt-get install network-manager

sudo nmcli con delete eth1

sudo nmcli connection add con-name toybrick type ethernet ifname eth1 autoconnect yes ip4 192.168.180.1/24



使用ifconfig命令,可以看到eth1的地址以及被设置成192.168.180.1


完成以上配置后,上位机即可与1808计算棒正常通信,可以ping通或者ssh登录到192.168.180.8

注意:

  1. 以上配置完成一次即可。

  2. 此时1808暂时还不能访问外网,1808上还无法安装软件包。


3.2 NAT网络配置


如果计算棒需要访问外网进行软件包安装,或者软件升级,则需要进行此步骤,本步骤关机后需要重新配置。

sudo sysctl   -w net.ipv4.ip_forward=1

sudo iptables -F

sudo iptables -t nat -F

sudo  iptables  -t  nat  -A POSTROUTING -o eth0 -j MASQUERADE




4. 主动模式C语言开发


demo下载地址:https://eyun.baidu.com/s/3htJNFwS

下载源码到树莓派用户根目录,并解压源码

tar -xvf master_mobilenet_ssd.tar



4.1 1808计算棒部署

1、拷贝解压目录中的1808目录至计算棒,并重命名为mobilenet_ssd

scp -r ~/master_mobilenet_ssd/1808 toybrick@192.168.180.8:/home/toybrick/mobilenet_ssd/


2、ssh进入计算棒,账号密码均为toybrick

ssh  toybrick@192.168.180.8


3、安装依赖包(确保3.2 NAT网络配置完成,可以尝试在1808上sudo ping www.baidu.com确认是否可以访问外网)

1808计算棒默认已安装rknn_api库。

sudo dnf clean all

sudo dnf install -y cmake make


4、编译


cd mobilenet_ssd

mkdir build && cd build

cmake ..

make -j4



5、开机自启动,在/usr/local/bin/tb.local.after中加入以下代码,重启后,1808将会自动运行mobilenet_ssd服务程序

cd /home/toybrick/mobilenet_ssd

sudo -u toybrick /home/toybrick/mobilenet_ssd/boot.sh

复制代码


4.2 树莓派部署


opencv仅为方便demo效果演示使用,非主动模式必须。

1、树莓派开发环境安装

sudo apt-get install -y make cmake libopencv-dev


2、编译

cd ~/master_mobilenet_ssd/host


3、运行demo。在4.1中,我们已经在1808上完成mobilenet_ssd的sever程序的自动启动。

./ssd_demo

可以在屏幕上看到mobilenet_ssd的推理画面,按ESC退出。



5. 主动模式Python开发


从github上克隆源码到树莓派用户根目录,树莓派默认已安装git。

cd ~

git clone https://github.com/rockchip-toybrick/master_rockx_demo.git



5.1 1808计算棒部署


1、拷贝1808目录至计算棒,并重命名为rockx


scp -r ~/master_rockx_demo/1808 toybrick@192.168.180.8:/home/toybrick/rockx/



2、ssh进入计算棒,账号密码均为toybrick


ssh  toybrick@192.168.180.8


3、系统升级,目的在于保证驱动一致性,升级完成后需要重启。(确保3.2 NAT网络配置完成,可以尝试在1808上sudo ping www.baidu.com确认是否可以访问外网)

sudo dnf update



4、python环境包安装(确保2.2 NAT网络配置完成,可以尝试在1808上sudo ping www.baidu.com确认是否可以访问外网)

opencv仅为方便demo效果演示使用,非主动模式必须(本demo在传输过程中会使用opencv对图像进行编码和解码)。

rockx封装了一些常用的模型,可以简化编程,非主动模式必须。

TMPDIR必须设置,否则由于系统tmp目录过小,会导致安装Python包失败。

mkdir /home/toybrick/tmp

export TMPDIR=/home/toybrick/tmp

sudo dnf install -y python3-opencv

pip3 install --user rockx


5、开机自启动开机自启动,在/usr/local/bin/tb.local.after中加入以下代码,重启后,1808将会自动运行mobilenet_ssd服务程序。/usr/local/bin/tb.local.after将会在系统启动之后自动加载,我们在其中调用我们自己的boot.sh,完成启动server程序的操作。

cd /home/toybrick/rockx

sudo -u toybrick /home/toybrick/rockx/boot.sh


至此,我们在1808端启动了3个模型的server程序。其中端口号在代码中指定,可以自行修改。

face_landmark_sever.py    监听端口8001

object_server.py                监听端口8002

pose_server.py                  监听端口8003


5.2 树莓派部署


opencv仅为方便demo效果演示使用,非主动模式必须。

1、安装opencv

pip3 install --user opencv-python


2、由于树莓派在opencv存在BUG,如果进行以下操作才能正常import cv2。在~/.bashrc中最后添加以下内容

export LD_PRELOAD=$LD_PRELOAD:/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0


3、执行以下命令生效改动

source ~/.bashrc


4、运行demo。在5.1中,我们已经在1808上完成mobilenet_ssd的sever程序的自动启动。

face_landmark.py、object.py、pose.py三个demo均可以正常运行,此处以object.py运行为例。

python3 object.py


可以在屏幕上看到mobilenet_ssd的推理画面,按ESC退出。



编程建议(重要:请认真阅读


opencv非主动模式所必须,C语言和Python的demo用到opencv库,仅为方便图像的采集、显示和编解码操作,用户可以自行选择是否使用opencv

本帖所用到的两个demo,C语言版本运行帧率会比Python版本低,主要是因为Python版demo中,传输图像时使用了JPEG编解码,传输数据量变少,减少了传输时间。C语言也可以同样通过类似方法自行实现进行优化。

将数据采集,数据传输,结果显示并行处理,可以显著提高帧率。

当前主动模式的瓶颈主要在网络数据传输耗时,提高帧率可以从数据传输量下手。

上位机对输入数据进行压缩编码后,再传输给1808计算棒进行解码

输出后处理可以在1808上进行,只保留最终结果发送给上位机。


编程指引:


一、单计算棒多模型:

给不同的模型分配不同port端口

在计算棒上同时自动启动多个模型的服务程序

上位机的程序可以通过不同的port端口连接到计算棒上。


热门文章推荐
热门产品推荐
  • RK3588核心板 | NXN-CORE-3588-BTB-5060-V2

    RK3588核心板 | NXN-CORE-3588-BTB-5060-V2

    核心板

    0.00

    0.00

  • RK3588核心板 | NXN-CORE-3588-BTB-6080-V2

    RK3588核心板 | NXN-CORE-3588-BTB-6080-V2

    核心板

    20000.00

    2799.00

  • RK3588核心板 | NXN-CORE-3588-MXM-7082-V2

    RK3588核心板 | NXN-CORE-3588-MXM-7082-V2

    核心板

    20000.00

    2799.00

  • RK3576核心板 | NXN-CORE-3576-260-5070-V1

    RK3576核心板 | NXN-CORE-3576-260-5070-V1

    核心板

    0.00

    0.00

  • RK3568核心板 | NXN-CORE-3568-MXM-5282-V2

    RK3568核心板 | NXN-CORE-3568-MXM-5282-V2

    核心板

    0.00

    0.00

  • RV1126核心板 | NXN-CORE-1126-BTB-4045-V2

    RV1126核心板 | NXN-CORE-1126-BTB-4045-V2

    核心板

    699.00

    699.00

  • 一种多通道视频采集及拼接显示的应用程序

    一种多通道视频采集及拼接显示的应用程序

    应用开发

    20000.00

    2799.00

  • 一种基于RK3588的通用型开发板

    一种基于RK3588的通用型开发板

    产品中心

    20000.00

    2799.00

  • 物联网云平台

    物联网云平台

    应用开发

    0.00

    0.00

Copyright © 2021-2024 福州牛新牛科技有限公司 All rights reserved. |