OpenCV + IPCam

OpenCV + GStreamer + Camera sur IP

OpenCV + IPCam
OpenCV + IPCam
Depuis un bout de temps, je cherchais une solution simple pour une installation video utilisant OpenCV. Mon problème principal venait du fait que la caméra devait être absolument dans l’axe du projecteur vidéo (idéalement placée sur le projecteur). Et utilisant jusqu’alors une webcam modifiée, le pc, s’occupant de l’interprétation et du rendu, ne pouvait pas être éloigné de plus de deux mètres de la caméra (limites due à l’usb). Bref, situation souvent inextricable, puisque le projecteur ne se trouve pas souvent dans des endroits facilement accessibles ou assez loin de la « régie » où se trouve le pc (parfois 20m de distance entre les deux). Inutile de préciser qu’il me fallait une solution pas trop coûteuse et que le pc en question n’a pas de carte d’acquisition vidéo. Exit donc les caméras vidéo classiques avec transmission du signal vidéo par câble ou même sans fil. Heureusement, il existe des caméras sur IP pas trop coûteuse. Le signal peut être donc transmis sur longue distance sans matériel spécial (juste un câble réseau). Le problème de ces caméras est que le flux vidéo n’est pas souvent directement accessible et nécessitant souvent un logiciel propriétaire. Jusqu’à ce que je lise cet article: GStreamer aime les caméras IP Axis de Nico Largo. Convaincu, je me suis empressé d’en acheter une (modèle 206) et je n’ai pas été déçu. L’image est de qualité impeccable et l’installation se fait en 2 minutes. J’apprécie d’ailleurs énormément le support de caméra que l’on peut fixer partout à la manière d’un sert-joint. Très pratique pour fixer sur le support du projo. Et dans mon bout de code Processing utilisant la librairie OpenCV, je n’ai eu qu’à faire de légères modification pour que tout fonctionne (même mieux qu’avant puisque le flux est de meilleure qualité et beaucoup plus stable). Extrait du code avant: import hypermedia.video.*; void setup() OpenCV opencv; opencv = new OpenCV( this ); opencv.capture(w,h); void draw() opencv.read(); Et après, en y ajoutant la librairie GStreamer: import codeanticode.gsvideo.*; import hypermedia.video.*; GSPipeline pipe; OpenCV opencv; void setup() pipe = new GSPipeline(this, "gnomevfssrc location=http://192.168.1.118/axis-cgi/mjpg/video.cgi?resolution=640x480 ! jpegdec ! ffmpegcolorspace"); opencv = new OpenCV( this ); opencv.allocate(w,h); void draw() if (pipe.available() == true) pipe.read(); opencv.copy(pipe, 0, 0, 640, 480, 0, 0, w, h);