我需要在相机已经录制时使用相机 --> 同时进行视频流
听说不能调用
的多次初始化video = cv2.VideoCapture(0)
这就是为什么我调用了另一个Python程序,它也调用了该方法,但它仍然无法工作。
[ 警告:[电子邮件受保护]] 全局 cap_v4l.cpp:997 打开 VIDEOIO(V4L2:/dev/video0):无法通过以下方式打开摄像头 指数 [错误:[电子邮件受保护]] 全局 obsensor_uvc_stream_channel.cpp:159 getStreamChannelGroup 相机索引 超出范围
我确实需要对我的用例进行多次初始化,并且不想完全更改所有内容。有什么解决办法吗? (Threading不起作用,imageio也说设备正忙) 如果无法进行多次初始化,我将尝试直接从录制的帧进行视频流,但这真的很笨拙
答案不是对相机进行多次初始化,而是在录制和视频流之间共享帧。人们需要看看相机一般工作多少帧,以便更好地平衡它。
声明例如:
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()