關(guān)于RV1109/RV1126,之前芯片剛出的時候就搞了將近一年,當(dāng)時沒有什么參考資料,于是只能根據(jù)經(jīng)驗去慢慢摸索,也總結(jié)了不少這方面的筆記。
至于具體項目,由于公司商業(yè)機密,故不方便透露。最近有幸看到劉同學(xué)做了一個RV1126的Linux人臉識別小項目,這種感覺就像回到之前剛開始搞的項目一樣似曾相識,總結(jié)的非常棒,讓我們一起來學(xué)習(xí)學(xué)習(xí)吧!
項目摘要:這是一個Linux人臉識別小項目,可以拿過來來練練手。使用瑞芯微RV1126核心板通過瑞芯微API進行視頻采集并進行人臉識別,并輸出到設(shè)備上。
一、搭建NFS環(huán)境
網(wǎng)絡(luò)文件系統(tǒng)NFS,是由SUN公司研制的UNIX表示層協(xié)議,能使使用者訪問網(wǎng)絡(luò)上別處的文件就像在使用自己的計算機一樣。我們可以Ubuntu上制作板子需要的文件,然后使用NFS來加載文件到板子的DDR上。
因為我們使用的板子內(nèi)存太小,而人臉識別又需要很多的文件來支持,板子放不下,只能通過這種掛載的方式,將程序運行所需要的數(shù)據(jù)庫模型文件放在掛載的目錄下,這樣就可以了。
1.1 安裝NFS服務(wù)
在Ubuntu終端執(zhí)行以下指令安裝NFS。
?
sudo?apt-get?install?nfs-kernel-server
?
1.2 新建NFS共享目錄
新建NFS共享目錄,并給予NFS目錄可讀可寫可執(zhí)行權(quán)限。
?
sudo?mkdir?/home/zhiguoxin/linux/nfs sudo?chmod?777?/home/zhiguoxin/linux/nfs/
?
1.3 配置NFS服務(wù)
執(zhí)行以下指令打開etc/exports文件
?
sudo?vi?/etc/exports
?
進入etc/exports文件,在最后添加如下內(nèi)容
?
/home/zhiguoxin/linux/nfs?*(rw,sync,no_root_squash)
?
/home/zhiguoxin/linux/nfs 表示NFS共享的目錄,*表示允許所有的網(wǎng)絡(luò)段訪問,rw表示訪問者具有可讀寫權(quán)限,sync表示將緩存寫入設(shè)備中,可以說是同步緩存的意思。no_root_squash表示訪問者具有root權(quán)限。修改完如下圖所示。
修改完以后保存退出。執(zhí)行以下指令重啟 NFS 服務(wù)器。
?
sudo?/etc/init.d/nfs-kernel-server?restart
?
執(zhí)行以下指令查看 NFS 共享目錄。
?
showmount?-e
?
網(wǎng)絡(luò)環(huán)境
確保網(wǎng)絡(luò)環(huán)境正常,Ubuntu、Windows和開發(fā)板能相互ping 通。開發(fā)板IP:192.168.100.75虛擬機IP:192.168.100.100電腦網(wǎng)口IP:192.168.100.102
二、交叉編譯SQLite3數(shù)據(jù)庫
2.1、準(zhǔn)備源碼
源碼可以去官網(wǎng)下載,放在我的共享文件夾下,然后解壓。
2.2、準(zhǔn)備RV1126的sdk包
這個RV1126的源碼包在購買板子的時候商家會送你的
這個文件夾里面有交叉編譯工具鏈。在交叉編譯之前,得在sdk里面找到交叉編譯工具鏈:
商家提供的sdk里面的交叉工具鏈
然后我這里放在samba共享目錄下,我的共享文件夾對應(yīng)我的ubuntu的目錄是
?
/home/zhiguyoxin/shared/
?
現(xiàn)在開始來交叉編譯SQLite3,這個SQLite3的源碼還是用之前給大家的源碼包:
使用命令解壓
?
tar?-zxvf?sqlite-autoconf-3380500.tar.gz?
?
2.3、交叉編譯SQLite3
然后開始進行交叉編譯,不過在在這之前,先在當(dāng)前目錄下創(chuàng)建一個文件夾來存放等下交叉編譯出來文件:
?
mkdir?arm_sqlite3_install
?
最后最為關(guān)鍵部分是,現(xiàn)在找到那個之前交叉編譯的路徑來,也就是結(jié)對路徑:
?
/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
?
最后就可以按照下面這個命令來執(zhí)行編譯了:
?
./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
?
然后執(zhí)行分別執(zhí)行以下命令即可:
?
make?-j8 make?install
?
最后在arm_sqlite3_install目錄下生成四個文件:
進入到arm_sqlite_install目錄下的lib目錄,這里面就是交叉編譯出來的.so的動態(tài)庫文件,如下圖所示:
我們把這些動態(tài)庫進行一個打包:
?
zip?-r?arm_sqlite3_lib.zip?*so*
?
把這個打包文件拷貝到nfs目錄下去:
?
cp?-rf?arm_sqlite3_lib.zip??/home/zhiguoxin/linux/nfs
?
另外還要將sqlite3可執(zhí)行文件拷貝至/home/zhiguoxin/linux/nfs目錄下
使用這個可執(zhí)行文件我們查看數(shù)據(jù)庫中的數(shù)據(jù),做一下添加刪除的操作。
三、交叉編譯OpenCV
同樣現(xiàn)在官網(wǎng)下載號源碼包,放在共享文件夾下
解壓
?
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?../
?
然后執(zhí)行下面兩句
?
make?-j8 make?install
?
最后結(jié)果:
先進入到build目錄下的lib目錄下,你會看到很多動態(tài)庫,
對其打包:
?
zip?-r?arm_opencv_lib.zip?lib*
?
將文件拷貝至/home/zhiguoxin/linux/nfs//共享文件夾
?
cp?-rf?arm_opencv_lib.zip??/home/zhiguoxin/linux/nfs/
?
四、移植rknn動態(tài)庫
把sdk里面的rknn動態(tài)庫移植到nfs目錄下,這是我放sdk的路徑:
將這個文件拷貝到/home/zhiguoxin/linux/nfs目錄下,用啥方式都可以,只要拷貝過去就可以了。
五、RV1126人臉識別工程交叉編譯
首先下載人臉識別源碼,我下載后之后放在這里
在編譯之前,我們要修改一下Makefile:
?
vim?Makefile
?
這里修改成你的sdk交叉編譯工具鏈的路徑
然后make就看可以了
?
make
?
5.1 移植人臉識別數(shù)據(jù)模型
將人臉識別數(shù)據(jù)模型拷貝至/home/zhiguoxin/linux/nfs/
?
cd?/home/zhiguoxin/myproject/rockx_face_recognize_project_rtsp cp?rockx_data/?-rf?/home/zhiguoxin/linux/nfs/
?
5.2 移植人臉識別可執(zhí)行程序
將人臉識別編譯出來的可執(zhí)行程序拷貝至/home/zhiguoxin/linux/nfs/
5.3 移植人臉識別插入人臉數(shù)據(jù)可執(zhí)行程序
將人臉識別編譯出來的插入人臉數(shù)據(jù)庫可執(zhí)行程序拷貝至/home/zhiguoxin/linux/nfs/
5.4 移植人臉識別數(shù)據(jù)庫
將數(shù)據(jù)庫文件face.db文件拷貝至/home/zhiguoxin/linux/nfs/
六、RV1126板子的處理
6.1 掛載
在開發(fā)板的/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 刪除原有數(shù)據(jù)庫表
?
./sqlite3?face.db .tables select?*from?face_data_table; delete?from?face_data_table; .quit
?
6.3 插入人臉數(shù)據(jù)
?
./rkmedia_rockx_face_insert?liuyao?liuyao.png ./rkmedia_rockx_face_insert?yangjiacheng?yangjiacheng.png
?
6.4執(zhí)行程序
?
./rkmedia_rockx_face_rga_rtsp_main
ffplay?–x?800?–y?400?rtsp://192.168.100.75/live/main_stream
?
或者使用vlc拉流
?
審核編輯:湯梓紅
評論
查看更多