重现步骤
1,连接Logicool HD Pro Webcam C920外接USB摄像头
2,执行以下UVC API手册的6. 最佳实践的代码
https://developer.canaan-creative.com/k230_canmv/zh/main/zh/api/mpp/media_uvc.html
期待结果和实际结果
期待能看到USB摄像头的拍摄影像,但执行中,
mode select时会发生以下错误:
select mode success: False, mode: {"width":640, "height":480, "format":mjpeg, "fps":30.00}
软硬件版本信息
开发板:01Studio CanMV K230
使用镜像:CanMV-K230_01Studio_micropython_v1.2.2-0-g4b8cae1_nncase_v2.9.0.img
错误日志
CanMV v1.2.2(based on Micropython e00a144) on 2025-04-23; k230_canmv_01studio with K230
vb common pool count 3
detect USB Camera #HD Pro Webcam C920
模式0: 640x480 0@30.00003fps
模式1: 640x480 0@24.00004fps
模式2: 640x480 0@20.0fps
模式3: 640x480 0@15.00002fps
模式4: 640x480 0@10.0fps
模式5: 640x480
模式6: 640x480
模式7: 160x90 0@30.00003fps
模式8: 160x90 0@24.00004fps
模式9: 160x90 0@20.0fps
模式10: 160x90 0@15.00002fps
模式11: 160x90 0@10.0fps
模式12: 160x90
模式13: 160x90
模式14: 160x120 0@30.00003fps
模式15: 160x120 0@24.00004fps
模式16: 160x120 0@20.0fps
模式17: 160x120 0@15.00002fps
模式18: 160x120 0@10.0fps
模式19: 160x120
模式20: 160x120
模式21: 176x144 0@30.00003fps
模式22: 176x144 0@24.00004fps
模式23: 176x144 0@20.0fps
模式24: 176x144 0@15.00002fps
模式25: 176x144 0@10.0fps
模式26: 176x144
模式27: 176x144
模式28: 320x180 0@30.00003fps
模式29: 320x180 0@24.00004fps
模式30: 320x180 0@20.0fps
模式31: 320x180 0@15.00002fps
模式32: 320x180 0@10.0fps
模式33: 320x180
模式34: 320x180
模式35: 320x240 0@30.00003fps
模式36: 320x240 0@24.00004fps
模式37: 320x240 0@20.0fps
模式38: 320x240 0@15.00002fps
模式39: 320x240 0@10.0fps
模式40: 320x240
模式41: 320x240
模式42: 352x288 0@30.00003fps
模式43: 352x288 0@24.00004fps
模式44: 352x288 0@20.0fps
模式45: 352x288 0@15.00002fps
模式46: 352x288 0@10.0fps
模式47: 352x288
模式48: 352x288
模式49: 432x240 0@30.00003fps
模式50: 432x240 0@24.00004fps
模式51: 432x240 0@20.0fps
模式52: 432x240 0@15.00002fps
模式53: 432x240 0@10.0fps
模式54: 432x240
模式55: 432x240
模式56: 640x360 0@30.00003fps
模式57: 640x360 0@24.00004fps
模式58: 640x360 0@20.0fps
模式59: 640x360 0@15.00002fps
模式60: 640x360 0@10.0fps
模式61: 640x360
模式62: 640x360
模式63: 800x448 0@30.00003fps
模式64: 800x448 0@24.00004fps
模式65: 800x448 0@20.0fps
模式66: 800x448 0@15.00002fps
模式67: 800x448 0@10.0fps
模式68: 800x448
模式69: 800x448
模式70: 800x600 0@24.00004fps
模式71: 800x600 0@20.0fps
模式72: 800x600 0@15.00002fps
模式73: 800x600 0@10.0fps
模式74: 800x600
模式75: 800x600
模式76: 864x480 0@24.00004fps
模式77: 864x480 0@20.0fps
模式78: 864x480 0@15.00002fps
模式79: 864x480 0@10.0fps
模式80: 864x480
模式81: 864x480
模式82: 960x720 0@15.00002fps
模式83: 960x720 0@10.0fps
模式84: 960x720
模式85: 960x720
模式86: 1024x576 0@15.00002fps
模式87: 1024x576 0@10.0fps
模式88: 1024x576
模式89: 1024x576
模式90: 1280x720 0@10.0fps
模式91: 1280x720
模式92: 1280x720
模式93: 1600x896
模式94: 1600x896
模式95: 1920x1080
模式96: 2304x1296
模式97: 2304x1536
select mode success: False, mode: {"width":640, "height":480, "format":mjpeg, "fps":30.00}
尝试解决过程
在UVC API 手册的网页有部分提问和回复内容
https://developer.canaan-creative.com/k230_canmv/zh/main/zh/api/mpp/media_uvc.html
补充材料
测试代码如下:
import time, os, urandom, sys
from media.display import *
from media.media import *
from media.uvc import *
DISPLAY_WIDTH = ALIGN_UP(640, 16)
DISPLAY_HEIGHT = 480
# use lcd as display output
Display.init(Display.ST7701, width = DISPLAY_WIDTH, height = DISPLAY_HEIGHT, to_ide = True)
# init media manager
MediaManager.init()
while True:
plugin, dev = UVC.probe()
if plugin:
print(f"detect USB Camera {dev}")
break
for i, mode in enumerate(UVC.list_video_mode()):
print(f"模式{i}: {mode.width}x{mode.height} {mode.format}@{mode.fps}fps")
mode = UVC.video_mode(640, 480, UVC.FORMAT_MJPEG, 30)
#mode = UVC.video_mode(256, 192,UVC.FORMAT_MJPEG, 25)
#mode = UVC.video_mode()
succ, mode = UVC.select_video_mode(mode)
print(f"select mode success: {succ}, mode: {mode}")
#UVC.start()
success = UVC.start(delay_ms=1000, cvt=False)
while True:
img = UVC.snapshot()
if img is not None:
img = img.to_rgb565()
Display.show_image(img)
# deinit display
Display.deinit()
UVC.stop()
time.sleep_ms(100)
# release media buffer
MediaManager.deinit()