I successfully view 2 webcams parallely by using the multiple processes. As code below. I use dedicate USB bus each for single webcam.
import cv2
from multiprocessing import Process
def f(camID):
vc = cv2.VideoCapture(camID)
camIDstr = str(camID)
cv2.namedWindow("preview" + camIDstr)
if vc.isOpened(): # try to get the first frame
rval, frame = vc.read()
else:
rval = False
while rval:
cv2.imshow("preview" + camIDstr, frame)
rval, frame = vc.read()
key = cv2.waitKey(20)
if key == 27: # exit on ESC
break
cv2.destroyWindow("preview" + camIDstr)
if __name__ == '__main__':
#f(0)
'''
t0 = threading.Thread(target=f, args= (0,))
t0.start()
t1 = threading.Thread(target=f, args= (1,))
t1.start()
'''
p0 = Process(target=f, args=(0,))
p0.start()
p1 = Process(target=f, args=(1,))
p1.start()
And here is my simplistic thread version.
import cv2 #from multiprocessing import Process import threading def f(camID): vc = cv2.VideoCapture(camID) camIDstr = str(camID) cv2.namedWindow("preview" + camIDstr) if vc.isOpened(): # try to get the first frame rval, frame = vc.read() else: rval = False while rval: cv2.imshow("preview" + camIDstr, frame) rval, frame = vc.read() key = cv2.waitKey(20) if key == 27: # exit on ESC break cv2.destroyWindow("preview" + camIDstr) if __name__ == '__main__': #f(0) t0 = threading.Thread(target=f, args= (0,)) t0.start() t1 = threading.Thread(target=f, args= (1,)) t1.start() **Update :**
For further information. When I cut all the function and let my main function just this. for i in range(0,11): vc = cv2.VideoCapture(i) if vc.isOpened(): print i The available indexes are 0 and 1. 0 1 VIDEOIO ERROR: V4L: index 2 is not correct! VIDEOIO ERROR: V4L: index 3 is not correct! VIDEOIO ERROR: V4L: index 4 is not correct! VIDEOIO ERROR: V4L: index 5 is not correct! VIDEOIO ERROR: V4L: index 6 is not correct! VIDEOIO ERROR: V4L: index 7 is not correct! VIDEOIO ERROR: V4L: index 8 is not correct! VIDEOIO ERROR: V4L: index 9 is not correct! VIDEOIO ERROR: V4L: index 10 is not correct! **Problem :**
Program retunrs 1 line with error message as follows.
VIDEOIO ERROR: V4L: index 1 is not correct! **Question :**
How come V4L says my index is incorrect?
If they are not 0 or 1. What number it will be?
**New Question :**
Is it possible to create stereo camera by using thread?
Or I need process?
import cv2 #from multiprocessing import Process import threading def f(camID): vc = cv2.VideoCapture(camID) camIDstr = str(camID) cv2.namedWindow("preview" + camIDstr) if vc.isOpened(): # try to get the first frame rval, frame = vc.read() else: rval = False while rval: cv2.imshow("preview" + camIDstr, frame) rval, frame = vc.read() key = cv2.waitKey(20) if key == 27: # exit on ESC break cv2.destroyWindow("preview" + camIDstr) if __name__ == '__main__': #f(0) t0 = threading.Thread(target=f, args= (0,)) t0.start() t1 = threading.Thread(target=f, args= (1,)) t1.start() **Update :**
For further information. When I cut all the function and let my main function just this. for i in range(0,11): vc = cv2.VideoCapture(i) if vc.isOpened(): print i The available indexes are 0 and 1. 0 1 VIDEOIO ERROR: V4L: index 2 is not correct! VIDEOIO ERROR: V4L: index 3 is not correct! VIDEOIO ERROR: V4L: index 4 is not correct! VIDEOIO ERROR: V4L: index 5 is not correct! VIDEOIO ERROR: V4L: index 6 is not correct! VIDEOIO ERROR: V4L: index 7 is not correct! VIDEOIO ERROR: V4L: index 8 is not correct! VIDEOIO ERROR: V4L: index 9 is not correct! VIDEOIO ERROR: V4L: index 10 is not correct! **Problem :**
Program retunrs 1 line with error message as follows.
VIDEOIO ERROR: V4L: index 1 is not correct! **Question :**
How come V4L says my index is incorrect?
If they are not 0 or 1. What number it will be?
**New Question :**
Is it possible to create stereo camera by using thread?
Or I need process?