La idea de usar sólo opencv como librería para acceder a las cámaras va detrás de generalizar el API de acceso al hardware "cámara". Y esto no lo hemos conseguido aun en nuestro software.<br><br>El estado actual es que diferentes drivers acceden de diferentes maneras y proporcionan diferentes implementaciones de la variable colorX o varcolorX. Las últimas modificaciones que habéis hecho para unificar varcolorX, sin duda, son positivas, pero creo que no son suficientes.<br>
<br>¿Por qué no tenemos un driver "camera" que configurado adecuandamente obtenga las imagenes de donde proceda?<br><br><br><br><br><br><div class="gmail_quote">El 7 de enero de 2009 16:56, JoseMaria <span dir="ltr"><<a href="mailto:jmplaza@gsyc.es">jmplaza@gsyc.es</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Estupendo Sara, hay que darle forma de driver para que las aplicaciones<br>
actuales en JDE que manejan imágenes lo puedan utilizar.<br>
<br>
Sip, la eficiencia es una cuestión muy importante para las aplicaciones<br>
que estamos haciendo ahora. En el fondo tiene que ver también con el API<br>
de imágenes que queremos, o los APIs. Hasta ahora las imágenes<br>
(colorA,varcolorA, varcolorB...) van en RGB, de 3 bytes por pixel, y es<br>
un formato muy genérico. Nada impide hacer interfaces ofreciendo<br>
fotogramas en formato YUV o HSV si es lo que dan las cámaras<br>
directamente y si es lo que necesitan ciertas aplicaciones. Con eso nos<br>
ahorramos una conversión, de YUV a RGB, por ejemplo.<br>
<br>
También se podrían publicar interfaces como IplImage (tipo que maneja<br>
opencv para las imágenes) si es interesante. Ahora mismo el driver<br>
ofrece en su interfaz el puntero a las imágenes, el cliente no tiene por<br>
qué hacer copia si no le interesa (ahí se podría ganar algo en<br>
eficiencia).<br>
<br>
Otra cuestión interesante es la robustez frente a concurrencia<br>
(thread-safe). Por ejemplo para que no haya condiciones de carrera en el<br>
acceso del driver (escribiendo la nueva imagen) y el acceso de los<br>
esquemas de aplicación (leyendo la nueva imagen). Ahora mismo esto no se<br>
vigila explícitamente (por ejemplo con semáforos) para no ralentizar<br>
ejecución. El precio es que efectivamente el esquema usuario puede leer<br>
un trozo de su imagen de la iteración anterior y otro de la última.<br>
<br>
Lo de grabar videos es otra funcionalidad nueva y ahí también tenemos<br>
que ver cómo organizarlo. Hasta ahora lo que tenemos es el esquema<br>
"recorder" que guarda uno a uno los fotogramas que va leyendo. Esto<br>
permitía grabar secuencias de fotogramas incluso decorados con lineas y<br>
píxeles coloreados según quisiera el esquema que producía esos<br>
fotogramas. Con una aplicación externa se podía componer un mpeg.<br>
Primitivo, pero es lo mejor que tenemos hasta ahora :-), aunque hace ya<br>
meses (años?) que no se usa. Seguro que hay formas más elegantes y<br>
eficientes de hacerlo ahora....<br>
<br>
Ánimo,<br>
<br>
JoseMaria<br>
<div><div></div><div class="Wj3C7c">On Mon, 2009-01-05 at 12:26 +0100, Roberto Calvo wrote:<br>
> Genial :-)<br>
><br>
> A mi no me funcionó con las logitech nuevas, pero creo que era porque no<br>
> configuraba bien la resolución. A ver si cuando vuelva puedo probarlas.<br>
><br>
> Sara, en el paquete opencv-doc hay varios ejemplos en C que hacen uso de<br>
> este api, échales un ojo si no lo has hecho ya, que hay bastante código.<br>
><br>
> El driver es una cosa a debatir. El hecho de hacerlo porque sí para<br>
> recubrir tampoco tiene mucho sentido. Los drivers de imágenes que<br>
> tenemos, al final ralentizan el proceso porque realizan conversiones que<br>
> hay que estudiar si son necesarias. También es importante ver que pasa<br>
> si se activa el driver opencv para imágenes, y ahora yo quiero grabar un<br>
> video. Grabar frame por frame es costoso y seguro que internamente<br>
> opencv lo hace mejor escribiendo a disco.<br>
><br>
><br>
> Por cierto Sara, actualiza tu bookmarks de correos, que jde-developers<br>
> antes era <a href="mailto:jde@gsyc.es">jde@gsyc.es</a> y ahora es <a href="mailto:jde-developers@gsyc.es">jde-developers@gsyc.es</a>, más que nada<br>
> por no meter ruido en la lista de users.<br>
><br>
> un saludete!<br>
><br>
> El lun, 05-01-2009 a las 12:01 +0100, Sara Marugan escribió:<br>
> > He modificado el código para que la captura se vea en una ventanita en<br>
> > tiempo real.<br>
> ><br>
> > void main(){<br>
> > CvCapture* myCapture = NULL;<br>
> > IplImage *frame = NULL;<br>
> ><br>
> > // webcam capture started (opencv)<br>
> ><br>
> > myCapture = cvCaptureFromCAM(-1);<br>
> > if (myCapture == NULL)<br>
> > {<br>
> > printf ("Error myCapture == NULL\n");<br>
> > return;<br>
> > }<br>
> ><br>
> > cvNamedWindow( "opencv", 1 );<br>
> ><br>
> > /* Config Image Size */<br>
> > cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_WIDTH,320);<br>
> > cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_HEIGHT,240);<br>
> ><br>
> > /* Capture frame */<br>
> > while(1){<br>
> > frame = cvQueryFrame( myCapture );<br>
> > cvShowImage( "opencv", frame);<br>
> > cvWaitKey(10);<br>
> > }<br>
> ><br>
> > // webcam capture finished (opencv)<br>
> > cvDestroyWindow("opencv");<br>
> > cvReleaseCapture(&myCapture);<br>
> > }<br>
> ><br>
> ><br>
> > Sara Marugan escribió:<br>
> > > He realizado una prueba con el código que envió Roberto y una webcam usb<br>
> > > trust normalita y ha funcionado a la primera :)<br>
> > > Parece que con las usb no va a tener problema.<br>
> > ><br>
> > > Yo también creo que el driver basado en opencv podría dar la mayoría del<br>
> > > soporte de vídeo.<br>
> > ><br>
> > > David Lobato escribió:<br>
> > ><br>
> > >> Yo veo prometedora esta vía. ¿¿Para que preocuparnos de drivers de<br>
> > >> bajo nivel para acceder a las cámaras si opencv ya lo sabe hacer y<br>
> > >> además con una API tan sencillo??<br>
> > >><br>
> > >> Por lo poco que he leído también puede leer varios formatos de video y<br>
> > >> seguro que imágenes estáticas. Vamos que podemos poner casi todo el<br>
> > >> soporte de video en este driver.<br>
> > >><br>
> > >><br>
> > >><br>
> > >> El 31 de diciembre de 2008 14:19, Roberto Calvo <<a href="mailto:rocapal@gsyc.es">rocapal@gsyc.es</a><br>
> > >> <mailto:<a href="mailto:rocapal@gsyc.es">rocapal@gsyc.es</a>>> escribió:<br>
> > >><br>
> > >><br>
> > >> Buenas,<br>
> > >><br>
> > >> He estado haciendo pruebas para capturar la imagen de la webcam<br>
> > >> utilizando software de terceros. No parece que tengamos suficientes<br>
> > >> recursos para mantener drivers actualizados para webcams usb y<br>
> > >> firewire.<br>
> > >><br>
> > >> He utilizado opencv para realizar estas pruebas desde la<br>
> > >> arquitectura de<br>
> > >> JDE. Es bastante sencillo obtener un frame de una imagen (también<br>
> > >> dispone de funciones para capturar vídeo). Un ejemplo:<br>
> > >><br>
> > >> CvCapture* myCapture = NULL;<br>
> > >> IplImage *frame = NULL;<br>
> > >><br>
> > >> // webcam capture started (opencv)<br>
> > >><br>
> > >> myCapture = cvCaptureFromCAM(-1);<br>
> > >> if (myCapture == NULL)<br>
> > >> {<br>
> > >> printf ("Error myCapture == NULL\n");<br>
> > >> return;<br>
> > >> }<br>
> > >><br>
> > >> /* Config Image Size */<br>
> > >> cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_WIDTH,320);<br>
> > >> cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_HEIGHT,240);<br>
> > >><br>
> > >> /* Capture frame */<br>
> > >> frame = cvQueryFrame( myCapture );<br>
> > >> cvSaveImage("/tmp/prueba.png",frame);<br>
> > >><br>
> > >> // webcam capture finished (opencv)<br>
> > >> cvReleaseCapture(&myCapture);<br>
> > >><br>
> > >><br>
> > >> La imagen que se guarda en frame, es una imagen de 3 canales.<br>
> > >> Convirtiéndola a una imagen de 4 canales (R,G,B,dummy) tenemos la<br>
> > >> misma<br>
> > >> estructura que en JDE para utilizar imágenes.<br>
> > >><br>
> > >> Estas pruebas las he realizado con la Philips PCVC740K. Tendré que<br>
> > >> probar con la logitech a ver si funciona igual de bien.<br>
> > >><br>
> > >> Seguiremos probando a ver si puede ser una buena solución para<br>
> > >> despreocuparnos de drivers usb/firewire.<br>
> > >><br>
> > >> un saludete y Feliz Año a todos!!<br>
> > >><br>
> > >> --<br>
> > >> Roberto Calvo Palomino | Libre Software Engineering Lab<br>
> > >> (GSyC)<br>
> > >> Tel: (+34) 91 488 85 23 | Universidad Rey Juan Carlos<br>
> > >> Tel: (+34) 91 488 81 05 | Edif. Departamental II -<br>
> > >> Despacho 116<br>
> > >> <a href="mailto:rocapal@gsyc.es">rocapal@gsyc.es</a> <mailto:<a href="mailto:rocapal@gsyc.es">rocapal@gsyc.es</a>> |<br>
> > >> c/Tulipán s/n 28933 Móstoles (Madrid)<br>
> > >> <a href="http://libresoft.es/" target="_blank">http://libresoft.es/</a><br>
> > >><br>
> > >> GPG-KEY: <a href="http://gsyc.es/%7Erocapal/rocapal.gpg" target="_blank">http://gsyc.es/~rocapal/rocapal.gpg</a><br>
> > >> <<a href="http://gsyc.es/%7Erocapal/rocapal.gpg" target="_blank">http://gsyc.es/%7Erocapal/rocapal.gpg</a>><br>
> > >><br>
> > >> _______________________________________________<br>
> > >> Jde-developers mailing list<br>
> > >> <a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a> <mailto:<a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a>><br>
> > >> <a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
> > >><br>
> > >><br>
> > >> ------------------------------------------------------------------------<br>
> > >><br>
> > >> _______________________________________________<br>
> > >> Jde-developers mailing list<br>
> > >> <a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a><br>
> > >> <a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
> > >><br>
> > >><br>
> > ><br>
> > > _______________________________________________<br>
> > > Jde-users mailing list<br>
> > > <a href="mailto:Jde-users@gsyc.es">Jde-users@gsyc.es</a><br>
> > > <a href="http://gsyc.es/cgi-bin/mailman/listinfo/jde-users" target="_blank">http://gsyc.es/cgi-bin/mailman/listinfo/jde-users</a><br>
> > ><br>
> > ><br>
> > ><br>
> ><br>
> > _______________________________________________<br>
> > Jde-users mailing list<br>
> > <a href="mailto:Jde-users@gsyc.es">Jde-users@gsyc.es</a><br>
> > <a href="http://gsyc.es/cgi-bin/mailman/listinfo/jde-users" target="_blank">http://gsyc.es/cgi-bin/mailman/listinfo/jde-users</a><br>
> _______________________________________________<br>
> Jde-developers mailing list<br>
> <a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a><br>
> <a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
</div></div><font color="#888888">--<br>
<a href="http://gsyc.es/jmplaza" target="_blank">http://gsyc.es/jmplaza</a><br>
Universidad Rey Juan Carlos<br>
</font><div><div></div><div class="Wj3C7c"><br>
<br>
_______________________________________________<br>
Jde-developers mailing list<br>
<a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a><br>
<a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
</div></div></blockquote></div><br>