庐山派K230 micropython sensor(0) snapshot chn(2) failed(3)

Viewed 110

重现步骤

CAM_CHN_ID_0 的时候正常显示

cur_frame = sensor.snapshot(chn=CAM_CHN_ID_0)

CAM_CHN_ID_2 的时候会出现错误

cur_frame = sensor.snapshot(chn=CAM_CHN_ID_2)

image.png

期待结果和实际结果

软硬件版本信息

错误日志

尝试解决过程

补充材料

import ujson
import network
import os
from time import *
from media.vencoder import *
from media.sensor import *
from media.media import *
from media.display import *
import multimedia as mm
import nncase_runtime as nn
import gc
import _thread
import time
from libs.YOLO import YOLO11
from libs.Utils import *
import ulab.numpy as np

if __name__=="__main__":

    # 初始化并配置sensor
    sensor = Sensor(id=0)
    sensor.reset()
    # 设置镜像
    sensor.set_hmirror(False)
    # 设置翻转
    sensor.set_vflip(False)
    # 通道0直接给到显示VO,格式为YUV420
    sensor.set_framesize(width=1920, height=1080, chn=CAM_CHN_ID_0)
    sensor.set_pixformat(sensor.RGB888, chn=CAM_CHN_ID_0)

    # 通道1直接给到推流,格式为YUV420
    sensor.set_framesize(width=1920, height=1080, chn=CAM_CHN_ID_1)
    sensor.set_pixformat(sensor.YUV420SP, chn=CAM_CHN_ID_1)
    
    # 通道2给到AI做算法处理,格式为RGB888
    sensor.set_framesize(width=1920, height=1080, chn=CAM_CHN_ID_2)
    sensor.set_pixformat(Sensor.RGB888, chn=CAM_CHN_ID_2)
    
    Display.init(Display.VIRT, width=1920, height=1080, to_ide=True)
    

    # 实例化 video encoder
    encoder = Encoder()
    encoder.SetOutBufs(VENC_CHN_ID_0, 8, 1920, 1080)
    # 绑定 camera 和 venc
    venc_link = MediaManager.link(sensor.bind_info(chn=CAM_CHN_ID_1)['src'], (VIDEO_ENCODE_MOD_ID, VENC_DEV_ID, VENC_CHN_ID_0))
    # init media manager
    MediaManager.init()

    # 创建编码器
    chnAttr = ChnAttrStr(encoder.PAYLOAD_TYPE_H264, encoder.H264_PROFILE_MAIN, 1920, 1080,bit_rate=400)
    encoder.Create(VENC_CHN_ID_0, chnAttr)


    sensor.run()
    encoder.Start(VENC_CHN_ID_0)

    try:
        while True:
            cur_frame = sensor.snapshot(chn=CAM_CHN_ID_2)
            Display.show_image(cur_frame)
    except Exception as e:
        print(e)
    finally:
        sensor.stop()
        del venc_link
        Display.deinit()
        encoder.Stop(VENC_CHN_ID_0)
        encoder.Destroy(VENC_CHN_ID_0)
        time.sleep_ms(50)
        MediaManager.deinit()
        gc.collect()
    print("程序结束")


2 Answers

你好,请更新到v1.3测试一下。

还是有错误 示例代码如下@xelll

encoder.Start(VENC_CHN_ID_0)加上会报错
错误:

find sensor gc2093_csi0, type 16, output 1920x1080@60
vb common pool count 6
sensor(0), mode 0, buffer_num 4, buffer_size 0
异常: sensor(0) snapshot chn(1) failed(3)
MPY: soft reboot
CanMV v1.2.2(based on Micropython e00a144) on 2025-06-16; k230_canmv_lckfb with K230

代码

# 立创·庐山派-K230-CanMV开发板资料与相关扩展板软硬件资料官网全部开源
# 开发板官网:www.lckfb.com
# 技术支持常驻论坛,任何技术问题欢迎随时交流学习
# 立创论坛:www.jlc-bbs.com/lckfb
# 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
# 不靠卖板赚钱,以培养中国工程师为己任

import time, os, sys

from media.sensor import *
from media.display import *
from media.media import *
from media.vencoder import *

sensor_id = 0
sensor = None

try:
    # 构造一个具有默认配置的摄像头对象
    sensor = Sensor(id=sensor_id)
    # 重置摄像头sensor
    sensor.reset()

    # 设置通道0的输出尺寸为1920x1080
    sensor.set_framesize(Sensor.FHD, chn=CAM_CHN_ID_1)
    # 设置通道0的输出像素格式为RGB888
    sensor.set_pixformat(Sensor.RGB888, chn=CAM_CHN_ID_1)
    
    # 通道1直接给到推流,格式为YUV420
    sensor.set_framesize(Sensor.VGA, chn=CAM_CHN_ID_0)
    sensor.set_pixformat(sensor.YUV420SP, chn=CAM_CHN_ID_0)

    # 使用IDE的帧缓冲区作为显示输出
    Display.init(Display.VIRT, width=1920, height=1080, to_ide=True)
    
    # 实例化 video encoder
    encoder = Encoder()
    encoder.SetOutBufs(VENC_CHN_ID_0, 8, 640, 480)
    venc_link = MediaManager.link(sensor.bind_info(chn=CAM_CHN_ID_0)['src'], (VIDEO_ENCODE_MOD_ID, VENC_DEV_ID, VENC_CHN_ID_0))
    
    
    # 初始化媒体管理器
    MediaManager.init()
    
    
    # 创建编码器
    chnAttr = ChnAttrStr(encoder.PAYLOAD_TYPE_H264, encoder.H264_PROFILE_MAIN, 640, 480,bit_rate=400)
    encoder.Create(VENC_CHN_ID_0, chnAttr)
    
    
    # 启动传感器
    sensor.run()
    encoder.Start(VENC_CHN_ID_0)

    while True:
        os.exitpoint()

        # 捕获通道0的图像
        img = sensor.snapshot(chn=CAM_CHN_ID_1)
        # 显示捕获的图像
        Display.show_image(img)

except KeyboardInterrupt as e:
    print("用户停止: ", e)
except BaseException as e:
    print(f"异常: {e}")
finally:
    # 停止传感器运行
    if isinstance(sensor, Sensor):
        sensor.stop()
    # 反初始化显示模块
    Display.deinit()
    os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
    time.sleep_ms(100)
    # 释放媒体缓冲区
    MediaManager.deinit()

更新到1.3呢

更新了 用的镜像是CanMV_K230_LCKFB_micropython_v1.3-0-g8dd764f_nncase_v2.9.0.img.gz

用官网VENC模块API手册的例程2(venc编码数据流,并保存成文件) 将frame_count改成>=500,也会出现 RuntimeError: sensor(0) snapshot chn(0) failed(3)@xelll