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 &quot;cámara&quot;. 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 &quot;camera&quot; 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">&lt;<a href="mailto:jmplaza@gsyc.es">jmplaza@gsyc.es</a>&gt;</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>
&quot;recorder&quot; 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>
&gt; Genial :-)<br>
&gt;<br>
&gt; A mi no me funcionó con las logitech nuevas, pero creo que era porque no<br>
&gt; configuraba bien la resolución. A ver si cuando vuelva puedo probarlas.<br>
&gt;<br>
&gt; Sara, en el paquete opencv-doc hay varios ejemplos en C que hacen uso de<br>
&gt; este api, échales un ojo si no lo has hecho ya, que hay bastante código.<br>
&gt;<br>
&gt; El driver es una cosa a debatir. El hecho de hacerlo porque sí para<br>
&gt; recubrir tampoco tiene mucho sentido. Los drivers de imágenes que<br>
&gt; tenemos, al final ralentizan el proceso porque realizan conversiones que<br>
&gt; hay que estudiar si son necesarias. También es importante ver que pasa<br>
&gt; si se activa el driver opencv para imágenes, y ahora yo quiero grabar un<br>
&gt; video. Grabar frame por frame es costoso y seguro que internamente<br>
&gt; opencv lo hace mejor escribiendo a disco.<br>
&gt;<br>
&gt;<br>
&gt; Por cierto Sara, actualiza tu bookmarks de correos, que jde-developers<br>
&gt; 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>
&gt; por no meter ruido en la lista de users.<br>
&gt;<br>
&gt; un saludete!<br>
&gt;<br>
&gt; El lun, 05-01-2009 a las 12:01 +0100, Sara Marugan escribió:<br>
&gt; &gt; He modificado el código para que la captura se vea en una ventanita en<br>
&gt; &gt; tiempo real.<br>
&gt; &gt;<br>
&gt; &gt; void main(){<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;CvCapture* myCapture = NULL;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;IplImage *frame = NULL;<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;// webcam capture started (opencv)<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;myCapture = &nbsp;cvCaptureFromCAM(-1);<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;if (myCapture == NULL)<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;{<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; printf (&quot;Error myCapture == NULL\n&quot;);<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; return;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;}<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;cvNamedWindow( &quot;opencv&quot;, 1 );<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;/* Config Image Size */<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_WIDTH,320);<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_HEIGHT,240);<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;/* Capture frame */<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;while(1){<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;frame = cvQueryFrame( myCapture );<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cvShowImage( &quot;opencv&quot;, frame);<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cvWaitKey(10);<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;}<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;// webcam capture finished (opencv)<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;cvDestroyWindow(&quot;opencv&quot;);<br>
&gt; &gt; &nbsp; &nbsp; &nbsp;cvReleaseCapture(&amp;myCapture);<br>
&gt; &gt; }<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Sara Marugan escribió:<br>
&gt; &gt; &gt; He realizado una prueba con el código que envió Roberto y una webcam usb<br>
&gt; &gt; &gt; trust normalita y ha funcionado a la primera :)<br>
&gt; &gt; &gt; Parece que con las usb no va a tener problema.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Yo también creo que el driver basado en opencv podría dar la mayoría del<br>
&gt; &gt; &gt; soporte de vídeo.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; David Lobato escribió:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;&gt; Yo veo prometedora esta vía. ¿¿Para que preocuparnos de drivers de<br>
&gt; &gt; &gt;&gt; bajo nivel para acceder a las cámaras si opencv ya lo sabe hacer y<br>
&gt; &gt; &gt;&gt; además con una API tan sencillo??<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; Por lo poco que he leído también puede leer varios formatos de video y<br>
&gt; &gt; &gt;&gt; seguro que imágenes estáticas. Vamos que podemos poner casi todo el<br>
&gt; &gt; &gt;&gt; soporte de video en este driver.<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; El 31 de diciembre de 2008 14:19, Roberto Calvo &lt;<a href="mailto:rocapal@gsyc.es">rocapal@gsyc.es</a><br>
&gt; &gt; &gt;&gt; &lt;mailto:<a href="mailto:rocapal@gsyc.es">rocapal@gsyc.es</a>&gt;&gt; escribió:<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; Buenas,<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; He estado haciendo pruebas para capturar la imagen de la webcam<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; utilizando software de terceros. No parece que tengamos suficientes<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; recursos para mantener drivers actualizados para webcams usb y<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; firewire.<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; He utilizado opencv para realizar estas pruebas desde la<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; arquitectura de<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; JDE. Es bastante sencillo obtener un frame de una imagen (también<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; dispone de funciones para capturar vídeo). Un ejemplo:<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;CvCapture* myCapture = NULL;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;IplImage *frame = NULL;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;// webcam capture started (opencv)<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;myCapture = &nbsp;cvCaptureFromCAM(-1);<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;if (myCapture == NULL)<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;{<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; printf (&quot;Error myCapture == NULL\n&quot;);<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; return;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;}<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;/* Config Image Size */<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_WIDTH,320);<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;cvSetCaptureProperty(myCapture,CV_CAP_PROP_FRAME_HEIGHT,240);<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;/* Capture frame */<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;frame = cvQueryFrame( myCapture );<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;cvSaveImage(&quot;/tmp/prueba.png&quot;,frame);<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;// webcam capture finished (opencv)<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &nbsp;cvReleaseCapture(&amp;myCapture);<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; La imagen que se guarda en frame, es una imagen de 3 canales.<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; Convirtiéndola a una imagen de 4 canales (R,G,B,dummy) tenemos la<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; misma<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; estructura que en JDE para utilizar imágenes.<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; Estas pruebas las he realizado con la Philips PCVC740K. Tendré que<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; probar con la logitech a ver si funciona igual de bien.<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; Seguiremos probando a ver si puede ser una buena solución para<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; despreocuparnos de drivers usb/firewire.<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; un saludete y Feliz Año a todos!!<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; --<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; Roberto Calvo Palomino &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| Libre Software Engineering Lab<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; (GSyC)<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; Tel: (+34) 91 488 85 23 &nbsp; &nbsp; &nbsp; &nbsp; | Universidad Rey Juan Carlos<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; Tel: (+34) 91 488 81 05 &nbsp; &nbsp; &nbsp; &nbsp; | Edif. Departamental II -<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; Despacho 116<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; <a href="mailto:rocapal@gsyc.es">rocapal@gsyc.es</a> &lt;mailto:<a href="mailto:rocapal@gsyc.es">rocapal@gsyc.es</a>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; c/Tulipán s/n 28933 Móstoles (Madrid)<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; <a href="http://libresoft.es/" target="_blank">http://libresoft.es/</a><br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; GPG-KEY: <a href="http://gsyc.es/%7Erocapal/rocapal.gpg" target="_blank">http://gsyc.es/~rocapal/rocapal.gpg</a><br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; &lt;<a href="http://gsyc.es/%7Erocapal/rocapal.gpg" target="_blank">http://gsyc.es/%7Erocapal/rocapal.gpg</a>&gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; _______________________________________________<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; Jde-developers mailing list<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; <a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a> &lt;mailto:<a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a>&gt;<br>
&gt; &gt; &gt;&gt; &nbsp; &nbsp; <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>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; ------------------------------------------------------------------------<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt; _______________________________________________<br>
&gt; &gt; &gt;&gt; Jde-developers mailing list<br>
&gt; &gt; &gt;&gt; <a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a><br>
&gt; &gt; &gt;&gt; <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>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; Jde-users mailing list<br>
&gt; &gt; &gt; <a href="mailto:Jde-users@gsyc.es">Jde-users@gsyc.es</a><br>
&gt; &gt; &gt; <a href="http://gsyc.es/cgi-bin/mailman/listinfo/jde-users" target="_blank">http://gsyc.es/cgi-bin/mailman/listinfo/jde-users</a><br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Jde-users mailing list<br>
&gt; &gt; <a href="mailto:Jde-users@gsyc.es">Jde-users@gsyc.es</a><br>
&gt; &gt; <a href="http://gsyc.es/cgi-bin/mailman/listinfo/jde-users" target="_blank">http://gsyc.es/cgi-bin/mailman/listinfo/jde-users</a><br>
&gt; _______________________________________________<br>
&gt; Jde-developers mailing list<br>
&gt; <a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a><br>
&gt; <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>