CV2 VideoCapture 的多次初始化

问题描述 投票:0回答:1

我需要在相机已经录制时使用相机 --> 同时进行视频流

听说不能调用

的多次初始化
video = cv2.VideoCapture(0)

这就是为什么我调用了另一个Python程序,它也调用了该方法,但它仍然无法工作。

[ 警告:[电子邮件受保护]] 全局 cap_v4l.cpp:997 打开 VIDEOIO(V4L2:/dev/video0):无法通过以下方式打开摄像头 指数 [错误:[电子邮件受保护]] 全局 obsensor_uvc_stream_channel.cpp:159 getStreamChannelGroup 相机索引 超出范围

我确实需要对我的用例进行多次初始化,并且不想完全更改所有内容。有什么解决办法吗? (Threading不起作用,imageio也说设备正忙) 如果无法进行多次初始化,我将尝试直接从录制的帧进行视频流,但这真的很笨拙

python opencv flask camera
1个回答
0
投票

答案不是对相机进行多次初始化,而是在录制和视频流之间共享帧。人们需要看看相机一般工作多少帧,以便更好地平衡它。

声明例如:

FPS = 1/40
FPSSTREAM = 1/20

录音方式:

....while(int(time.time() - start_time) < capture_duration ):
    ret, frame = video.read()
    if ret==True:
        out.write(frame)
        time.sleep(FPS)    <---------
    else: .....

视频流方式:

def video_stream():
while camera_on:
    ret, frame = video.read()
    if not ret:
        print("will adjust video stream speed, slight stuttering might occur")
        time.sleep(ADJUST)  <---- ignore this 
    else:
        ret, buffer = cv2.imencode('.jpeg',frame)
        frame = buffer.tobytes()
        yield (b' --frame\r\n' b'Content-type: imgae/jpeg\r\n\r\n' + frame +b'\r\n')
        time.sleep(FPSSTREAM)   <--- here

如果仍然滞后,请调整

out = cv2.VideoWriter(result,fourcc,15.0, (640,480)) <--

调整帧率,出于某种原因,15.0 非常适合我

如果由于某种原因仍然滞后,请尝试多重处理:

capture_process = mp.Process(target=recording, args=())
capture_process.start()
© www.soinside.com 2019 - 2024. All rights reserved.