Milk-V Duo S开发板AI视觉应用与环境搭建指南
2026/7/16 15:20:24 网站建设 项目流程

1. Milk-V Duo S开发板初体验与环境搭建

Milk-V Duo S是一款基于SG2000芯片的嵌入式开发板,主打边缘计算和AI视觉应用。作为一款性价比极高的开发平台,它支持多种计算机视觉算法和多媒体处理功能。我最近拿到了这块开发板,经过一周的深度体验,发现它在人脸检测、目标识别等场景下表现相当出色。

开发板标配256MB内存,搭载双核C906处理器和1GHz主频,支持Linux系统运行。最吸引我的是它内置的TPU加速单元,能够高效运行各类AI模型。板载的百兆以太网口和USB 2.0接口为外设连接提供了便利,特别是配合摄像头使用时,可以实现实时视频流处理。

提示:首次使用前建议准备以下物品:5V/2A电源适配器、Type-C数据线、TF卡(建议8GB以上)、USB摄像头(推荐支持MJPEG格式的1080P摄像头)以及网线。

开发环境搭建主要分为三个步骤:

  1. 系统镜像烧录: 从官网下载最新的Buildroot系统镜像,使用balenaEtcher等工具写入TF卡。插入开发板后,通过串口终端(推荐使用MobaXterm或Putty)连接,波特率设置为115200。

  2. 网络配置: 如果使用有线网络,直接插入网线即可自动获取IP。更便捷的方式是使用USB-NCM网络共享,通过Type-C线连接电脑后,开发板会模拟成网卡设备,默认IP为192.168.42.1。

  3. 开发工具链安装: 下载官方提供的SDK工具包,包含交叉编译器、库文件和示例代码。解压后需要设置环境变量:

    export PATH=$PATH:/path/to/toolchain/bin export CROSS_COMPILE=riscv64-linux-musl-

2. SDK编译与系统定制

Milk-V的SDK基于Buildroot构建,支持深度定制系统组件。我的编译过程遇到了几个关键问题,这里分享解决方案:

2.1 基础编译流程

首先获取SDK源码:

git clone https://github.com/milkv-duo/duo-buildroot-sdk.git cd duo-buildroot-sdk

配置编译选项时,建议首次使用默认配置:

make milkv_duo_s_defconfig make menuconfig # 可选:调整内核模块和软件包

开始编译(建议使用-j参数加速):

make -j$(nproc)

编译完成后,输出镜像位于output/images目录下。整个过程约需30分钟(取决于主机性能)。

2.2 常见编译问题解决

问题1:交叉编译器路径错误症状:编译时报错"riscv64-linux-musl-gcc: not found" 解决:确认工具链路径正确,并在~/.bashrc中添加:

export PATH=/opt/duo-sdk/toolchain/bin:$PATH

问题2:依赖库缺失症状:出现"fatal error: xxx.h: No such file or directory" 解决:安装基础开发库:

sudo apt install build-essential libncurses-dev bison flex

问题3:内存不足症状:编译过程中被kill 解决:增加swap空间或使用-j2降低并行编译任务数

2.3 添加自定义软件包

Buildroot支持添加第三方软件包。以OpenCV为例,需要在package/目录下创建opencv目录,并编写Config.in和opencv.mk文件。关键配置项包括:

  • 启用NEON和VFPv3硬件加速
  • 禁用不需要的模块(如java绑定)
  • 设置-DWITH_JPEG=ON支持摄像头输入

3. 人脸检测实战与性能优化

官方提供的TDL SDK包含现成的人脸检测示例,基于SCRFD模型实现。经过实测,在768x432分辨率下能达到15FPS的处理速度。

3.1 基础部署流程

  1. 获取测试程序:
scp sample_vi_fd root@192.168.42.1:/root/ scp scrfd_768_432_int8_1x.cvimodel root@192.168.42.1:/root/
  1. 赋予执行权限并运行:
chmod +x sample_vi_fd ./sample_vi_fd scrfd_768_432_int8_1x.cvimodel
  1. PC端使用VLC查看RTSP流:
rtsp://192.168.42.1/h264

3.2 关键参数调优

延迟优化: 在vlc中调整缓存参数能显著降低延迟:

  • 网络良好时设为100-300ms
  • 无线环境建议500-800ms

模型选择: 开发板支持多种分辨率模型:

  • 480x270:速度最快(25FPS),适合远距离检测
  • 768x432:平衡精度与速度(15FPS)
  • 1080P:精度最高(8FPS),适合静态场景

多线程处理: 通过修改sample_vi_fd.c中的线程数配置:

#define VIDEO_CHANNEL_NUM 2 // 默认单线程 #define TPU_PARALLEL 2 // TPU并行数

