项目概述

本项目基于AC880-Pro(Xilinx Zynq-7020)开发板,实现了一套完整的FPGA硬件加速YOLO实时目标检测 + WiFi无线图传方案。系统上电后自动开启WiFi热点,手机/电脑连接即可通过浏览器实时查看摄像头画面和AI检测结果,无需安装任何APP。

核心参数:

  • 主控芯片:Xilinx Zynq-7020(双核ARM Cortex-A9 + FPGA Artix-7)
  • 摄像头:MIPI接口摄像头,Bayer格式输出
  • 分辨率:852×480
  • 帧率:优化后可达 10+ FPS
  • 检测模型:YOLOv4-tiny(COCO数据集)
  • 无线连接:WiFi AP热点(SSID: AC880-YOLO)
  • 访问方式:手机浏览器直接访问 http://192.168.100.1:8089/

手机实时预览效果

硬件平台

AC880-Pro开发板核心配置:

  • SoC:Xilinx Zynq XC7Z020-1CLG484
  • 内存:1GB DDR3
  • 存储:16MB SPI Flash + SD卡
  • 摄像头:MIPI摄像头模组
  • 网络:千兆以太网 + USB WiFi(RTL8188CUS)
  • 散热:定制铝合金散热片

开发板实物图

系统架构

整个系统采用"FPGA硬件加速 + ARM软件服务"的异构架构:

  1. FPGA层:MIPI摄像头接收 → ISP/Bayer解码 → DPU神经网络推理加速
  2. ARM层:VDMA帧捕获 → WiFi热点服务 → Web预览服务 → YOLO后处理
  3. 客户端:手机浏览器通过MJPEG流实时查看画面和检测框

关键技术实现

1. Initramfs持久化方案

开发板使用initramfs作为根文件系统,整个根文件系统驻留在内存中,重启后所有文件丢失。解决方案:将所有关键文件打包进FIT镜像(image.ub)中的initramfs,使用cpio.gz压缩格式。

2. WiFi热点自动启动

使用Linux标准工具链搭建WiFi AP:

  • hostapd:提供WiFi热点功能
  • udhcpd:为连接设备分配IP地址
  • init.d/S99ac880yolo:开机自启动脚本
# /etc/init.d/S99ac880yolo 核心逻辑
start() {
    echo "Starting AC880-YOLO WiFi AP..."
    /opt/ac880/start_ap.sh &
}

3. 帧率优化策略

在保持852×480分辨率不变的前提下,将帧率从4-5fps优化到10+fps,关键优化点:

(1) Bayer快速解码路径

producer工具添加 --out-down 2 参数,直接输出426×240分辨率图像,减少4倍数据处理量:

# 优化后:producer直接下采样输出
PRODUCER_CMD="ac880_vdma_c1_producer --vdma-hsize 2168 \\
    --vdma-stride 2168 --vdma-vsize 480 --vdma-frame-span 0x110000 \\
    --bayer bggr --delay-ms 0 --wait-ms 1 --out-down 2"

(2) JPEG编码质量调优

# 降低JPEG质量从75到40,大幅减少编码耗时
PREVIEW_CMD="ac880_b7_preview_base --fps 60 --quality 40 --down 1"

(3) MJPEG流替代轮询

使用 /stream.mjpg MJPEG流替代 /snapshot.jpg 轮询,减少HTTP请求开销,客户端HTML使用CSS放大显示:

<img src="/stream.mjpg" style="width:852px; height:480px; image-rendering:pixelated;">

(4) 进程优先级调度

nice -n -2 ./ac880_b7_preview_base   # 预览服务:最高优先级
nice -n 0  ./ac880_vdma_c1_producer   # 采集:默认优先级
nice -n 19 ./ac880_yolo_service       # YOLO检测:最低优先级(后台)

(5) YOLO检测间隔控制

# 设置检测间隔为1000ms,降低CPU占用
YOLO_CMD="ac880_yolo_service --interval-ms 1000 --conf 0.20"

4. Watchdog守护机制

实现watchdog后台服务,监控producer、YOLO、preview三个核心进程,崩溃时自动重启:

start_service() {
    name="$1"; cmd="$2"; nice_val="$3"
    if ! is_running "$name"; then
        nohup nice -n $nice_val $cmd >> "$logfile" 2>&1 &
    fi
}

# 定期检查
while true; do
    start_service "producer" "$PRODUCER_CMD" 0
    start_service "preview"  "$PREVIEW_CMD" -2
    start_service "yolo"     "$YOLO_CMD"    19
    sleep 5
done

5. FIT镜像构建

使用Python的fdt库构建FIT镜像,统一打包kernel、device tree、initramfs:

fit = fdt.FDT()
images = fdt.Node(`images`)
# 添加 kernel@1, fdt@system-top.dtb, ramdisk@1

configs = fdt.Node(`configurations`)
configs.append(fdt.PropStrings(`default`, `conf@system-top.dtb`))

data = fit.to_dtb(version=17, last_comp_version=16)

效果展示

性能数据:

  • 帧率:10-12 FPS(MJPEG流模式)
  • 延迟:约100-200ms
  • 检测精度:YOLOv4-tiny标准COCO精度
  • 连接距离:WiFi范围内(约10-20米)
  • 启动时间:上电到可用约30秒

踩坑记录

坑1:SD卡不识别

设备树中MMC节点默认禁用,需要启用并添加no-1-8-v属性强制3.3V操作,绑定sdhci-arasan驱动。

坑2:FIT镜像启动失败 “Could not find configuration node”

FIT的default属性必须在configurations节点内(不是根节点),配置节点名需要和U-Boot期望的conf@<dtb-name>格式一致。

坑3:Bayer颜色不真实

摄像头输出BGGR格式的Bayer原始数据,需要正确设置Bayer解码参数和AWB(自动白平衡),否则画面偏色。

坑4:DPU驱动版本不匹配

出现ac880_dpu: disagrees about version of symbol module_layout错误,需要使用与当前内核版本精确匹配的.ko驱动文件。

坑5:initramfs重启丢失

所有放入根文件系统的文件必须打包进cpio.gz,重启后内存文件系统重置,手动拷贝的文件会丢失。

文件清单

/opt/ac880/
├── start_ap.sh              # 主启动脚本(WiFi+YOLO+预览)
├── watchdog.sh              # 进程守护脚本
├── ac880_vdma_c1_producer   # VDMA帧捕获+Bayer解码
├── ac880_b7_preview_base    # Web预览服务
├── ac880_yolo_service       # YOLO检测服务
├── libs/                    # 依赖库
└── ac880_yolov4_tiny_raw_coco_b800_0101.xmodel  # YOLO模型

/etc/init.d/S99ac880yolo     # 开机自启动脚本
/etc/hostapd.conf            # WiFi热点配置
/etc/udhcpd.conf             # DHCP服务器配置

总结

本项目完整实现了基于Zynq FPGA的边缘AI视觉检测方案,核心亮点:

  1. 真正的无线图传:开机即热点,手机直连,无需额外网络设备
  2. 硬件加速推理:FPGA DPU加速YOLOv4-tiny,实时检测
  3. 全流程自动化:上电自动启动,无需人工干预
  4. 帧率优化:通过多层优化在保持高分辨率的前提下达到10+fps
  5. 生产级稳定性:watchdog守护机制确保长时间运行不崩溃

基于这个方案,可以快速扩展各种AI视觉应用场景:安防监控、工业质检、智能机器人、教学演示等。


标签:#Zynq #FPGA #YOLO #目标检测 #WiFi图传 #边缘计算 #AC880 #嵌入式AI

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