IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Deux webcams USB


Sujet :

OpenCV

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Deux webcams USB
    Bonjour à tous,

    cela fait deux jours que je parcours le web et ce forum et je suis assez perplexe : je cherche "tout simplement" à acquérir les flux de deux webcams usb et les afficher dans deux fenêtres indépendantes. (donc pas nécessairement synchronisées, je ne cherche pas à faire de la stéréo).

    Plusieurs discussions traitent déjà de ce sujet, et j'ai pourtant essayé pas mal d'exemples, mais aucun ne fonctionne.. au mieux il n'y a pas d'erreur mais j'ai deux magnifiques fenêtres grises.

    je suis sous windows, mes deux caméras fonctionnent très bien en avec tous les exemples qui n'utilisent qu'une caméra. La lib utilisée est opencv 1.0

    apparemment cvCreateCameraCapture et cvCaptureFromCAM posent problème dès qu'on essaie de sélectionner la seconde webcam, et cvcam est déconseillé car obsolète (j'ai aussi essayé avec, d'après le tuto de willowgarage, ça ne marche pas...)

    ma question est toute simple : quelqu'un a-t-il réussi à faire fonctionner deux caméras ?

    ou pensez-vous qu'il faut passer à la lib 1.1prea ? ou attendre une version 1.1 stable ? ce qui serait assez étonnant vu le nombre de personnes qui font de la stéréo, et depuis longtemps, il doit quand même y avoir un moyen, je pense donc que quelque chose m'a échappé...

    d'avance merci pour votre aide

  2. #2
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut même problème
    Up!

    J'ai exactement la même question...

    Je suis sur un projet qui demande de faire fonctionner non pas 2 mais plusieurs webcams à la fois (jusqu'à 8) et de pouvoir les gérer toutes individuellement.
    Pour l'instant je n'en ai que 2 pour tester, et j'arrive à les afficher chacune dans une fenêtre séparée, via les fonctions cvcam (jamais réussi à faire fonctionner plus d'une webcam avec les fonctions highgui...).

    Voilà mon code, qui fonctionne chez moi :

    CameraHandler.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include "CameraHandler.h"
     
    void CameraHandler::test() {
        char camName[7];
        HWND *windowsSet = NULL;
     
        int nbCams = cvcamGetCamerasCount();
        windowsSet = new HWND[nbCams];
     
        for (i=0 ; i<nbCams ; i++) {
     
            sprintf(camName, "%s%d%c","Cam",i,'\0');
            printf("%s : %d\n", camName, i);
     
            cvNamedWindow(camName, CV_WINDOW_AUTOSIZE);
            windowsSet[i] = (HWND) cvGetWindowHandle(camName);
            cvcamSetProperty(i, CVCAM_PROP_ENABLE, CVCAMTRUE);
            cvcamSetProperty(i, CVCAM_PROP_RENDER, CVCAMTRUE);
            cvcamSetProperty(i, CVCAM_PROP_WINDOW, &(windowsSet[i]));
     
     
            if (i>=8) break; //Gestion de 8 cameras max
        }
     
        cvcamSetProperty(0, CVCAM_STEREO_CALLBACK , (void*) CameraHandler::stereocallback);
     
        cvcamInit();
        cvcamStart();
     
        cvWaitKey(0);
     
        cvcamStop();
        cvcamExit();
    }
    CameraHandler.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <opencv/cxcore.h>
    #include <opencv/highgui.h>
    #include <opencv/cv.h>
    #include <opencv/cvcam.h>
     
    [...]
     
    static void stereocallback(IplImage* img1, IplImage* img2);
    Ce code fonctionne, les 2 webcams s'affichent chacune dans une fenêtre.
    Mais cvcam a un mode de fonctionnement un peu bizarre, je trouve, apparemment on est obligé de synchroniser les caméras via :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cvcamSetProperty(0, CVCAM_STEREO_CALLBACK , stereocallback);
    avec stereocallback qui est une fonction de callback gérant les images provenant de 2 webcams.

    Du coup je ne sais pas trop ce qui se passe pour 3 webcams ou plus??
    Quels paramètres passer à cvcamSetProperty pour chaque webcam? et comment savoir quelle image correspond à quelle cam??

    Tout ça pour en arriver à la même question que thomL : n'y a-t-il pas un moyen plus simple/standard de gérer plusieurs webcams sous windows?

    Merci d'avance

  3. #3
    Membre chevronné

    Homme Profil pro
    .
    Inscrit en
    Janvier 2006
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Janvier 2006
    Messages : 703
    Points : 1 950
    Points
    1 950
    Par défaut
    Bonsoir,

    Je me permets de relancer cette conversation me trouvant dans le même problème.
    Je suis sous linux, la doc dit d'utiliser cvcam, mais cvcam n'est plus distribuée sous linux depuis quelques temps... Je cherche un moyen désespérément de faire l'acquisition de mes 2 caméras USB. Je peux faire une acquisition de chacune d'entre elles, mais pas les deux en même temps

    Si quelqu'un avait la moindre idée je serais vraiment preneur !
    Merci d'avance.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Je me permet de déterrer ce sujet car je souhaite faire de la stéréo avec OpenCV et je rencontre un problème de taille. [ Bien sur j'ai parcouru tout le web avant de poster .. ]

    J'ai déjà une webcam intégrée sur mon PC portable HP et j'ai acheté 2 webcams USB Hercules. Je ne souhaite pas utiliser la webcam intégrée mais les deux nouvelles pour les placer où je veux.

    J'ai un code OpenCV qui fonctionne bien mais il actionne la webcam intégrée et une des deux caméra USB (voir plus bas).

    Quand j'essaie de mettre { 1 et 2 } pour cvCreateCameraCapture j'ai le droit à un magnifique blue screen. Du coup j'ai essayé de désinstaller la webcam intégrée en réssayant les { 0 et 1 } et { 1 et 2 } et toujours le blue screen.

    J'ai Windows 7.

    Q : Ne peut on pas utiliser 2 webcams USB en simultanée sur Windows avec OpenCV, si oui comment ? (j'ai vu que la lib cvcam était devenue obsolète depuis bien longtemps)

    Je m'en remet à vous, bien merci d'avance !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    #include <stdio.h>
    #include "highgui.h"
    #include "cv.h"
     
    int main() {
     
    	// Touche clavier
    	char key;
    	// Image
    	 IplImage *image;
    	 IplImage *image1;
    	// Capture vidéo
    	CvCapture *capture;
    	CvCapture *capture1;
     
    	// Ouvrir le flux vidéo
    	capture = cvCreateCameraCapture(0);
    	capture1 = cvCreateCameraCapture(1);
     
    	// Vérifier si l'ouverture du flux est ok
    	if (!capture) {
     
    	   printf("Ouverture du flux vidéo 0 impossible !\n");
    	   return 1;
     
    	}
    	if (!capture1) {
     
    	   printf("Ouverture du flux vidéo 1 impossible !\n");
    	   return 1;
     
    	}
     
    	// Définition de la fenêtre
    	cvNamedWindow("gauche", CV_WINDOW_AUTOSIZE);
    	cvNamedWindow("droite", CV_WINDOW_AUTOSIZE);
     
    	// Boucle tant que l'utilisateur n'appuie pas sur la touche q (ou Q)
    	while(key != 'q' && key != 'Q') {
     
    	   // On récupère une image
    	   image = cvQueryFrame(capture);
            image1 = cvQueryFrame(capture1);
     
    	   // On affiche l'image dans une fenêtre
    	   cvShowImage( "droite", image);
    	   cvShowImage( "gauche", image1);
     
    	   // On attend 10ms
    	   key = cvWaitKey(10);
     
    	}
     
    	cvReleaseCapture(&capture);
    	cvReleaseCapture(&capture1);
    	cvDestroyAllWindows();
     
    	return 0;
     
    }

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    http://www.starlino.com/opencv_qt_stereovision.html

    tu es sur de tes index de caméra ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup pour le lien je vais regarder la source avec attention !

    En attendant je vais répondre à ta question : non je ne suis pas sur ...

    voila ce que je pense avoir compris des indices : 0 est pour les webcams hardware, 1 pour les webcams périphériques externes, 2 ????, 3 et 4 pour linux et apres grand mystère.

    Dans les posts que j'ai pu lire sur le web, les gens essaient tous les indices voir si ca fonctionne en gros. Moi je freine un peuà l'idée de faire car ca fait deja 10 fois que j'ai le blue screen et reboot forcé de la machine donc j'ai un peu les boules...

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    essaye une caméra après l'autre et tu n'auras pas de bluescreen. Pour les indices c'est bien ca.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par snowpy Voir le message
    essaye une caméra après l'autre et tu n'auras pas de bluescreen.
    Si j'ai bien compris tu me demandes d'activer une caméra puis l'autre ? A part enchainer les instructions cvCaptureFromCAM avec un délai entre les appels je ne vois pas trop comment faire .. est ce bien cela dont il s'agit ?

    J'ai consulté le lien que tu m'as donné, ils utilisent Qt pour gérer l'interface (ca on s'en doutait ..). J'ai vu que eux ils appellent de cette facon :

    captures[0] = cvCaptureFromCAM(CV_CAP_DSHOW + 0);
    captures[1] = cvCaptureFromCAM(CV_CAP_DSHOW + 1);
    CV_CAP_DSHOW ayant une valeur inconnue pour moi, j'essayerai ce soir en rentrant du taff d'afficher sa valeur...

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    J'ai trouvé ca sur la toile :

    const CV_CAP_DSHOW = 700; // DirectShow (via videoInput)
    Il s'agirait donc de prendre les indices 700 et 701 ???
    Je n'y crois pas trop ...

  10. #10
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    oui je te conseil de bien le faire une par une. Pour les indices je ne sais pas trop

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par snowpy Voir le message
    Pour les indices je ne sais pas trop
    J'ai essayé 700 et 701, ca fonctionne pareil que 0 et 1. Si je met 701 et 702, blue screen. J'essayerai peut etre ce soir de laisser un sleep entre les deux appels de cvCaptureFromCAM comme tu me l'a conseillé ...

    Par contre, si je met 700 et 701 j'ai la caméra intégrée et la premiere usb, si je met 700 et 702 j'ai la cam intégrée et la seconde usb. PAs moyen d'avoir les deux cams usb .. ??

    N'est ce pas une histoire de bus ? genre les deux caméras branchées sur le meme bus et lorsqu'on essaie d'acceder à la seconde ca plante ?

  12. #12
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    ca tout dépend de ton système, si ta 2 disques dur de branché en usb il fonctionne tout les 2 en même temps générallement. Ta essayé de visualiser une caméra (un projet) puis l'autre (un autre projet) ?

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par snowpy Voir le message
    ca tout dépend de ton système, si ta 2 disques dur de branché en usb il fonctionne tout les 2 en même temps générallement. Ta essayé de visualiser une caméra (un projet) puis l'autre (un autre projet) ?

    Non mais c'est effectivement une bonne idée pour le diagnostic, je vais essayer cela ce soir et je te tiens au courant, merci.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mars 2013
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    3 ans plus tard je me permets de réactiver cette discussion.

    En effet je cherche également à afficher 2 webcams reliées à mon ordinateur par USB. J'ai également une webcam intégrée à mon ordinateur que je ne souhaite pas utiliser.

    J'utilise Visual Studio 2012 sous windows 7. Lorsque j'écris le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cvCreateCameraCapture(0)
    et qu'une webcam est branchée via USB c'est cette webcam qui affiche (le code "0" étant pour l'autodetection).

    Voici la liste des codes (située dans le fichier highgui_c.h à utiliser avec la fonction cvCreateCameraCapture() en fonction des webcams:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    {
        CV_CAP_ANY      =0,     // autodetect
     
        CV_CAP_MIL      =100,   // MIL proprietary drivers
     
        CV_CAP_VFW      =200,   // platform native
        CV_CAP_V4L      =200,
        CV_CAP_V4L2     =200,
     
        CV_CAP_FIREWARE =300,   // IEEE 1394 drivers
        CV_CAP_FIREWIRE =300,
        CV_CAP_IEEE1394 =300,
        CV_CAP_DC1394   =300,
        CV_CAP_CMU1394  =300,
     
        CV_CAP_STEREO   =400,   // TYZX proprietary drivers
        CV_CAP_TYZX     =400,
        CV_TYZX_LEFT    =400,
        CV_TYZX_RIGHT   =401,
        CV_TYZX_COLOR   =402,
        CV_TYZX_Z       =403,
     
        CV_CAP_QT       =500,   // QuickTime
     
        CV_CAP_UNICAP   =600,   // Unicap drivers
     
        CV_CAP_DSHOW    =700,   // DirectShow (via videoInput)
     
        CV_CAP_PVAPI    =800,   // PvAPI, Prosilica GigE SDK
     
        CV_CAP_OPENNI   =900,   // OpenNI (for Kinect)
        CV_CAP_OPENNI_ASUS =910,   // OpenNI (for Asus Xtion)
     
        CV_CAP_ANDROID  =1000,  // Android
     
        CV_CAP_XIAPI    =1100,   // XIMEA Camera API
     
        CV_CAP_AVFOUNDATION = 1200  // AVFoundation framework for iOS (OS X Lion will have the same API)
    }
    QUelqu'un aurait-il une solution pour afficher 2 webcams branchées en USB svp?

    Merci.

    Cordialement.

    klelu

  15. #15
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    Salut !

    Comme indiqué dans la discussion il est possible de récupérer les images d'une caméra en particulier en passant par un système d'indice (documentation ici).
    En ce qui concerne l'énumération des différentes caméras il me semble qu'il te faudra chercher du côté de directX.

    Bon courage.
    Vous postez du code ? Merci d'utiliser les balises
    Un message vous paraît pertinent ? Merci de le gratifier d'un vote positif
    Vous avez obtenu une réponse à votre question ? Merci d'utiliser le tag
    __________________
    Ingénieur R&D, diplômé en 2007 de l'ISIMA
    Docteur en informatique, diplômé en 2015 de l'EDSPI de Clermont-Ferrand

  16. #16
    Nouveau membre du Club
    Inscrit en
    Mars 2013
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Je réussis à lire deux webcams branchées en USB sur mon ordinateur! J'utilise simplement les codes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cvCreateCameraCapture(0) // pour la première webcam
    cvCreateCameraCapture(1) // pour la seconde webcam
    Cordialement.

    klelu

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 560
    Points : 71
    Points
    71
    Par défaut
    Bonjour,

    J'ai cru comprendre que la bibliotheque cvcam est obsolète.

    Comment fait-t pour synchroniser l'acquisition de n caméra sous OpenCV ?
    Il n'y a plus de fonction callback que l'on peut mettre en place?

Discussions similaires

  1. Webcam usb (medion,microsoft)
    Par AigletoN dans le forum Matériel
    Réponses: 3
    Dernier message: 07/01/2008, 19h24
  2. Acquisition d'images par webcams USB
    Par Invité dans le forum Bibliothèques
    Réponses: 11
    Dernier message: 24/01/2007, 10h13
  3. Problème webcam usb
    Par stripitu dans le forum Matériel
    Réponses: 1
    Dernier message: 25/09/2006, 16h18
  4. Projet C++, Webcam, USB et MySQL
    Par Cooly dans le forum C++
    Réponses: 4
    Dernier message: 19/12/2004, 23h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo