Ignorer les commandes du Ruban
Passer au contenu principal
myTIC > Make a Sign > Billets > Accès à une webcam en C#

 
myTIC > Make a Sign > Billets > Accès à une webcam en C#
mars 08
Accès à une webcam en C#

Après quelques discussions sur le point de vue marketing de notre solution, nous avons pensé qu’il serait préférable de permettre l’accès à notre solution aux personnes ne disposant pas de Kinect. C’est pour cela que nous avons décidé de permettre la reconnaissance via la webcam, et ainsi proposer une solution aux fonctionnalités réduites (Par manque d’informations sur la position du corps) mais bien plus accessible.

 

Accès à la webcam depuis le Framework .NET

Actuellement, l’accès à la webcam peut se faire facilement depuis Silverlight, un dérivé du framework .NET de base, destiné aux périphériques mobiles et navigateurs internet.

Le problème est qu’il n’existe pas de moyen direct d’accéder à la webcam à partir du framework .NET 4.0, actuellement utilisé pour notre projet. Après plusieurs recherches, nous avons pu identifier 3 moyens pour accéder à la webcam en C#:

  • WIA: Windows Image Acquisition, qui est une plateforme d’acquisition d’images de Microsoft, plutôt orientée vers les scanners que les webcams. Certains problèmes de compatibilité peuvent survenir, notamment avec mon PC actuel, dont la webcam n’était pas reconnue. La solution est donc à éviter si possible.
  • avicap32.dll: Il existe une DLL nommée avicap32 et qui permet l’accès aux webcams. Nous avons donc créé une première solution. Les résultats ont été assez décevants:
    • Premièrement, l’utilisation assez complexe, mêlant 2 DLL ainsi qu’un certain nombre de constantes et de fonctions assez indigestes.
    • Deuxièmement, la nécessité de choisir le périphérique de capture à chaque connexion au driver de la webcam, ce qui peut effrayer certains néophytes.
    • Troisièmement, certains comportement assez aléatoires, comme par exemple l’impossibilité de se connecter au driver si l’utilisateur n’a pas choisi la webcam à utiliser dans un temps assez court, ou un comportement variant d’un PC à un autre.
  • OpenCV: Notre librairie de traitement d’images à plus d’un tour dans son sac. En plus d’intégrer un bon nombre de fonctions destinées au traitement d’images, cette librairie nous permet d’accéder à notre webcam en 3 lignes
// Connection à la caméra
CvCapture* Capture = cvCreateCameraCapture(CV_CAP_ANY);
// Demande au driver d'enregistrer l'image en cours dans un buffer
cvGrabFrame(Capture);
// Récupération de l'image dans une structure représentant une image manipulable par OpenCV
IplImage* frame = cvQueryFrame(Capture);

L’accès est bien plus facile, autant d’un point de vue programmation, que pour l’utilisateur, qui n’as plus à choisir quelle webcam utiliser. La constante CV_CAP_ANY précise à la fonction cvCreateCameraCapture de prendre la première webcam disponible.
Il reste encore un problème, le code ci-dessus est du C++, et non du C#. Heureusement, la plateforme .NET nous permet d’appeler facilement du code C++, natif donc, à partir d’un code managé. Cette technique étant également utilisée pour le traitement d’image, un article détaillé suivra sur l’utilisation de DLL natives en C#.

 

Voila un premier résultats. Le traitement OpenCV est le même qu’utilisé dans la vidéo présente dans cette article. Depuis on s’est redirigé vers un algorithme plus poussé (L’article ICI) mais il n’est pas encore adapté à ce projet-ci. (On travaille actuellement sur des projets séparé pour plus de facilité.

La vidéo des résultats via webcam est disponible à cette adresse: http://www.youtube.com/watch?v=jI0T4_eNvI0​

Commentaires

Aucun commentaire sur ce billet.