问题描述
K230 RTOS 正式支持 UVC(USB Video Class)摄像头功能!支持即插即用,通过简单的 API 调用和示例代码,即可快速实现视频流采集、解码与显示,为智能视觉应用(如安防监控、人脸识别、工业检测等)提供了强大的底层支持。
一、核心功能亮点
1.MJPEG 格式支持
当前默认支持 MJPEG 编码格式。
UVC API 接口
- uvc_init():初始化摄像头,自动匹配最优分辨率。
- uvc_get_frame():阻塞获取一帧图像数据。
- uvc_put_frame():释放图像缓冲区。
- uvc_exit():关闭摄像头并释放资源。
灵活的分辨率适配
用户可指定预期分辨率,系统自动匹配设备支持的最接近参数。
二、快速上手指南
1. 准备工作
硬件:K230 开发板 + UVC 摄像头(需支持 MJPEG 格式)
软件:K230 RTOS SDK(已包含 UVC 驱动)
2. 关键代码示例
// 初始化 VB 内存(UVC 缓冲区来自 VB)
kd_mpi_vb_set_config(&config);
kd_mpi_vb_init();
// 初始化 UVC 设备(预期分辨率 640x480,MJPEG 格式)
int width = 640, height = 480;
uvc_init(&width, &height, 1);
// 循环采集并保存图像
struct uvc_frame frame;
do {
uvc_get_frame(&frame);
// 写入文件或显示到屏幕
FILE *file = fopen("sdcard/test.jpg", "wb");
fwrite(frame.userptr, 1, frame.len, file);
fclose(file);
uvc_put_frame(&frame);
} while (--i);
// 释放资源
uvc_exit();
3. 示例代码路径
K230 SDK 内置 demo 供大家参考:
aaa@DESKTOP-OSN5BJK:~/canmv_k230_gitee/src/rtsmart/mpp/userapps/sample/sample_uvc$ ls
Makefile uvc_test.c
三、 配置与运行
1. 编译配置,开启 UVC 相关驱动选项
#进入SDK包根目录
# make menuconfig
MPP Configuration > Enable build MPP samples > Enable userapps samples
-> UVC Sample
# make rtsmart-menuconfig
Components Configuration > Enable CherryUSB > Enable CherryUSB Host
-> CherryUSB Host Controller Driver (Using DesignWare Driver)->Using DesignWare Driver
Components Configuration > Enable CherryUSB > Enable CherryUSB Host
-> Enable UVC
# 2、本地编译
# 3、获取当前屏幕的connector_type
# connector_type的枚举值的获取方式有两个,一个是文档和源码,另一个是命令list_connector:
msh />list_connector
Connector Type List:
0 -> HX8377_V2_MIPI_4LAN_1080X1920_30FPS
1 -> ILI9806_MIPI_2LAN_480X800_30FPS
2 -> ILI9881_MIPI_4LAN_800X1280_60FPS
20 -> ST7701_V1_MIPI_2LAN_480X800_30FPS
21 -> ST7701_V1_MIPI_2LAN_480X854_30FPS
22 -> ST7701_V1_MIPI_2LAN_480X640_30FPS
23 -> ST7701_V1_MIPI_2LAN_368X544_60FPS
100 -> LT9611_MIPI_ADAPT_RESOLUTION
101 -> LT9611_MIPI_4LAN_1920X1080_30FPS
102 -> LT9611_MIPI_4LAN_1920X1080_60FPS
103 -> LT9611_MIPI_4LAN_1920X1080_50FPS
104 -> LT9611_MIPI_4LAN_1920X1080_25FPS
105 -> LT9611_MIPI_4LAN_1920X1080_24FPS
110 -> LT9611_MIPI_4LAN_1280X720_60FPS
111 -> LT9611_MIPI_4LAN_1280X720_50FPS
112 -> LT9611_MIPI_4LAN_1280X720_30FPS
120 -> LT9611_MIPI_4LAN_640X480_60FPS
200 -> VIRTUAL_DISPLAY_DEVICE
-1 -> UNKNOWN
2.插入 UVC 摄像头,运行 demo
./sample_uvc [connector_type] [rotation] [is_jpeg] [width] [height] [total_frame]
- connector_type:屏幕类型(如 ST7701_V1_MIPI 对应枚举值 20)。
- rotation:图像旋转(0 或 1)。
- is_jpeg:格式选择(1 为 MJPEG,默认)。
- width:图像宽度。
- height:图像高度。
- total_frame:显示的帧数。
运行示例:
# 接入 ST7701 屏幕 + 640x480 摄像头
sdcard/app/userapps/sample_uvc.elf 20 1 1 640 480 1000000
# 接入HDMI显示屏 + 1920x1080 摄像头 (HDMI显示屏上不支持旋转)
sdcard/app/userapps/sample_uvc.elf 101 0 1 1920 1080 1000000

四、注意事项
1. 带宽限制:避免通过 USB Hub 同时连接 UVC 设备和其他高速外设(如大容量存储)。
2. 分辨率匹配:初始化时系统会自动适配设备支持的分辨率,建议优先使用默认值。
3. 资源释放:调用 uvc_exit() 释放内存,避免内存泄漏。
五、应用场景
- 安防监控:实时视频流采集与存储。
- 智能交互:人脸识别、手势识别。
- 工业检测:图像质量分析、缺陷检测。
- 教育开发:视觉类实验与课程设计。
六、常见问题
1.运行 demo 报错:
kd_mpi_connector_open, failed(-1).
kd_mpi_connector_power_set, error(-1)
kd_mpi_connector_id_get, error(-1)
kd_mpi_connector_init, error(-1)
检查屏幕连接是否正常,或者 make menuconfig 查看对应屏幕的驱动是否打开
七、参考资料
K230 RTOS SDK资料:
https://developer.canaan-creative.com/k230_rtos/zh/main/index.html
K230 官方文档 :
https://developer.canaan-creative.com/zh/document
B站视频教程:
https://www.bilibili.com/video/BV1Y7ovYqEws
问答社区:
https://developer.canaan-creative.com/answer/
立即体验,让 K230 赋能你的视觉创新!