扫描笔视觉算法示例
源码位置: samples/algorithms/spv 查看源码
功能说明
本示例演示 ARCS 双核架构下扫描笔视觉算法的完整调用链路。CP 侧 sample 从 eMMC 顺序读取 100 张 96x240 的 mock 灰度图,通过 acomp_cv 图像流发送给 AP 侧;AP 侧依次执行 stitch、cutline、ocr 三段处理,最终将整次扫描的 OCR 结果通过 IPC 回传给 CP 侧。
本示例同时覆盖以下关键能力:
CP 侧
sdmmc0/disk_mem初始化100 张 mock 图的 eMMC 顺序读取与流式发送
AP/CP 间扫描图像流、状态和 OCR 结果回传
扫描笔视觉算法 Flash/eMMC 资源布局与烧录说明
AP 侧运行时资源占用评估
硬件连接
无需额外连接 AP/CP,两核均运行在同一颗芯片内部
sdmmc0:用于访问 eMMC/SD 存储上的algo_emmc.bin,其中包含 100 张 mock 图和扫描笔视觉模型资源调试串口:默认查看 AP、CP 两侧日志
示例内容
CP 侧初始化
ic_messageCP 侧获取
sdmmc0并执行lisa_sdmmc_probe(),确保 AP 侧后续disk_mem可访问 eMMC 模型资源CP 侧启动
disk_mem服务、acomp框架和当前 sampleCP 侧调用
acomp_cv_prepare(),向 AP 侧同步stitch/cutline/ocr资源描述CP 侧从 eMMC
0x9600000顺序读取 100 张96x240mock 图,并通过stream.cv_image发送给 AP 侧AP 侧对 100 张图完成
stitch -> cutline -> ocrAP 侧返回最终 OCR 结果,CP 侧打印结果日志并结束 sample
AP/CP 分工
核心 |
主要职责 |
|---|---|
AP 侧 |
运行扫描笔视觉算法服务、加载 |
CP 侧 |
初始化 |
AP 侧配套说明
配套 AP 固件镜像为
res/ap.binAP 侧扫描笔视觉服务负责模块为
cv/cv_algo
编译
重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:
arcs_evb - ARCS EVB 评估板
arcs_mini - ARCS Mini 开发板
根据您的开发板型号,选择对应的编译命令:
在 SDK 根目录执行编译:
# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini
Note
确保已安装对应的工具链。
烧录
本示例需要同时准备 Boot、AP 固件、Flash 算法资源、CP 固件以及 eMMC 资源镜像。请按下表地址烧录:
镜像 |
介质 |
烧录地址 |
说明 |
|---|---|---|---|
|
Flash |
|
Boot 固件 |
|
Flash |
|
AP 固件 |
|
Flash |
|
Flash 常驻算法资源 |
|
Flash |
|
本 sample 生成的 CP 固件 |
|
eMMC |
|
eMMC 资源镜像,地址为基于 |
地址信息与 res_info.md 保持一致。
烧录顺序建议
烧录
boot.bin烧录
ap.bin烧录
algo.bin烧录
arcs.bin烧录
algo_emmc.bin
预期输出
CP 侧日志
I/main CP=======! Hard ID: 1
I/main ic_message_init done!
I/main sdmmc probe success
I/main disk_mem_urpc_init done!
I/app_cv_in send 100 mock images from eMMC: base=0x9600000, frame=96x240
I/app_cv_in all mock images submitted
I/app_cv ocr result: ...
AP 侧日志
AP Hard ID: 0
boot cp from address: 0x308d0000
I/cv cv_prepare enter
I/cv_algo res[1]: type=1, storage=0, addr=0x30420100, size=461952
I/cv_algo res[2]: type=2, storage=1, addr=0xa000000, size=4586672
I/cv_algo stitch done, oframe: ...
I/cv_algo cutline out: ...
I/cv_algo ocr result[...]: ...
核心 API
API |
说明 |
|---|---|
|
获取 SDMMC 设备实例 |
|
初始化 |
|
启动 CP 侧 |
|
初始化扫描笔视觉资源描述并同步给 AP 侧 |
|
建立图像输入通道 |
|
分配图像帧头缓冲 |
|
提交图像帧头到 AP 侧 |
|
AP 侧处理完当前帧,允许 CP 侧复用单帧缓冲 |
|
AP 侧回传最终 OCR 结果 |
功能详解
扫描笔链路
本示例走的是扫描笔完整处理链,而不是单张 OCR:
CP 侧从 eMMC 读取第 1 张 mock 图,发送
BEGINCP 侧连续发送第 2~99 张 mock 图,发送
CONTINUECP 侧发送第 100 张 mock 图,发送
ENDAP 侧在
END到达后完成拼接图生成AP 侧继续执行
cutlineAP 侧对裁切结果执行
ocrAP 侧回传整次扫描的最终识别文本
mock 图与模型资源布局
本示例依赖三类 eMMC 数据:
名称 |
偏移地址 |
大小(字节) |
说明 |
|---|---|---|---|
|
|
2304000 |
100 张 mock 图,总输入数据 |
|
|
461952 |
|
|
|
4586672 |
OCR 模型 |
mock 图规格如下:
项目 |
值 |
|---|---|
单张宽度 |
|
单张高度 |
|
单张大小 |
|
图片张数 |
|
总大小 |
|
AP 侧算法资源占用
AP 侧扫描笔视觉算法在运行时主要占用共享 PSRAM 资源池。配套 AP 工程当前关键配置和计算如下:
项目 |
大小(字节) |
说明 |
|---|---|---|
|
8349696 |
AP 侧总 PSRAM heap |
|
7733248 |
AP 侧算法资源缓冲池上限 |
|
2097152 |
Stitch / cutline 输出大缓冲 |
|
1044480 |
算法实例 PSRAM 区 |
|
1024 |
OCR 文本输出缓冲 |
|
461952 |
当 cutline 走 eMMC 时的额外 PSRAM 资源拷贝 |
|
4586672 |
OCR 模型 PSRAM 资源拷贝 |
共享池峰值占用(cutline 走 flash XIP) |
7729328 |
低于当前池上限 |
共享池峰值占用(cutline 走 eMMC) |
8191280 |
超出当前池上限 |
当前 sample 联调要求
cutline资源走 Flash、ocr资源走 eMMC。若cutline退化为从 eMMC 装载,AP 侧现有资源池仍会溢出。
镜像文件占用
res/ 目录下当前配套镜像大小如下:
文件 |
大小(字节) |
说明 |
|---|---|---|
|
136780 |
Boot 固件 |
|
1216848 |
AP 固件 |
|
4860443 |
Flash 算法资源 |
|
214958080 |
eMMC 资源镜像 |
关键代码
CP 侧启动顺序
ic_message_init();
sdmmc = lisa_device_get("sdmmc0");
ret = lisa_sdmmc_probe(sdmmc);
disk_mem_urpc_init();
acomp_init();
app_cv_init();
100 帧 mock 图发送流程
for (index = 0; index < 100; index++) {
app_cv_image_read_mock_image(index);
cv_send_frame((uint32_t)(uintptr_t)g_cv_image_buf,
index,
96,
240,
app_cv_mock_frame_status(index));
if (index != 99) {
xSemaphoreTake(g_cv_frame_done_sem, ...);
}
}
配置说明
本示例的关键配置位于 prj.conf:
配置项 |
说明 |
|---|---|
|
将 CP 固件链接到 Flash |
|
不生成 AP 启动 CP 的 boot 合并镜像 |
|
编入 |
|
开启 |
|
在 CP 侧启用 |
|
开启磁盘驱动与 SDMMC 后端 |
|
固定 |
|
固定 OCR 模型地址 |
注意事项
algo_emmc.bin必须正确烧录到 eMMC;否则 CP 侧读不到 100 张 mock 图,AP 侧也无法加载cutline/ocr模型本 sample 的 mock 图读取走 CP 侧
lisa_sdmmc_read(),AP 侧模型加载走disk_mem,两者都依赖sdmmc0已被正确初始化100 张 mock 图必须按
BEGIN -> CONTINUE -> END顺序发送;若中途乱序或提前停止,AP 侧stitch流程不会得到有效完整图sample 当前使用单帧缓冲,必须等待
CV_CB_EVENT_FRAME_DONE后才能复用该缓冲发送下一张图当前配套 AP 固件已将
CONFIG_ALGO_RESOURCE_PSRAM_BUFFER调整为0x760000,可覆盖“cutline走 Flash、ocr走 eMMC”的联调路径,但资源余量很小若
cutline未命中 Flash 资源而退化为从 eMMC 装载,AP 侧现有资源池仍会溢出,联调前需先确认资源装载路径
相关文档
res_info.md:镜像烧录地址说明
main.c:CP 侧启动与
sdmmc0/disk_mem初始化入口app_cv.c:CP 侧扫描笔视觉控制逻辑
app_cv_image_input.c:100 张 mock 图读取与发送逻辑