RISC-V技术论坛
直播中

jf_07365693

2年用户 380经验值
擅长:嵌入式技术 控制/MCU
私信 关注
[经验]

【Milk-V Duo S 开发板免费体验】SDK编译、人脸检测、OpenCV测试

face-detection

【Milk-V Duo S 开发板免费体验】SDK编译、人脸检测、OpenCV测试

本文介绍了 Milk-V Duo S 开发板实现 Buildroot SDK 镜像编译、基于 TDL 模型的人脸检测、OpenCV-mobile 库的测试等相关流程。

Buildroot SDK

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

克隆 SDK

git clone https://github.com/milkv-duo/duo-buildroot-sdk-v2.git --depth=1

在编译过程中,Buildroot 会自动下载一些源码包。

编译 SDK

进入 SDK 文件夹,执行一键编译脚本 build.sh

cd duo-buildroot-sdk-v2/
./build.sh lunch

选择目标开发板对应的固件型号,或直接运行 ./build.sh milkv-duos-musl-riscv64-sd

编译成功后可以在 out 目录下看到生成的镜像,其中 *.img 后缀的镜像为 SD 卡烧录镜像。

build_img.jpg

环境搭建

Cvitek 所提供的 TDL(Turnkey Deep Learning)集成算法,用以缩短应用程序开发所需的时间。

此架构实现了 TDL 所需算法包含其前后处理 提供统一且便捷的编程接口。

目前 TDL SDK 包含 移动侦测,人脸检测,人脸识别,人脸追踪,行人检测,语义分割,车牌辨识,车牌检测,活体识别,IR活体识别,婴儿检测,哭声检测,姿态检测,手势侦测,手势识别 等算法。

克隆 SDK

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 文件夹即可,无需重新下载。

加载编译环境时需要按提示输入所需编译目标:

  • 目标开发板选择:DuoS
  • 架构选择:RISCV64

之后自动部署环境配置等流程

build-environment.jpg

同一个终端,加载一次编译环境即可。

在当前终端下打开人脸检测的 Demo 例程文件夹 sample_vi_fd 并编译

cd sample_vi_fd
make

将生成的 sample_vi_fd 程序通过 FileZilla 软件或 scp 方式上传至 Duo S 开发板;

fd_generate.jpg

执行 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

显示信息如下

run_face-detection.jpg

提示未检测到传感器。

Demo 测试

官方文档中给出了 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 程序;

build_hello-world.jpg

通过 FileZilla 软件,将该文件传输至开发板;

运行

板端执行指令

chmod +x helloworld
./helloworld

打印对应的字符串

hello-world.jpg

同样方法,根据官方示例程序,可以实现多种传感器和外设的驱动。

OpenCV-mobile

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 文件。

创建make文件

使用 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})

其中三个变量路径需要修改为对应的位置

  • OpenCV_DIR:预编译包路径,注意版本号
  • CMAKE_C_COMPILER:交叉编译工具链中 gcc 的路径
  • CMAKE_CXX_COMPILER:交叉编译工具链中 g++ 的路径

编译

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)

无垠的广袤

2025-7-11 17:09:07
例程很丰富,编译方案也很详细,期待后续测评~
1 1 举报
  • jf_07365693: 感谢关注~ 后续会增加有关外设传感器等模块的测试和 DIY ,敬请期待~

更多回帖

发帖
×
20
完善资料,
赚取积分