本文分享在 Edgi-Talk M55 应用核 上运行 DeepCraft Deploy Vision 的完整流程。该工程在 USB 摄像头实时显示的基础上,集成了 DEEPCRAFT/TFLM 模型推理,实现对摄像头画面的实时目标检测,并将检测框与标签叠加显示到 MIPI LCD 屏幕上。

本文对应的官方示例工程为 Edgi_Talk_M55_DEEPCRAFT_Deploy_Vision,运行在 M55 应用核上。M55 由 M33 非安全核启动,且 M33 与 M55 工程必须使用相同版本的 BSP 包,否则会导致屏幕无法正常显示。

[url=][/url]一、功能简介

本项目基于 CherryUSB Host 协议栈 + Infineon DWC2 USB 控制器 + DEEPCRAFT AI 推理框架,在 UVC 摄像头实时显示的基础上增加了 AI 目标检测功能。主要特性包括:

特性说明
USB Host 模式通过 Type-C 接口连接 USB 摄像头
UVC 协议支持自动枚举 UVC 摄像头,识别格式和分辨率
AI 目标检测基于 DEEPCRAFT/TFLM 的实时视觉推理
检测框叠加在 LCD 上实时绘制目标检测框与类别标签
实时显示摄像头画面 + 检测结果实时渲染到 512×800 MIPI LCD
模型可替换支持自定义模型替换,导出接口保持一致即可[url=][/url]1.1 与 USB UVC 工程的关联

Edgi_Talk_M55_DEEPCRAFT_Deploy_Vision 是在 Edgi_Talk_M55_USB_UVC 基础上的 AI 增强版本:

工程功能AI 推理
Edgi_Talk_M55_USB_UVC摄像头实时显示无
Edgi_Talk_M55_DEEPCRAFT_Deploy_Vision摄像头实时显示 + 目标检测有

两个工程共用底层的 UVC 采集、解码和显示驱动,AI 工程额外增加了模型推理和结果渲染层。

[url=][/url]1.2 测试摄像头

与 UVC 工程一致,本文测试使用的摄像头为 奥比中光 Astra Pro 3D 体感摄像头。AI 推理模式强制使用 YUYV + 320×240 分辨率(即使输入其他参数也会被修正为该配置),原因如下:
  • 模型输入尺寸固定:AI 模型通常训练时即固定了输入分辨率(如 320×240 或更小)
  • 推理性能要求:较低分辨率可以减少推理计算量,保证实时性
  • YUYV 格式兼容性:未压缩格式解码开销小,适合配合 AI 推理的实时性要求
注意:AI 模式下推荐分辨率固定为 320×240 YUYV,更高的分辨率会导致推理帧率显著下降。

[url=][/url]二、硬件准备[url=][/url]2.1 硬件连接

将 USB 摄像头通过 Type-C 转 USB-A 转接线(或 OTG 线)连接到开发板的 USB-OTG 接口。

【图1:USB摄像头与开发板硬件连接】

[url=][/url]2.2 启动依赖与 BSP 版本一致性(关键!)

与前几篇文章一致,M55 应用核不能独立启动,必须由 M33 非安全核引导。但本工程有一个额外的重要约束:
⚠️ M33 工程与 M55 工程必须使用相同版本的 BSP 包!
我在实际测试中遇到了这个问题:

测试场景M33 工程 BSP 版本M55 工程 BSP 版本结果
场景11.3.01.3.0 (USB_UVC)✅ 正常显示
场景21.3.01.3.1 (DEEPCRAFT)❌ 屏幕不显示
场景31.3.11.3.1 (USB_UVC_New)✅ 正常显示
场景41.3.11.3.1 (DEEPCRAFT)✅ 正常显示

问题分析:M33 和 M55 之间的启动链路、共享内存布局、时钟配置等可能在不同 BSP 版本之间存在差异。如果版本不匹配,M33 可能无法正确初始化 M55 所需的硬件环境,导致 M55 程序运行但屏幕无输出。
解决方案:确保 M33 工程(如 Edgi_Talk_M33_Blink_LED)和 M55 工程(Edgi_Talk_M55_DEEPCRAFT_Deploy_Vision)基于 同一 BSP 版本创建。
烧写固件时必须严格按照以下顺序:
  • 首先编译并烧录 M33 工程(基于与 M55 相同版本的 BSP)
  • 在 M33 工程中开启 CM55 Core:

