issue to access multiple cameras on TX2

Hello Everyone,

I am trying to access onBoard camera and a USB camera simultaniously on Tx2. When I try capture video with single camera it works fine, but when I try to access both only the USB camera works. I am using a USB adapter on tx2 as it has one USB port. Kindly suggest me the right way where I should look. Thanks

import cv2

#For on board camera
cap1=cv2.VideoCapture("nvcamerasrc ! video/x-raw(memory:NVMM), width=(int) + std::to_string(width) + "
                     "height=(int) + std::to_string(height) + , format=(string)I420, framerate=(fraction)"
                     "+ std::to_string(fps) +/1 ! nvvidconv flip-method=0 ! video/x-raw, format=(string)BGRx ! videoconvert "

#For usb camera
cap2=cv2.VideoCapture('/dev/video1')


print(cap1.isOpened(), cap2.isOpened)
while(True):
    ret1,frame1=cap1.read()
    ret2,frame2=cap2.read()
    gray1=cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY)
    gray2=cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame',frame1)
    cv2.imshow('frame',frame2)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    
cap1.release()
cap2.release()
cv2.destroyAllWindows()

ankitsakhuja7,

How about not using openCV but directly use gstreamer to open these two in different processes?

If gstreamer can work, how about running openCV in two processes instead of using single?

Thanks WayneWWW. Finally, I am able two camera on Tx2 simultaniously. I want to process/run the detectmultiface on GPU, is it possible? I am not sure, if I can execute some of the code of this program on GPU.

Thanks :)

import cv2

import multiprocessing

def camera1(_):
    video0="nvcamerasrc ! video/x-raw(memory:NVMM), width=720, height=(int)526, format=(string)I420, framerate=(fraction)60/1 ! nvvidconv flip-method=0 ! video/x-raw, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink"
    cap1=cv2.VideoCapture(video0)
    face_cascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
   
    print('camera 1',cap1.isOpened)
    while True:
            ret,frame=cap1.read()
            gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
            faces= face_cascade.detectMultiScale(gray, 1.3, 5)
            
            for (x,y,w,h) in faces:
                cv2.rectangle(frame, (x,y),(x+y,y+h),(255,0,0),2)
               # roi_gray=gray[y:y+h,x:x+w]
               # roi_color=img[y:y+h,x:x+w]
                
            cv2.imshow('frame',frame)
            
            if cv2.waitKey(1) &0xFF ==ord('q'):
                break
            
    cap1.release()
    cv2.destroyAllWindows()



def camera2(_):
    video1='/dev/video1'
    cap2=cv2.VideoCapture(video1)
    print('camera 2',cap2.isOpened)
    face_cascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
   
    print('camera 2',cap2.isOpened)
    while True:
            ret,frame=cap2.read()
            gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
            faces= face_cascade.detectMultiScale(gray, 1.3, 5)
            
            for (x,y,w,h) in faces:
                cv2.rectangle(frame, (x,y),(x+y,y+h),(255,0,0),2)
               # roi_gray=gray[y:y+h,x:x+w]
               # roi_color=img[y:y+h,x:x+w]
                
            cv2.imshow('frame',frame)
            
            if cv2.waitKey(1) &0xFF ==ord('q'):
                break
        
    cap2.release()
    cv2.destroyAllWindows()


arr=[1,2]

p1=multiprocessing.Process(target=camera1,args=(arr,))
p2=multiprocessing.Process(target=camera2, args=(arr,))



p1.start()
p2.start()

p1.join()
p2.join()