一个基于瑞芯微Linux RV1126人脸识别项目

关于rv1109/rv1126,之前芯片刚出的时候就搞了将近一年,当时没有什么参考资料,于是只能根据经验去慢慢摸索,也总结了不少这方面的笔记。
至于具体项目,由于公司商业机密,故不方便透露。最近有幸看到刘同学做了一个rv1126的linux人脸识别小项目,这种感觉就像回到之前刚开始搞的项目一样似曾相识,总结的非常棒,让我们一起来学习学习吧!
项目摘要:这是一个linux人脸识别小项目,可以拿过来来练练手。使用瑞芯微rv1126核心板通过瑞芯微api进行视频采集并进行人脸识别,并输出到设备上。
一、搭建nfs环境
网络文件系统nfs,是由sun公司研制的unix表示层协议,能使使用者访问网络上别处的文件就像在使用自己的计算机一样。我们可以ubuntu上制作板子需要的文件,然后使用nfs来加载文件到板子的ddr上。
因为我们使用的板子内存太小,而人脸识别又需要很多的文件来支持,板子放不下,只能通过这种挂载的方式,将程序运行所需要的数据库模型文件放在挂载的目录下,这样就可以了。
1.1 安装nfs服务
在ubuntu终端执行以下指令安装nfs。
sudo apt-get install nfs-kernel-server  
1.2 新建nfs共享目录
新建nfs共享目录,并给予nfs目录可读可写可执行权限。
sudo mkdir /home/zhiguoxin/linux/nfssudo chmod 777 /home/zhiguoxin/linux/nfs/  
1.3 配置nfs服务
执行以下指令打开etc/exports文件
sudo vi /etc/exports  
进入etc/exports文件,在最后添加如下内容
/home/zhiguoxin/linux/nfs *(rw,sync,no_root_squash)  
/home/zhiguoxin/linux/nfs 表示nfs共享的目录,*表示允许所有的网络段访问,rw表示访问者具有可读写权限,sync表示将缓存写入设备中,可以说是同步缓存的意思。no_root_squash表示访问者具有root权限。修改完如下图所示。
修改完以后保存退出。执行以下指令重启 nfs 服务器。
sudo /etc/init.d/nfs-kernel-server restart  
执行以下指令查看 nfs 共享目录。
showmount -e  
网络环境
确保网络环境正常,ubuntu、windows和开发板能相互ping 通。开发板ip:192.168.100.75虚拟机ip:192.168.100.100电脑网口ip:192.168.100.102
二、交叉编译sqlite3数据库
2.1、准备源码
源码可以去官网下载,放在我的共享文件夹下,然后解压。
2.2、准备rv1126的sdk包
这个rv1126的源码包在购买板子的时候商家会送你的
这个文件夹里面有交叉编译工具链。在交叉编译之前,得在sdk里面找到交叉编译工具链:
商家提供的sdk里面的交叉工具链
然后我这里放在samba共享目录下,我的共享文件夹对应我的ubuntu的目录是
/home/zhiguyoxin/shared/  
现在开始来交叉编译sqlite3,这个sqlite3的源码还是用之前给大家的源码包:
使用命令解压
tar -zxvf sqlite-autoconf-3380500.tar.gz   
2.3、交叉编译sqlite3
然后开始进行交叉编译,不过在在这之前,先在当前目录下创建一个文件夹来存放等下交叉编译出来文件:
mkdir arm_sqlite3_install  
最后最为关键部分是,现在找到那个之前交叉编译的路径来,也就是结对路径:
/home/zhiguoxin/shared/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin  
接着刚才建立的arm_sqlite3_install,也是要找到他的绝对路径来:
/home/zhiguoxin/shared/sqlite-autoconf-3380500/arm_sqlite3_install  
最后就可以按照下面这个命令来执行编译了:
./configure cc=/home/zhiguoxin/shared/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --host=arm-linux --prefix=/home/zhiguoxin/shared/sqlite-autoconf-3380500/arm_sqlite3_install  
然后执行分别执行以下命令即可:
make -j8make install  
最后在arm_sqlite3_install目录下生成四个文件:
进入到arm_sqlite_install目录下的lib目录,这里面就是交叉编译出来的.so的动态库文件,如下图所示:
我们把这些动态库进行一个打包:
zip -r arm_sqlite3_lib.zip *so*  
把这个打包文件拷贝到nfs目录下去:
cp -rf arm_sqlite3_lib.zip  /home/zhiguoxin/linux/nfs  
另外还要将sqlite3可执行文件拷贝至/home/zhiguoxin/linux/nfs目录下
使用这个可执行文件我们查看数据库中的数据,做一下添加删除的操作。
三、交叉编译opencv
同样现在官网下载号源码包,放在共享文件夹下
解压
unzip opencv-3.4.12.zip -d opencv-3.4.12  
进入解压后的opencv版本platforms/linux目录下去:
cd opencv-3.4.12/platforms/linux  
修改arm-gnueabi.toolchain.cmake
vim arm-gnueabi.toolchain.cmake  
将里面的交叉编译路径修改成你自己的路径
/home/zhiguoxin/shared/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf  
建立一个build目录,并进入build下去:
编译:
cmake -dcmkae_build_type=release -dcmake_toolchain_file=../platforms/linux/arm-gnueabi.toolchain.cmake -dcmake_install_prefix=/opt/arm_opencv -dsoftfp=on -denable_profiling=off -dwith_opencl=off -dwith_tbb=on -dwith_v4l=on -dhave_camv4l2=on -dbuild_tests=off -dinstall_python_examples=off -dbuild_examples=off -dwith_ffmpeg=on -dhave_ffmpeg=on -dbuild_opencv_js=off -denable_neon=off -denable_vfpv3=off ../  
然后执行下面两句
make -j8make install  
最后结果:
先进入到build目录下的lib目录下,你会看到很多动态库,
对其打包:
zip -r arm_opencv_lib.zip lib*  
将文件拷贝至/home/zhiguoxin/linux/nfs//共享文件夹
cp -rf arm_opencv_lib.zip  /home/zhiguoxin/linux/nfs/  
四、移植rknn动态库
把sdk里面的rknn动态库移植到nfs目录下,这是我放sdk的路径:
将这个文件拷贝到/home/zhiguoxin/linux/nfs目录下,用啥方式都可以,只要拷贝过去就可以了。
五、rv1126人脸识别工程交叉编译
首先下载人脸识别源码,我下载后之后放在这里
在编译之前,我们要修改一下makefile:
vim makefile  
这里修改成你的sdk交叉编译工具链的路径
然后make就看可以了
make  
5.1 移植人脸识别数据模型
将人脸识别数据模型拷贝至/home/zhiguoxin/linux/nfs/
cd /home/zhiguoxin/myproject/rockx_face_recognize_project_rtspcp rockx_data/ -rf /home/zhiguoxin/linux/nfs/  
5.2 移植人脸识别可执行程序
将人脸识别编译出来的可执行程序拷贝至/home/zhiguoxin/linux/nfs/
5.3 移植人脸识别插入人脸数据可执行程序
将人脸识别编译出来的插入人脸数据库可执行程序拷贝至/home/zhiguoxin/linux/nfs/
5.4 移植人脸识别数据库
将数据库文件face.db文件拷贝至/home/zhiguoxin/linux/nfs/
六、rv1126板子的处理
6.1 挂载
在开发板的/mnt/新建一个nfs文件夹
cd /mnt/mkdir nfs  
在板子上使用nfs挂载,之后在ubuntu上的/home/zhiguoxin/linux/nfs放的文件,都会在共享在板子的/mnt/nfs目录下
mount -t nfs 192.168.100.100:/home/zhiguoxin/linux/nfs /mnt/nfs -o nolock  
192.168.100.100是我虚拟机的ip地址
/home/zhiguoxin/linux/nfs是我虚拟机下的nfs目录
/mnt/nfs是板子的挂载目录
6.2 删除原有数据库表
./sqlite3 face.db.tablesselect *from face_data_table;delete from face_data_table;.quit  
6.3 插入人脸数据
./rkmedia_rockx_face_insert liuyao liuyao.png./rkmedia_rockx_face_insert yangjiacheng yangjiacheng.png  
6.4执行程序
./rkmedia_rockx_face_rga_rtsp_mainffplay –x 800 –y 400 rtsp://192.168.100.75/live/main_stream  
或者使用vlc拉流


规格书中的这张图表很重要!
紫米10000mAh双向快充移动电源,拥有Micro-USB两种输入接口支持18W快充
LED显示屏接地的正确做法及误区
海尔智家35亿元增资智慧生活家电,创新优势更有用武之地
盘点:2016机器人领域十大前沿技术突破
一个基于瑞芯微Linux RV1126人脸识别项目
目前区块链的应用主要有哪一些
如何使用低成本的硬件来实现Mesh数据的捉包与解密?
电池维护保养小常识
覆铜板 (CCL) 材料的拉伸测试及其测试流程介绍
UWB室内定位系统为何会成为主流技术
日本 5 大车企缺芯减产,或将占全球减产总量 1/3
用户大会丨四维图新挖掘数据价值,助推智能网联汽车发展
关于自激式开关电源
工业RFID应用之基础篇(十),RFID在生活中无处不在
科锐实现50A碳化硅功率器件技术突破!
Modbus转Profinet网关与流量变送器兼容转ModbusTCP协议博图配置案例
DSP的定时器
这五大解决方案,已然成了罗姆未来重中之重
容易被ChatGPT取代的十种行业