[英]python multiprocessing and opencv VideoCapture read() error
我对 python 多处理有疑问。
我想与 opencv 一起使用多处理
这是我的源代码
--- 主要.py
if use_webcam:
print("[INFO] Using Webcam")
reader = cv2.VideoCapture(0)
ret, frame = reader.read()
if ret:
img_height, img_width, C = frame.shape
else:
img_height = 360
img_width = 640
fps = 1000 // DELAY
else:
reader = cv2.VideoCapture(video_path)
fps = reader.get(cv2.CAP_PROP_FPS)
shape = [T, img_height, img_width, 3]
frame_q = Queue()
frame_reader = Process(target=read_frames, args=(reader,frame_q,use_webcam)
--- def read_frames()
def read_frames(reader, frame_q, use_webcam, shape):
allframes = int(reader.get(cv2.CAP_PROP_FRAME_COUNT))
resize_height = shape[1]
resize_width = shape[2]
for ii in range(allframes):
if reader.isOpened():
print("[INFO] reader is opended")
# while frame_q.qsize() > 500:
# time.sleep(1)
ret, frame = reader.read()
print("[INFO] ret : ", ret)
resize_img = cv2.resize(frame, dsize=(resize_width, resize_height), interpolation=cv2.INTER_LINEAR)
cur_img = resize_img[:, :, ::-1]
frame_q.put(cur_img)
我尝试运行源代码
但是当我运行它时reader.read()
不起作用。
它没有显示任何错误,也没有任何结果。
并且frame_q.qsize()
为 0。
我需要帮助。
如果 multiprocessing 和 opencv 不兼容,我应该如何处理它们?
- - - - - - - - - - - - 编辑
这个问题使用了 imageio 库。
它适用于我的代码
但我想知道这个问题。
为什么一起使用时停在'read()'?
在我看来,不要在主进程和子进程之间共享 object 是可能的。 所以 object 必须单独声明。
主文件
if use_webcam:
print("[INFO] Using Webcam")
reader = cv2.VideoCapture(0)
ret, frame = reader.read()
if ret:
img_height, img_width, C = frame.shape
else:
img_height = 360
img_width = 640
fps = 1000 // DELAY
else:
reader = cv2.VideoCapture(video_path)
fps = reader.get(cv2.CAP_PROP_FPS)
shape = [T, img_height, img_width, 3]
frame_q = Queue()
frame_reader = Process(target=read_frames, args=(reader,frame_q,use_webcam)
def read_frames()
def read_frames(video_path, frame_q, use_webcam, shape):
allframes = int(reader.get(cv2.CAP_PROP_FRAME_COUNT))
resize_height = shape[1]
resize_width = shape[2]
cap = cv2.VideoCapture(video_path)
for ii in range(allframes):
if reader.isOpened():
print("[INFO] reader is opended")
# while frame_q.qsize() > 500:
# time.sleep(1)
ret, frame = cap.read()
print("[INFO] ret : ", ret)
resize_img = cv2.resize(frame, dsize=(resize_width, resize_height), interpolation=cv2.INTER_LINEAR)
cur_img = resize_img[:, :, ::-1]
frame_q.put(cur_img)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.