本文介绍了 Milk-V Duo S 开发板实现 Buildroot SDK 镜像编译、基于 TDL 模型的人脸检测、OpenCV-mobile 库的测试等相关流程。
Duo 系列开发板默认的 SDK 是基于 buildroot 构建的,用来生成 Duo 的固件。
V2 版本 SDK 支持 RISCV 和 ARM 内核。
编译环境为 Ubuntu Jammy 22.04.x amd64
sudo apt install -y pkg-config build-essential ninja-build automake autoconf libtool wget curl git gcc libssl-dev bc slib squashfs-tools android-sdk-libsparse-utils jq python3-distutils scons parallel tree python3-dev python3-pip device-tree-compiler ssh cpio fakeroot libncurses5 flex bison libncurses5-dev genext2fs rsync unzip dosfstools mtools tcl openssh-client cmake expect python-is-python3
以及
sudo pip install jinja2
git clone https://github.com/milkv-duo/duo-buildroot-sdk-v2.git --depth=1
在编译过程中,Buildroot 会自动下载一些源码包。
进入 SDK 文件夹,执行一键编译脚本 build.sh
cd duo-buildroot-sdk-v2/
./build.sh lunch
选择目标开发板对应的固件型号,或直接运行 ./build.sh milkv-duos-musl-riscv64-sd ;
编译成功后可以在 out 目录下看到生成的镜像,其中 *.img 后缀的镜像为 SD 卡烧录镜像。

Cvitek 所提供的 TDL(Turnkey Deep Learning)集成算法,用以缩短应用程序开发所需的时间。
此架构实现了 TDL 所需算法包含其前后处理 提供统一且便捷的编程接口。
目前 TDL SDK 包含 移动侦测,人脸检测,人脸识别,人脸追踪,行人检测,语义分割,车牌辨识,车牌检测,活体识别,IR活体识别,婴儿检测,哭声检测,姿态检测,手势侦测,手势识别 等算法。
git clone https://github.com/milkv-duo/duo-tdl-examples.git
可在代码目录中执行 git pull 拉取最新代码。
进入代码目录:
cd duo-tdl-examples
加载编译环境:
source envsetup.sh
首次运行自动下载所需编译工具链,位于 host-tools 文件夹;
之后若再次加载编译环境,会检测该目录,如果已存在则不会再次下载;
若之前编译过 buildroot SDK ,仅需要将工具链路径重新定位至 SDK 文件夹即可,无需重新下载。
加载编译环境时需要按提示输入所需编译目标:
之后自动部署环境配置等流程

同一个终端,加载一次编译环境即可。
在当前终端下打开人脸检测的 Demo 例程文件夹 sample_vi_fd 并编译
cd sample_vi_fd
make
将生成的 sample_vi_fd 程序通过 FileZilla 软件或 scp 方式上传至 Duo S 开发板;

执行
make clean清除编译结果。
下载 scrfd_det_face_432_768_INT8_cv181x.cvimodel 模型并上传至板端。
由于手边没有 CSI 接口的摄像头配件,这里仅做程序运行效果展示。
在 Duo S 终端执行
chmod +x sample_vi_fd
./sample_vi_fd scrfd_det_face_432_768_INT8_cv181x.cvimodel
显示信息如下

提示未检测到传感器。
官方文档中给出了 Milk-v Duo S 开发板的各种 Demo 例程,包括终端打印、SPI、IIC、DHT22传感器、舵机等。下面给出了 Demo 例程的测试流程及效果展示。
克隆官方 Demo 例程
git clone https://github.com/milkv-duo/duo-examples.git
加载编译环境
cd duo-examples
source envsetup.sh
由于前面编译过系统 SDK,这里直接修改 envsetup.sh 文件中工具链路径,避免重复下载;
#script_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
script_dir="/home/ljl/Milkv_DuoS/duo-buildroot-sdk-v2/"
编译环境配置完成后,进入目标例程文件夹(这里以打印 hello world 工程为例),终端执行 make 即可;
cd hello-world
make
执行结束生成 helloworld 程序;

通过 FileZilla 软件,将该文件传输至开发板;
板端执行指令
chmod +x helloworld
./helloworld
打印对应的字符串

同样方法,根据官方示例程序,可以实现多种传感器和外设的驱动。
OpenCV-mobile 是一个精简版的 OpenCV 库,通过调整编译参数,删减部分 OpenCV 源码,来最小化编译 OpenCV。
OpenCV-mobile 提供了 OpenCV 常用的功能,如读写图片,处理,矩阵操作等等,版本与上游同步,无第三方依赖。在绝大多数情况下,以 1/10 的体积替换官方 OpenCV,适合对体积有要求的嵌入式环境。
下载当前最新的 Milk-V Duo 的预编译包:opencv-mobile-4.11.0-milkv-duo.zip
新建目录 picture-resize 并进入该目录:
mkdir picture-resize
cd picture-resize
将预编译包解压至当前目录
新建 main.cpp 代码文件
vi main.cpp
并添加如下代码
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
int main()
{
cv::Mat bgr = cv::imread("in.jpg", 1);
cv::resize(bgr, bgr, cv::Size(200, 200));
cv::imwrite("out.jpg", bgr);
return 0;
}
该代码可实现将 in.jpg 图片缩放为 200x200 尺寸,输出 out.jpg 文件。
使用 cmake 方式来编译,需要创建 CMakeLists.txt 文件:
vi CMakeLists.txt
ESC + I 进入 Insert 模式,粘贴如下代码
project(opencv-mobile-test)
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_COMPILER "/home/ljl/Milkv_DuoS/duo-buildroot-sdk-v2/host-tools/gcc/riscv64-linux-musl-x86_64/bin/riscv64-unknown-linux-musl-gcc")
set(CMAKE_CXX_COMPILER "/home/ljl/Milkv_DuoS/duo-buildroot-sdk-v2/host-tools/gcc/riscv64-linux-musl-x86_64/bin/riscv64-unknown-linux-musl-g++")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d")
set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/opencv-mobile-4.9.0-milkv-duo/lib/cmake/opencv4")
find_package(OpenCV REQUIRED)
add_executable(opencv-mobile-test main.cpp)
target_link_libraries(opencv-mobile-test ${OpenCV_LIBS})
其中三个变量路径需要修改为对应的位置
cmake 方式编译会创建一些中间目录和文件,因此新建一个 build 目录并进入该目录完成编译
mkdir build
cd build
cmake ..
make
编译完成后,会在 build 目录下生成 opencv-mobile-test 测试程序
将生成的 opencv-mobile-test 程序和图片文件 (分辨率 1024x1024) 通过 FileZilla 软件传输至开发板,并运行
chmod +x opencv-mobile-test
./opencv-mobile-test
生成 200x200 尺寸的 out.jpg 图像,即实现图片压缩。
该测试工程可结合物体识别模型,实现输入图像的尺寸调整,为之后的推理和处理等流程提供帮助。
本文介绍了 Milk-V Duo S 开发板实现 Buildroot SDK 镜像编译、基于 TDL 模型的人脸检测、OpenCV-mobile 库的测试、Demo例程测试等相关流程,为该产品的相关开发设计和产品应用提供了参考。
1
1
举报
更多回帖