单片机可以人脸识别吗?不行,是Linux

摘要:一个Linux人脸识别小项目,可以拿过来来练练手。使用瑞芯微RV1126核心板通过瑞芯微API进行视频采集并进行人脸识别,并输出到设备上。

单片机可以人脸识别吗?不行,是Linux_第1张图片 图源:来自网络,侵删

01 


搭建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/nfs
sudo 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权限。修改完如下图所示。

单片机可以人脸识别吗?不行,是Linux_第2张图片

修改完以后保存退出。执行以下指令重启 NFS 服务器。

sudo /etc/init.d/nfs-kernel-server restart

执行以下指令查看 NFS 共享目录。

showmount -e
6c96fe798ca1e6e41947b97b06f31c64.png

网络环境

确保网络环境正常,Ubuntu、Windows和开发板能相互ping 通。开发板IP:192.168.100.75 虚拟机IP:192.168.100.100 电脑网口IP:192.168.100.102

02 


交叉编译SQLite3数据库

2.1、准备源码

源码可以周期官网下载,放在我的共享文件夹下,然后解压。

单片机可以人脸识别吗?不行,是Linux_第3张图片

2.2、准备RV1126的sdk包

这个RV1126的源码包在购买板子的时候商家会送你的

单片机可以人脸识别吗?不行,是Linux_第4张图片

这个那文件夹里面有交叉编译工具链。在交叉编译之前,得在sdk里面找到交叉编译工具链:

cfda201b4f970d8c21f6d16642403ed2.png 商家提供的sdk里面的交叉工具链

然后我这里放在samba共享目录下,我的共享文件夹对应我的ubuntu的目录是

/home/zhiguyoxin/shared/
单片机可以人脸识别吗?不行,是Linux_第5张图片

现在开始来交叉编译SQLite3,这个SQLite3的源码还是用之前给大家的源码包:

单片机可以人脸识别吗?不行,是Linux_第6张图片

使用命令解压

tar -zxvf sqlite-autoconf-3380500.tar.gz
单片机可以人脸识别吗?不行,是Linux_第7张图片 单片机可以人脸识别吗?不行,是Linux_第8张图片

2.3、交叉编译SQLite3

然后开始进行交叉编译,不过在在这之前,先在当前目录下创建一个文件夹来存放等下交叉编译出来文件:

mkdir arm_sqlite3_install
a5b6c0487a98326a4299e7ee2f3ba47d.png

最后最为关键部分是,现在找到那个之前交叉编译的路径来,也就是结对路径:

/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
单片机可以人脸识别吗?不行,是Linux_第9张图片

最后就可以按照下面这个命令来执行编译了:

./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
f295bd945cc18f7c1c83d4a1cbac486f.png

然后执行分别执行以下命令即可:

make -j8
make install

最后在arm_sqlite3_install目录下生成四个文件:

d2fe5d6225fe0e1a90124607a1f60cef.png

进入到arm_sqlite_install目录下的lib目录,这里面就是交叉编译出来的.so的动态库文件,如下图所示:

单片机可以人脸识别吗?不行,是Linux_第10张图片

我们把这些动态库进行一个打包:

zip -r arm_sqlite3_lib.zip *so*
b114054e5dd7c189e8a251842f2a5c7e.png

把这个打包文件拷贝到nfs目录下去:

cp -rf arm_sqlite3_lib.zip  /home/zhiguoxin/linux/nfs
696f81b99d6e59d32fe725af4d78c609.png 单片机可以人脸识别吗?不行,是Linux_第11张图片

令外还要将sqlite3可执行文件拷贝至/home/zhiguoxin/linux/nfs目录下

2becc9b44b501d4790e17b95cf13bfe1.png

使用这个可执行文件我们查看数据库中的数据,做一下添加删除的操作。

03 


交叉编译OpenCV

同样现在官网下载号源码包,放再共享文件夹下

单片机可以人脸识别吗?不行,是Linux_第12张图片

解压

unzip opencv-3.4.12.zip -d opencv-3.4.12
单片机可以人脸识别吗?不行,是Linux_第13张图片