RT-Thread Settings --> 硬件 --> select SOC Multi Core Mode --> Enable CM55 Core

 

【图2:在M33工程中启用CM55 Core】
  • 然后编译并烧录 M55 工程(Edgi_Talk_M55_DEEPCRAFT_Deploy_Vision)

[url=][/url]三、工程结构与移植分析[url=][/url]3.1 工程结构

Edgi_Talk_M55_DEEPCRAFT_Deploy_Vision 工程运行在 M55 应用核 上,核心代码分布如下:

文件说明
applications/main.c主程序入口,初始化 USB Host 和 LED 指示
applications/uvc_ai_app.cAI 应用逻辑:推理触发、结果处理、显示叠加
libraries/Common/board/ports/usb/usbh_uvc_app.cUVC 应用层:帧缓冲管理、FPS 监控、MSH 命令
libraries/Common/board/ports/usb/usbh_uvc_stream.cUVC 流处理:数据包接收、帧组装
libraries/Common/board/ports/usb/usbh_uvc_display.cUVC 显示层:YUYV/MJPEG 解码、LCD 渲染
libraries/Common/deepcraft_ai/model/model.c / model.hAI 模型文件(权重、偏置等)
libraries/Common/deepcraft_ai/src/uvc_ai.cAI 核心处理:图像预处理、模型推理、后处理
libraries/components/CherryUSB-1.6.0/CherryUSB Host 协议栈[url=][/url]3.2 主程序(main.c)#include <rtthread.h>#include <rtdevice.h>#include <board.h>#include "usbh_core.h"#define LED_PIN_G  GET_PIN(16, 6)int main(void){    rt_kprintf("Hello RT-Thread\r\n");    rt_kprintf("It's cortex-m55\r\n");    /* USB host initialize */    usbh_initialize(0, USBHS_BASE, NULL);    rt_pin_mode(LED_PIN_G, PIN_MODE_OUTPUT);    while (1)    {        rt_pin_write(LED_PIN_G, PIN_LOW);        rt_thread_mdelay(500);        rt_pin_write(LED_PIN_G, PIN_HIGH);        rt_thread_mdelay(500);    }    return 0;}

 

主程序与 USB UVC 工程基本一致:
  • 打印启动日志,标识当前运行在 Cortex-M55 核上
  • 调用 usbh_initialize() 初始化 USB Host 控制器
  • 配置绿色 LED(P16_6)为输出,1Hz 闪烁指示系统运行
AI 应用的初始化在 uvc_ai_app.c 中完成,通过 RT-Thread 的自动初始化机制在系统启动时注册。

[url=][/url]3.3 AI 应用层(uvc_ai_app.c / uvc_ai.c)

AI 应用的核心流程如下:

摄像头帧缓冲 (YUYV 320x240)    → 图像预处理(缩放、归一化、格式转换)    → 输入到 AI 模型    → DEEPCRAFT/TFLM 推理    → 后处理(NMS、置信度过滤)    → 获取检测框坐标 (x, y, w, h) 和类别    → 叠加绘制到 LCD 帧缓冲    → GFXSS 硬件刷新显示

 

模型接口保持标准格式:

/* 模型初始化 */int IMAI_init(void);/* 模型推理 */int IMAI_compute(const void *input, void *output);/* 模型释放 */int IMAI_finalize(void);


[url=][/url]3.4 与原始 ModusToolbox 示例的差异方面ModusToolbox 原版RT-Thread 版本
OS/工程体系ModusToolbox 工程RT-Thread 工程组织与配置
运行控制程序自动启动MSH 命令控制 UVC 流启动/停止
USB 应用层Infineon USB 栈CherryUSB Host + 自定义应用层
AI 应用层原生实现适配 RT-Thread 线程/定时器机制
模型文件分散在各目录单独整理到 deepcraft_ai/model/


[url=][/url]四、关键配置项

在 rtconfig.h 中需要确认以下宏已启用:

