uvc — USB 摄像头输出
启用 USB-OTG Device 的板卡启动时同时提供 CDC、MSC 和 UVC。PC 摄像头软件打开 ESP-VISION Camera 即可接收图像。默认输出固件内置 ESP-VISION logo,不初始化或修改 sensor。禁用 USB Device 的板卡不提供此模块。
首版支持 MJPEG、320×240、10 FPS,使用等时传输,JPEG 帧上限为 48 KiB。实际帧率受主机调度和其他 USB 流量影响。get_mode() 返回支持的模式;is_streaming() 仅表示主机已启用流接口,不能证明某个软件已显示图像。
- uvc.write(img)
发布处理后的 QVGA
image.Image。主机未开启输出时返回False;帧已复制到固件持有的缓冲区时返回True,不代表主机已收到。RGB565、灰度和 JPEG 输入通过共享 JPEG 编码层处理。尺寸错误或编码结果超限抛出ValueError,编码或分配失败抛出OSError。返回后可以立即复用相机缓冲区。待发送帧可被新帧替换,正在发送的帧不会被覆盖。
- uvc.set_frame(img)
复制固定 QVGA 图像,无需主机已打开。解除 preview 绑定,持续重复该帧,直到替换或 reset。成功返回
True,失败时保留旧图源。
- uvc.bind(source)
"preview"绑定到img.flush()发布的处理结果。UVC 和 EV-MUX 共用一次 JPEG 编码,并独立判断传输就绪状态;无需 IDE 会话即可使用 UVC。其他尺寸的帧不送往 UVC,仍可通过 EV-MUX 预览。帧超限或 UVC 分配失败时丢帧,不影响 EV-MUX。None解除绑定并恢复 logo。新绑定在收到匹配帧前也显示 logo。
- uvc.reset()
解除图源并恢复 logo,不重置 USB 控制器,不断开 CDC/MSC。VM 软复位也恢复 logo。实时生产者暂停或停止发布时,默认重复最后一帧。
- uvc.is_streaming()
返回主机是否已启用流接口且 USB 总线未挂起。
- uvc.get_mode()
返回
{"format": "MJPEG", "width": 320, "height": 240, "interval_us": 100000},仅公布并接受这一模式。
相机处理结果可以同时送往两种输出:
import sensor
import uvc
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
uvc.bind("preview")
try:
while True:
img = sensor.snapshot()
img.draw_rectangle((20, 20, 100, 80), color=(255, 0, 0))
img.flush()
finally:
uvc.reset()
无需 EV-MUX 预览时,也可直接使用 uvc.write(img)。同一帧不要同时走两条发布路径。USB 回调内不执行 Python 回调或相机抓帧。