3.3 实际应用中的问题排查

问题1:检测框抖动解决方案:添加简单的轨迹预测算法,或调高检测置信度阈值(修改模型输入参数)

问题2:漏检侧脸解决方案:使用数据增强后的模型,或降低nms_threshold值(0.3→0.2)

问题3:夜间性能下降解决方案:添加红外摄像头支持,或启用ISP的WDR模式:

v4l2-ctl -d /dev/video0 --set-ctrl=wide_dynamic_range=1

4. OpenCV移植与性能测试

虽然官方SDK已包含计算机视觉库,但某些场景需要完整版OpenCV。我尝试了OpenCV 4.5的移植,过程颇具挑战。

4.1 交叉编译OpenCV

配置CMake时关键选项:

cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/riscv64-gcc.toolchain.cmake \ -DENABLE_NEON=ON \ -DWITH_OPENMP=OFF \ # RISC-V暂不支持 -DBUILD_opencv_highgui=OFF \ # 减少依赖 -DWITH_GTK=OFF \ -DCMAKE_INSTALL_PREFIX=/usr/local/opencv

重点优化项

  1. 启用T-Head扩展指令集:
-march=rv64gcvxthead -mabi=lp64d
  1. 使用libjpeg-turbo替代原生jpeg库提升解码速度

  2. 禁用不必要的模块:

-DBUILD_opencv_python=OFF -DBUILD_TESTS=OFF

4.2 性能对比测试

使用相同的640x480测试图像,对比不同配置下的Canny边缘检测耗时:

配置耗时(ms)内存占用(MB)
官方OpenCV-Mobile4512
自编译OpenCV基础版6818
带V扩展优化5215
x86平台作为基准835

4.3 OpenCV实用技巧

内存优化: RISC-V平台内存有限,建议:

  • 使用UMat代替Mat启用硬件加速
  • 及时释放临时图像
  • 设置setNumThreads(1)避免内存竞争

算法替代方案

  • 人脸检测:优先使用TDL SDK而非DNN模块
  • 特征匹配:ORB比SIFT更节省资源
  • 图像滤波:尝试使用vx_opencv混合编程

摄像头采集优化

VideoCapture cap(0); cap.set(CAP_PROP_FRAME_WIDTH, 640); // 降低分辨率 cap.set(CAP_PROP_FPS, 15); // 限制帧率 cap.set(CAP_PROP_BUFFERSIZE, 2); // 减少缓冲

5. 进阶开发与项目集成

完成基础功能验证后,我开始尝试将开发板集成到实际项目中。一个典型的智能门禁系统包含以下组件:

5.1 系统架构设计

[USB Camera] | v [Video Capture Daemon] --> [Face Detection] --> [SQLite DB] | | v v [RTSP Server] [HTTP API]

5.2 关键实现细节

多进程通信: 使用共享内存传递视频帧,避免多次拷贝:

int shm_fd = shm_open("/video_frame", O_CREAT|O_RDWR, 0666); ftruncate(shm_fd, FRAME_SIZE); void *ptr = mmap(NULL, FRAME_SIZE, PROT_WRITE, MAP_SHARED, shm_fd, 0);

性能监控: 添加系统状态上报:

# 获取CPU负载 cat /proc/loadavg # 获取内存使用 free -m # 获取TPU利用率 cvirtp stat -d /dev/cvi-tpu

看门狗机制: 防止程序异常退出:

int wdt_fd = open("/dev/watchdog", O_WRONLY); ioctl(wdt_fd, WDIOC_SETTIMEOUT, &timeout); while(1) { write(wdt_fd, "\0", 1); // 喂狗 sleep(10); }

5.3 实际部署建议

  1. 电源管理

    • 使用优质5V电源,峰值电流需达2A
    • 添加延时电路防止上电冲击
    • 必要时启用CPU调频:
      echo powersave > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
  2. 散热方案

    • 持续负载时建议添加散热片
    • 外壳设计保持通风
    • 监控温度:
      cat /sys/class/thermal/thermal_zone0/temp
  3. 固件升级: 制作自动升级脚本:

    fw_setenv bootcmd "mmc dev 0; ext4load mmc 0:2 0x21000000 /boot/uImage; bootm 0x21000000" dd if=new_firmware.bin of=/dev/mmcblk0p2 bs=1M sync reboot

经过两周的深度使用,Milk-V Duo S展现出了超出预期的性能表现。特别是在人脸检测场景下,通过合理的模型选择和参数调优,完全能够满足大多数嵌入式视觉应用的需求。对于想要入门边缘AI开发的工程师,这块开发板提供了一个绝佳的实践平台。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询