Я использовал threading
модуль с OpenCV, я столкнулся со странной проблемой. При использовании потока я не смог запустить камеру снова, чтобы взять видео вход. Я бы взял один кадр, а затем остановиться. Пока не было такой проблемы при использовании multiprocessing
модуля. Я не могу понять, что вызывает это странное поведение.
Этот код обобщает проблему, с которой я столкнулся. Программа зависнет при повторном создании потока.
import cv2
import time
import threading
def open_cam():
count = 0
cam = cv2.VideoCapture(0)
while True:
ret_val, img = cam.read()
print(ret_val)
cv2.imshow("Image", img)
count += 1
if count == 100:
break
if (cv2.waitKey(1) & 0xFF) == ord('q'):
break
cv2.destroyAllWindows()
def start_thread():
print("CREATING THREAD")
cam_thread = threading.Thread(target=open_cam)
print("STARTING THREAD")
cam_thread.start()
start_thread()
time.sleep(5)
start_thread()
Тем не менее, этот код работает именно так, как я хочу, он использует multiprocessing
модуль вместо threading
import cv2
import time
import multiprocessing
def open_cam():
count = 0
cam = cv2.VideoCapture(0)
while True:
ret_val, img = cam.read()
print(ret_val)
cv2.imshow("Image", img)
count += 1
if count == 100:
break
if (cv2.waitKey(1) & 0xFF) == ord('q'):
break
cv2.destroyAllWindows()
def start_process():
print("CREATING process")
cam_process = multiprocessing.Process(target=open_cam)
print("STARTING process")
cam_process.start()
start_process()
time.sleep(5)
start_process()
В чем причина проблемы и как ее исправить?