/* CherryUSB Host */#define RT_USING_CHERRYUSB#define RT_CHERRYUSB_HOST#define RT_CHERRYUSB_HOST_DWC2_INFINEON#define RT_CHERRYUSB_HOST_VIDEO/* DeepCraft AI */#define BSP_USING_DEEPCRAFT_AI/* MSH 命令行 */#define RT_USING_MSH#define RT_USING_FINSH

 

如需修改 UVC 流处理相关代码(usbh_uvc_stream.c / usbh_uvc_port.c),需要开启:

#define RT_CHERRYUSB_HOST_BUILD_FROM_SOURCE

 

否则修改不会生效(使用的是预编译库)。

[url=][/url]五、编译与下载[url=][/url]5.1 导入与编译工程

  • 在 RT-Thread Studio 中导入 Edgi_Talk_M55_DEEPCRAFT_Deploy_Vision 示例工程
  • 确认 BSP 版本:检查 M33 工程和 M55 工程是否基于同一 BSP 版本
  • 确保工具链配置正确(GNU Arm Embedded,支持 Cortex-M55 + Helium/MVE)
  • 若编译出现 unknown type name 'uint32_t' 等错误,右键工程 → 同步 scons 配置至项目,然后重新编译
  • 点击编译按钮进行构建

【图3:在RT-Thread Studio中编译DEEPCRAFT工程】

[url=][/url]5.2 命令行编译(可选)scons -j8

 

生成产物:rt-thread.elf、rtthread.hex

[url=][/url]5.3 烧录固件

  • 首先编译并烧录 M33 工程(确保已启用 CM55 Core,且与 M55 工程同 BSP 版本)
  • 然后编译并烧录 M55 工程(Edgi_Talk_M55_DEEPCRAFT_Deploy_Vision)
  • 使用板载 DAP 下载器,通过 USB 连接 PC 进行烧录
⚠️ 烧录顺序不可颠倒,且 BSP 版本必须一致,否则 M55 核无法被正确唤醒或屏幕无显示。

[url=][/url]六、运行效果[url=][/url]6.1 摄像头识别

系统启动后,插入 USB 摄像头,串口会打印摄像头的详细信息,与 UVC 工程一致:

[I/usbh_video] ============= Video device information ===================bcdVDC:0100Num of altsettings:7 (iso mode)...bNumFormats:2  FormatIndex:1  FormatType:uncompressed  Resolution:      FrameIndex:4      wWidth: 320, wHeight: 240, fps: 30  FormatIndex:2  FormatType:mjpeg  Resolution:      FrameIndex:4      wWidth: 320, wHeight: 240, fps: 30

 

【图4:串口打印UVC摄像头枚举信息】

[url=][/url]6.2 启动 AI 视频流

在 MSH 终端输入命令启动视频流:

msh />usbh_uvc_start 0 320 240

 

【图5:在MSH终端启动AI视频流】
参数说明:
  • 0 = YUYV 格式(未压缩)
  • 320 240 = 分辨率
注意:AI 模式会强制使用 YUYV + 320×240,即使输入其他参数也会被修正为该配置。这是因为模型训练时固定了输入尺寸。

[url=][/url]6.3 LCD 显示效果

启动后,LCD 上会实时显示摄像头画面,并在检测到的目标上绘制 检测框 和 类别标签:

【图6:LCD屏幕显示AI目标检测框与标签】
显示内容包括:
  • 实时摄像头画面(经过旋转适配竖屏 LCD)
  • 目标检测框(矩形框标注目标位置)
  • 类别标签(框上方或旁边显示识别类别)
  • 置信度分数(可选显示)

[url=][/url]6.4 日志输出

串口终端会同时输出 UVC 状态日志和 AI 推理日志:

[I/uvc_app] UVC fps:30 disp:15 drop:0 urb:1322[AI] inference time: 45ms[AI] #1 bbox=[120,80,200,150] class="person" conf=0.92[AI] #2 bbox=[300,200,350,280] class="cup" conf=0.78

 

【图7:串口终端输出UVC状态与AI推理日志】

