• 移植SQLite3、OpenCV到RV1126开发板上开发人脸识别项目


    一、搭建NFS环境

    网络文件系统,英文 Network File System(NFS),是由 SUN 公司研制的 UNIX 表示层协议,能使使用者访问网络上别处的文件就像在使用自己的计算机一样。我们可以在 Ubuntu 上制作板子需要的文件,然后使用 NFS 来加载文件到板子的DDR上。

    因为我们使用的板子内存太小,而人脸识别有需要很多的文件来支持,板子放不下,只能通过这种挂载的方式,将程序运行所需要的数据库模型文件放在挂载的目录下,这样就可以了。

    1.1 安装NFS服务

    在 Ubuntu 终端执行以下指令安装NFS。

    sudo apt-get install nfs-kernel-server
    
    • 1

    1.2 新建NFS共享目录

    新建 NFS 共享目录,并给予 NFS 目录可读可写可执行权限。

    sudo mkdir /home/zhiguoxin/linux/nfs
    sudo chmod 777 /home/zhiguoxin/linux/nfs/
    
    • 1
    • 2

    1.3 配置NFS服务

    执行以下指令打开etc/exports文件

    sudo vi /etc/exports
    
    • 1

    进入etc/exports文件,在最后添加如下内容

    /home/zhiguoxin/linux/nfs *(rw,sync,no_root_squash)
    
    • 1

    /home/zhiguoxin/linux/nfs 表示 NFS 共享的目录,*表示允许所有的网络段访问,rw 表示访问者具有可读写权限,sync 表示将缓存写入设备中,可以说是同步缓存的意思。no_root_squash 表示访问者具有 root 权限。
    修改完如下图所示。

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

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

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

    showmount -e
    
    • 1

    网络环境

    确保网络环境正常,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/
    
    • 1

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

    使用命令解压

    tar -zxvf sqlite-autoconf-3380500.tar.gz 
    
    • 1

    2.3、交叉编译SQLite3

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

    mkdir arm_sqlite3_install
    
    • 1

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

    /home/zhiguoxin/shared/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin
    
    • 1

    接着刚才建立的arm_sqlite3_install,也是要找到他的绝对路径来:

    /home/zhiguoxin/shared/sqlite-autoconf-3380500/arm_sqlite3_install
    
    • 1

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

    ./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
    
    • 1

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

    make -j8
    make install
    
    • 1
    • 2

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

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

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

    zip -r arm_sqlite3_lib.zip *so*
    
    • 1

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

    cp -rf arm_sqlite3_lib.zip  /home/zhiguoxin/linux/nfs
    
    • 1

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

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

    三、交叉编译OpenCV

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

    解压

    unzip opencv-3.4.12.zip -d opencv-3.4.12
    
    • 1

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

    cd opencv-3.4.12/platforms/linux
    
    • 1

    修改arm-gnueabi.toolchain.cmake

    vim arm-gnueabi.toolchain.cmake
    
    • 1

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

    /home/zhiguoxin/shared/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf
    
    • 1

    建立一个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 ../
    
    • 1

    然后执行下面两句

    make -j8
    make install
    
    • 1
    • 2

    最后结果:

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

    对其打包:

    zip -r arm_opencv_lib.zip lib*
    
    • 1

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

    cp -rf arm_opencv_lib.zip  /home/zhiguoxin/linux/nfs/
    
    • 1

    四、移植rknn动态库

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

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

    五、RV1126人脸识别工程交叉编译

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

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

    vim Makefile
    
    • 1

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

    然后make就看可以了

    make
    
    • 1

    5.1 移植人脸识别数据模型

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

    cd /home/zhiguoxin/myproject/rockx_face_recognize_project_rtsp
    cp rockx_data/ -rf /home/zhiguoxin/linux/nfs/
    
    • 1
    • 2

    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
    
    • 1
    • 2

    在板子上使用nfs挂载,之后在ubuntu上的/home/zhiguoxin/linux/nfs放的文件,都会在共享在板子的/mnt/nfs目录下

    mount -t nfs 192.168.100.100:/home/zhiguoxin/linux/nfs /mnt/nfs -o nolock
    
    • 1
    • 192.168.100.100是我虚拟机的IP地址
    • /home/zhiguoxin/linux/nfs是我虚拟机下的nfs目录
    • /mnt/nfs是板子的挂载目录

    6.2 删除原有数据库表

    ./sqlite3 face.db
    .tables
    select *from face_data_table;
    delete from face_data_table;
    .quit
    
    • 1
    • 2
    • 3
    • 4
    • 5

    6.3 插入人脸数据

    ./rkmedia_rockx_face_insert liuyao liuyao.png
    ./rkmedia_rockx_face_insert yangjiacheng yangjiacheng.png
    
    • 1
    • 2

    6.4执行程序

    ./rkmedia_rockx_face_rga_rtsp_main
    
    • 1

    ffplay –x 800 –y 400 rtsp://192.168.100.75/live/main_stream
    
    • 1

    或者使用vlc拉流

  • 相关阅读:
    CNCC 2022| 隐私计算:理论、技术、应用与未来
    Java - LinkedHashMap原理分析
    宝塔 nginx 配置负载均衡 upstream
    idea/vscode插件安装推荐
    项目通用Makefile的编写(包含Makefile.build文件分析)
    原码反码补码移码的介绍和计算
    轻量级网络(一):MobileNet V1,V2, V3系列
    智能物联时代下RFID技术在汽车零部件智能制造中的引领作用
    HR人才测评,什么是成就导向?如何测评成就导向?
    ideal连接mysql数据库时发生如下报错怎么办?
  • 原文地址:https://blog.csdn.net/qq_39400113/article/details/127346006