在 Python 中使用多线程进行实时视频处理
real time video processing using multithreading in Python
我正在 Python 中使用多线程进行实时视频处理。这里的过程是:
- 我打开网络摄像头并捕获帧。
- 我创建了 10 个线程用于视频处理(检测)。
线程将这些帧放入优先队列 (input_queue
)。 (我按顺序排列帧)
线程开始从队列中获取帧并进行处理。
- 线程将帧放入
output_queue
以供显示。
- 最后一种方法从
output_queue
读取帧并显示。在这里,当从相机捕获图像时,输出需要立即显示为处理后的视频。 (可能落后五秒。)
其实这些流程都是我做的。但是我 运行 我的项目,10 个线程从队列中非常快速地处理帧,我的输出视频在 5 秒后关闭。因为 output_queue
是空的。
我尝试将 time.sleep()
放在处理之前或读取帧之前,或者如果队列为空,但此时输出视频开始很晚,然后再次关闭,或者视频反复打开和关闭。
我该怎么办?谢谢你的帮助。
Queue.get()
方法在队列为空时引发 Queue.Empty
异常。您可能需要捕获并处理它,或者防止它被引发。
try:
image = output_queue.get()
# display image
except Queue.Empty:
pass
为了防止它发生:
if not output_queue.empty():
image = output_queue.get()
# display image
我正在 Python 中使用多线程进行实时视频处理。这里的过程是:
- 我打开网络摄像头并捕获帧。
- 我创建了 10 个线程用于视频处理(检测)。
线程将这些帧放入优先队列 (
input_queue
)。 (我按顺序排列帧)线程开始从队列中获取帧并进行处理。
- 线程将帧放入
output_queue
以供显示。 - 最后一种方法从
output_queue
读取帧并显示。在这里,当从相机捕获图像时,输出需要立即显示为处理后的视频。 (可能落后五秒。)
其实这些流程都是我做的。但是我 运行 我的项目,10 个线程从队列中非常快速地处理帧,我的输出视频在 5 秒后关闭。因为 output_queue
是空的。
我尝试将 time.sleep()
放在处理之前或读取帧之前,或者如果队列为空,但此时输出视频开始很晚,然后再次关闭,或者视频反复打开和关闭。
我该怎么办?谢谢你的帮助。
Queue.get()
方法在队列为空时引发 Queue.Empty
异常。您可能需要捕获并处理它,或者防止它被引发。
try:
image = output_queue.get()
# display image
except Queue.Empty:
pass
为了防止它发生:
if not output_queue.empty():
image = output_queue.get()
# display image