我正在使用Python的OpenCV库开发实时视频目标检测。目前程序只运行在一个线程上,导致屏幕显示的视频看起来不像真正的视频,因为检测处理时间有延迟。因此,我尝试使用多线程重新实现该程序。我使用一个线程用于读取视频帧,另一个线程用于显示检测结果,并且同时使用大约5个线程对多个帧进行检测。我已经编写了以下代码,但结果与单线程程序没有区别。由于我是Python新手,所以希望得到任何帮助。
import threading, time
import cv2
import queue
def detect_object():
while True:
print("get")
frame = input_buffer.get()
if frame is not None:
time.sleep(1)
detection_buffer.put(frame)
else:
break
return
def show():
while True:
print("show")
frame = detection_buffer.get()
if frame is not None:
cv2.imshow("Video", frame)
else:
break
if cv2.waitKey(1) & 0xFF == ord('q'):
break
return
if __name__ == "__main__":
input_buffer = queue.Queue()
detection_buffer = queue.Queue()
cap = cv2.VideoCapture(0)
for i in range(5):
t = threading.Thread(target=detect_object)
t.start()
t1 = threading.Thread(target=show)
t1.start()
while True:
ret, frame = cap.read()
if ret:
input_buffer.put(frame)
time.sleep(0.025)
else:
break
print("program ended")
detect_object
线程从队列中获取一帧后,第一件(事实上也是唯一的)要做的就是睡眠1秒钟......因此5个线程每秒不会比5帧更好。 - Dan Mašek