字段说明
fps摄像头实际输出帧率
dispLCD 成功显示帧数
drop因处理不过来而丢弃的帧数
inference time单次 AI 推理耗时
bbox检测框坐标 [x, y, w, h]
class识别类别
conf置信度(0~1)[url=][/url]6.5 停止视频流msh />usbh_uvc_stop

 


[url=][/url]七、异常处理[url=][/url]7.1 屏幕无显示(BSP 版本不一致)

现象:M55 程序已烧录,串口有输出,但 LCD 屏幕完全不显示。
原因:M33 工程和 M55 工程使用了不同版本的 BSP 包,导致启动链路或共享内存配置不匹配。
解决:
  • 确认 M33 工程与 M55 工程基于 同一 BSP 版本
  • 如 M33 是 1.3.0 而 M55 是 1.3.1,需要统一版本
  • 重新创建工程或升级/降级 BSP 包

[url=][/url]7.2 uvc abort1 / uvc abort2

现象:串口打印 uvc abort1 或 uvc abort2,画面卡住或闪烁。
原因:USB 传输异常或摄像头数据流中断。
解决:当前实现已包含简化恢复流程,会自动重启 UVC 流并打印 UVC stream restart (...)。如频繁出现,可排查:
  • 摄像头供电/线材质量
  • UVC 带宽与分辨率配置
  • 应用层负载(显示刷新 + AI 推理 + 日志输出)

[url=][/url]7.3 AI 推理帧率低

现象:画面卡顿,检测框更新不流畅。
解决:
  • 确认使用 320×240 分辨率(AI 模式已强制)
  • 减少同时检测的目标数量
  • 关闭或减少串口日志输出(日志打印占用 CPU)
  • 检查模型复杂度,必要时替换更轻量的模型

[url=][/url]7.4 编译报错:unknown type name 'uint32_t'

解决方案:右键点击工程名 → 同步 scons 配置至项目 → 重新编译。

[url=][/url]八、模型替换说明

模型采用"单独目录"方式管理,替换时保持导出接口与现有调用一致即可。

[url=][/url]8.1 模型文件位置libraries/Common/deepcraft_ai/├── model/│   ├── model.c    /* 模型权重、网络结构 */│   └── model.h    /* 模型接口声明 */└── src/    └── uvc_ai.c   /* AI 核心处理逻辑 */


[url=][/url]8.2 模型接口规范

替换模型时,需确保以下导出接口保持一致:

/* 模型初始化:加载权重、分配内存 */int IMAI_init(void);/* 模型推理:输入预处理后的图像,输出检测结果 */int IMAI_compute(const void *input, void *output);/* 模型释放:释放模型占用的资源 */int IMAI_finalize(void);


[url=][/url]8.3 替换步骤

  • 使用 DeepCraft 或其他工具训练/导出新模型
  • 将生成的模型 C 文件和头文件替换到 deepcraft_ai/model/ 目录
  • 确保 IMAI_init / IMAI_compute / IMAI_finalize 接口签名一致
  • 根据新模型的输入尺寸,调整 uvc_ai.c 中的预处理参数
  • 重新编译工程并烧录

【图8:模型文件目录结构与替换位置】

[url=][/url]九、小结

本文详细介绍了在 Edgi-Talk 平台 M55 核上运行 DeepCraft Deploy Vision AI 视觉目标检测的完整流程,包括:
  • DeepCraft AI 推理框架:在 M55 上运行 TFLM 模型实现实时目标检测
  • UVC 摄像头采集:基于 CherryUSB Host 的摄像头数据采集
  • 检测框叠加显示:在 LCD 上实时绘制检测结果
  • BSP 版本一致性:M33 与 M55 工程必须使用相同 BSP 版本的关键经验
  • 模型替换方法:保持标准接口即可替换自定义模型
  • 启动依赖:M33 必须先于 M55 烧录,且需在 M33 中启用 CM55 Core

[url=][/url]参考资料

  • Infineon PSOC™ E84 Edgi-Talk 开发板资料汇总
  • RT-Thread 官方文档 - PSOC E84 Edgi-Talk
  • RT-Thread Studio BSP GitHub 仓库
  • 上一篇:九、USB 摄像头实时显示


---------------------
作者:HonestQiao
链接:https://bbs.21ic.com/icview-3514309-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

Logo

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

更多推荐