进入解压后的opencv版本platforms/linux目录下去:

cd opencv-3.4.12/platforms/linux

修改arm-gnueabi.toolchain.cmake

vim arm-gnueabi.toolchain.cmake
单片机可以人脸识别吗?不行,是Linux_第14张图片

将里面的交叉编译路径修改成你自己的路径

/home/zhiguoxin/shared/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf
e4128d5bb2fc015819bf22e1edd87646.png

建立一个build目录,并进入build下去:

7f2d2eda93ca31617efde10c4424a78a.png

编译:

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 ../
5454bb1e2d22abfdafcee614e6d7352f.png 单片机可以人脸识别吗?不行,是Linux_第15张图片

然后执行下面两句

make -j8
make install

最后结果:

c487e10d647aefb282a909c11289e612.png

先进入到build目录下的lib目录下,你会看到很多动态库,

单片机可以人脸识别吗?不行,是Linux_第16张图片

对其打包:

zip -r arm_opencv_lib.zip lib*
单片机可以人脸识别吗?不行,是Linux_第17张图片

将文件拷贝至/home/zhiguoxin/linux/nfs//共享文件夹

cp -rf arm_opencv_lib.zip  /home/zhiguoxin/linux/nfs/
5d1912e7768cfe18ab3f3ebca1aa9e4a.png


04 


移植rknn动态库

把sdk里面的rknn动态库移植到nfs目录下,这是我放sdk的路径:

87785894d6860dd6390213ba4ee1f955.png

将这个文件拷贝到/home/zhiguoxin/linux/nfs目录下,用啥方式都可以,只要拷贝过去就可以了。


05 


RV1126人脸识别工程交叉编译

首先下载人脸识别源码,我下载后之后放在这里

单片机可以人脸识别吗?不行,是Linux_第18张图片

在编译之前,我们要修改一下Makefile:

vim Makefile

这里修改成你的sdk交叉编译工具链的路径

单片机可以人脸识别吗?不行,是Linux_第19张图片

然后make就看可以了

make

5.1 移植人脸识别数据模型

将人脸识别数据模型拷贝至/home/zhiguoxin/linux/nfs/

cd /home/zhiguoxin/myproject/rockx_face_recognize_project_rtsp
cp rockx_data/ -rf /home/zhiguoxin/linux/nfs/
单片机可以人脸识别吗?不行,是Linux_第20张图片

5.2 移植人脸识别可执行程序

将人脸识别编译出来的可执行程序拷贝至/home/zhiguoxin/linux/nfs/

单片机可以人脸识别吗?不行,是Linux_第21张图片

5.3 移植人脸识别插入人脸数据可执行程序

将人脸识别编译出来的插入人脸数据库可执行程序拷贝至/home/zhiguoxin/linux/nfs/

单片机可以人脸识别吗?不行,是Linux_第22张图片

5.4 移植人脸识别数据库

将数据库文件face.db文件拷贝至/home/zhiguoxin/linux/nfs/

单片机可以人脸识别吗?不行,是Linux_第23张图片


06 


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是板子的挂载目录

单片机可以人脸识别吗?不行,是Linux_第24张图片

6.2 删除原有数据库表

./sqlite3 face.db
.tables
select *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
单片机可以人脸识别吗?不行,是Linux_第25张图片

6.4执行程序

./rkmedia_rockx_face_rga_rtsp_main
dfdbb1227012daa6790d619f6bde0080.png
ffplay –x 800 –y 400 rtsp://192.168.100.75/live/main_stream

或者使用vlc拉流

单片机可以人脸识别吗?不行,是Linux_第26张图片 单片机可以人脸识别吗?不行,是Linux_第27张图片

-END-


往期推荐:点击图片即可跳转阅读

单片机可以人脸识别吗?不行,是Linux_第28张图片

如何画出完美的PCB板子?

单片机可以人脸识别吗?不行,是Linux_第29张图片

单片机 -> RTOS -> Linux

单片机可以人脸识别吗?不行,是Linux_第30张图片

学嵌入式,就是练武功。

你可能感兴趣的:(人脸识别,数据库,网络,linux,centos)