4213|0

57

帖子

5

TA的资源

一粒金砂(高级)

楼主
 

#AI挑战营终点站# 使用RV1106通过摄像头实时识别手写数字 [复制链接]

本帖最后由 MioChan 于 2024-5-31 14:29 编辑

上个帖子忘记考虑转换到RKNN模型,也要适配对应的开发版型号,RV1106所支持的rknn-toolkit2只能在Ubuntu使用,包括后面编译文件也需要Ubuntu,所以我们从转换模型开始就换用Ubuntu进行了。我这里是直接在装了ESXI的服务器上直接创建了台新的Ubuntu虚拟机。因为没接触过嵌入式开发,板子上调用模型完成推理的那部分C代码直接抄了论坛大佬们的作业,推理用的模型是我自己训练的。

 

 

 

ONNX模型转RKNN模型(这部分的操作都在自己创建的Ubuntu虚拟机或实体机上进行,而不是开发版)


wget -c https://mirrors.bfsu.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh

 

chmod 777 Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

会出现提示协议,一直按回车然后输入yes,出现下面提示就安装成功

 

然后开始创建rknn所需的虚拟环境

source ~/miniconda3/bin/activate
conda create -n rknn python=3.9

  输入y即可完成创建,接下来cd到一个合适的位置准备下载tknn-tool kit的文件,然后输入下面的命令克隆仓库

git clone https://github.com/airockchip/rknn-toolkit2

 

 

别忘切换到刚刚建好的conda环境

conda activate rknn

 

接下来直接运行这一行安装依赖

pip install ./rknn-toolkit2/rknn-toolkit2/packages/rknn_toolkit2-2.0.0b0+9bab5682-cp39-cp39-linux_x86_64.whl

  到此,环境安装完毕。

 

 下一步,使用下面的python代码,开始转换onnx模型,代码训练集文件建议都放一起,一共需要mnist_cnn.onnx、data.txt、Image0_0.png 这三个文件,Image0_0.png就是一张手写体训练集的图片,data.txt 里就是写了这个图片的路径,你可以直接在附件下载这些。

from rknn.api import RKNN
# 创建 RKNN 对象
rknn = RKNN()
# 配置 RKNN 对象
rknn.config(mean_values=[[128]], std_values=[[128]],target_platform='rv1106') #图片归一化到【-1,1】
# 加载模型
ret = rknn.load_onnx(model='mnist_cnn.onnx')
ret = rknn.build(do_quantization=True)  # 量化
# 保存 RKNN 模型
ret = rknn.export_rknn('mnist_cnn.rknn')
# 释放 RKNN 对象
rknn.release()

我这里直接用vim创建这个python文件,上面的代码贴进来就行

vi makerknn.py

按i进入编辑模式,然后粘贴代码后按esc键退出编辑模式,接下来按 shift+:键,输入wq 回车即可退出

确保之前提到的文件和这个py文件都在同一目录下,然后输入下面的即可完成转换

python makerknn.py 

 到此模型转换完成。

 

Ubuntu编译环境配置(这部分的操作都在自己创建的Ubuntu虚拟机或实体机上进行,而不是开发版)


只是用摄像头识别手写数字这种功能,并不需要刷系统,用出场自带的即可

具体可以参考 https://wiki.luckfox.com/zh/Luckfox-Pico/Luckfox-Pico-SDK

 

安装依赖环境

sudo apt update

sudo apt-get install -y git ssh make gcc gcc-multilib g++-multilib module-assistant expect g++ gawk texinfo libssl-dev bison flex fakeroot cmake unzip gperf autoconf device-tree-compiler libncurses5-dev pkg-config bc python-is-python3 passwd openssl openssh-server openssh-client vim file cpio rsync

找一个合适的位置克隆 SDK仓库 

git clone https://gitee.com/LuckfoxTECH/luckfox-pico.git

进入这个位置,安装交叉编译工具链,luckfox-pico就是刚刚下载的文件目录

cd  ./luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/

source env_install_toolchain.sh

到此就可以了。

 

 

接下来直接克隆论坛这位大佬的仓库抄作业 https://bbs.eeworld.com.cn/thread-1280038-1-1.html

 

先设置环境变量,这个只是临时设置,每次重新使用ssh终端时都要执行一次

export LUCKFOX_SDK_PATH=输入你上一步下载的SDK目录

我的是这样,需要根据自己实际下载的位置进行设置

克隆仓库

git clone https://github.com/knva/luckfox_pico_rtsp_opencv

直接进去 

cd luckfox_pico_rtsp_opencv

创建一个build文件目录,然后再进去

mkdir build
cd build

开始编译生成执行文件

cmake ..
make && make install

返回上一级找到luckfox_rtsp_opencv_demo这个文件夹,这里建议用smb挂载虚拟机和开发版的共享目录,方便后续移动文件

 

这里开始的操作就要在开发板上进行了 


 

将luckfox_rtsp_opencv_demo这个文件夹内的luckfox_rtsp_opencv和lib整个文件夹(里面有librga.so和librknnmrt.so两个文件)复制到开发版里,以及之前转换好的rknn文件,位置自己选个合适的就好,注意lib必须复制luckfox_rtsp_opencv_demo这个文件里的,不要自行复制项目根目录的lib,否则会报错

 

 

然后同样的方法用ssh连接开发版,进入刚刚的文件夹,再次确定有这些内容

 

先停止默认运行的rtsp

RkLunch-stop.sh

然后输入下面这个即可运行,其中luckfox_rtsp_opencv是可执行文件, mnist_cnn.rknn是对应的模型(附件中的mnist_demo.zip就是编译好的程序,解压到开发板里就能直接运行,想要编译源码可以参考https://bbs.eeworld.com.cn/thread-1280038-1-1.html,我用的就是这个这里就不放了)

 ./luckfox_rtsp_opencv mnist_cnn.rknn

 

 

使用装有VLC的设备,输入开发版的rtsp地址即可查看摄像头的画面

 

 

 

我直接抽取了数据集的部分数字,给他们打印了出来

 

 

 

视频中分别测试了mnist训练集、mnist测试集、自己手写字体。

 

luckfox

根据识别结果可以得到如下结论,对于mnist数据集,整个识别率基本能达到90%,但是有些数字对识别方向可能比较敏感例如测试集中的6(视频中0:14),如果斜着识别容易识别成5,但摄像头摆正后就会识别正确,这从一定程度上说明在训练时做一些数据增强操作是非常有必要的,例如我们可以给图片加入适当噪声、进行一些旋转和缩放操作再进行识别。对于mnist测试集中的9(0:47)各个角度尝试都无法识别正确,也可能这个确实有点抽象,之后从测试集重挑了一个9反复尝试可以正常识别但识别率还是不高非常容易识别错误。对于自己手写的数字识别,只要字体比较粗都能顺利识别,但发现9还是比较容易识别错误(1:06),大概原因可能是外国人的数字写法和中国人还是有些不同,还有就是因为模型量化可能对网络识别率造成一些影响。

对于容易出错的数字6和9,后续也尝试自己写了各种样子的,最终实现了准确识别。特别是9,写的斜一点上端开口下端短一点可能会比较容易识别正确。

 

   

Image0_0.png (312 Bytes, 下载次数: 2)

Image0_0.png

mnist_cnn.rknn

427.77 KB, 下载次数: 3

mnist_cnn.onnx

1.63 MB, 下载次数: 0

data.txt

14 Bytes, 下载次数: 1

mnist_demo.zip

2.26 MB, 下载次数: 0

点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表