K230 RTOS 使用 UVC 摄像头

Viewed 124

问题描述


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

image.png

四、注意事项

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 赋能你的视觉创新!

1 Answers