Raspberry pi 4, 2USB CAMERA

Bonjour,
Je suis actuellement sur un projet développer avec un raspberry pi 3B+ qui comporte 2 caméras USB qui fonctionne en même temps.
Nous avons fait une migration vers une raspberry pi 4, or, les 2 caméras USB de fonctionnent pas en même temps.
Une fonctionne et enregistre bien une vidéo.
L’autre retourne l’erreur « VIDIOC_DQBUF: Ressource temporaly unavailable », ou « VIDIOC_DQBUF: Invalid Argument ».
Auriez-vous des pistes permettant de faire fonctionner deux caméras USB en même temps, sur la raspberry pi 4?

Voici mon code:

def camera():
    global i, initialisation,fps,compt

    STS = getFDCvalue()


    if initialisation and (STS == 2):
        print('init')
        cap = cv2.VideoCapture(0)
        cap.set(3, 1280)
        camera1 = 0
        camera2 = 0
        cap.set(4,720)
        frame_width = int(cap.get(3))
        frame_height = int(cap.get(4))
        cap2 = cv2.VideoCapture(2)
        cap2.set(3, 1280)
        cap2.set(4,720)
        ligne_position = getLigne()
        ligne_position = 0
        video_name_cam_1 = 'decoupage/'+time.strftime("%d-%m-%Y")+'_'+time.strftime("%H-%M-%S")+'_1_'+str(ligne_position)+'.avi'
        video_name_cam_2 = 'decoupage/'+time.strftime("%d-%m-%Y")+'_'+time.strftime("%H-%M-%S")+'_2_'+str(ligne_position)+'.avi'
        out = cv2.VideoWriter(video_name_cam_1,cv2.VideoWriter_fourcc('M','J','P','G'), fps, (frame_width,frame_height))
        out2 = cv2.VideoWriter(video_name_cam_2,cv2.VideoWriter_fourcc('M','J','P','G'), fps, (frame_width,frame_height))
        initialisation = 0

    while (initialisation == 0) and (STS > 1):

        while STS == 2:

            ret, frame = cap.read() # si lecture video = ok
            ret2, frame2 = cap2.read()

            if ret or ret2:
                i = i + 1
                if ret:
                    out.write(frame) # On ecrit dans la video
                    camera1 = 1
                if ret2:
                    out2.write(frame2)
                    camera2 = 1

            STS = getFDCvalue()

            print('Fonctionnement : camera1 : ',camera1, 'camera 2 : ',camera2, i ,'frame')

        else:
            if i > 1:
                cap.release()
                out.release() 
                cap2.release()
                out2.release()
                i = 0
                initialisation = 1

            LAST_STS = STS
    else:
        STS = getFDCvalue()
        print('STS value : ',STS)

while True:
    camera()
    time.sleep(0.1)

Merci, Charles.

hello,

as tu essayé d’autres périphériques ? ou simplement de brancher les usb différemment ?
cap2 = cv2.VideoCapture(1) ou cap2 = cv2.VideoCapture(3)

désolé si ma réponse te parait évidente mais je ne connais pas ton niveau en python ni sur opencv :wink:

PS: de mémoire il me semble que le cv2.VideoCapture(0) pourrait être la sortie de la caméra branchée sur le connecteur interne du Rpi ( the CSI camera interface.) pas sur !

Bonjour,
Merci pour votre réponse.

Les deux ports utilisé pour les caméras sont bien 0 et 2.
Chaque caméra fonctionne lorsqu’elle sont « seule » à être exécuté dans un code, le problème intervient lorsque je lance un second script permettant l’exécution de la 2ème caméra
Cdt

peut être un problème de mémoire as tu essayé avec des résolutions plus faible ?
j’ai cru comprendre que la taille mémoire dédiée au GPU pouvait aussi influer ( Raspberry Pi Documentation - Configuration ) ça vaut sans doute la peine de l’augmenter !

J’ai retrogradé la résolution de 1280-720 à 800-600, toujours le même soucis…
J’ai aussi augmenter la mémoire GPU à 512, idem.

Y’a t-il une possibilité due a la compatibilité entre les caméras et la raspberry?

Sur la RPi 3B+ nous avions aucuns soucis :confused:

essaye plus petit ( 640x480 ) si j’en crois ce post (Unable to display 2 feeds from two USB cams on PI 4 - Raspberry Pi Forums)
il semblerait qu’il y est un problème lié au pi4 sous raspbian si j’en crois cet autre ( Raspberry Pi4 Error while using 2 USB cameras, VIDIOC_QBUF: Invalid argument - Raspberry Pi Stack Exchange)

Après des jours de recherche, la « simple » solution était d’installer différentes version d’openCv sur la rapsberry, suite à cette recherche, une version accepte les deux caméras…
Si d’autres personnes ont le soucis, j’utilise opencv 3.4.2.16.

Merci de ton aide Bof.