<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>Jorge Iván Meza Martínez</title> <atom:link href="http://blog.jorgeivanmeza.com/feed/" rel="self" type="application/rss+xml" /><link>http://blog.jorgeivanmeza.com</link> <description>The Fire Within Me: &#34;knowledge will set you free&#34;</description> <lastBuildDate>Tue, 31 Jan 2012 18:18:13 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Campos autonuméricos con SQLite3</title><link>http://blog.jorgeivanmeza.com/2012/01/campos-autonumericos-con-sqlite3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=campos-autonumericos-con-sqlite3</link> <comments>http://blog.jorgeivanmeza.com/2012/01/campos-autonumericos-con-sqlite3/#comments</comments> <pubDate>Mon, 30 Jan 2012 21:33:57 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Bases de datos]]></category> <category><![CDATA[Linux/Solaris/BSD]]></category> <category><![CDATA[Windows]]></category> <category><![CDATA[autoincrement]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[Sqlite]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49954</guid> <description><![CDATA[Introducción SQLite es un gestor de bases de datos pequeño y simple que se usa ampliamente como apoyo al software (aplicaciones de escritorio, navegadores web, etc.) y en sistemas embebidos como los teléfonos móviles (Android por ejemplo). A continuación se &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/campos-autonumericos-con-sqlite3/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p><a
href="http://sqlite.org/">SQLite</a> es un gestor de bases de datos pequeño y simple que se usa ampliamente como apoyo al software (aplicaciones de escritorio, navegadores web, etc.) y en sistemas embebidos como los teléfonos móviles (Android por ejemplo).</p><p>A continuación se muestra como crear campos autonuméricos en esta base de datos, es decir, campos cuyo valor es un número serial que es asignado automáticamente por el software.</p><h2>Procedimiento</h2><p>Crear la tabla con el campo autonumérico (<span
style="font-family: courier new,courier;">code</span> en este caso).</p><pre class="sql">CREATE TABLE test (
code     INTEGER        PRIMARY KEY    AUTOINCREMENT,
name     VARCHAR(20)    UNIQUE,
value    FLOAT
);</pre><p>Agregar datos a la tabla recién creada.</p><pre class="sql">INSERT INTO test VALUES(NULL, 'demo1', 10.10);
INSERT INTO test VALUES(NULL, 'demo2', 20.20);
INSERT INTO test VALUES(NULL, 'demo3', 30.30);</pre><p>Consultar los datos recién ingresados.</p><pre class="sql">sqlite&gt; select * from test;
    1|demo1|10.1
    2|demo2|20.2
    3|demo3|30.3</pre><p>Consultar el valor del último campo autonumérico ingresado durante la sesión.</p><pre class="sql">SELECT last_insert_rowid();
    3</pre><p>Enlaces</p><ul><li>SQLite<br
/><a
href="http://sqlite.org/">http://sqlite.org/</a></li><li>SQLite autoincrement<br
/><a
href="http://www.sqlite.org/autoinc.html">http://www.sqlite.org/autoinc.html</a></li><li>How do I create an AUTOINCREMENT field<br
/><a
href="http://www.sqlite.org/faq.html#q1">http://www.sqlite.org/faq.html#q1</a></li><li>Function API <span
style="font-family: courier new,courier;">last_insert_rowid()</span><br
/><a
href="http://www.sqlite.org/lang_corefunc.html#last_insert_rowid">http://www.sqlite.org/lang_corefunc.html#last_insert_rowid</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/campos-autonumericos-con-sqlite3/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Permisos de archivos/directorios incorrectos para el servidor de páginas en GNU/Linux</title><link>http://blog.jorgeivanmeza.com/2012/01/permisos-de-archivosdirectorios-incorrectos-para-el-servidor-de-paginas-en-gnulinux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=permisos-de-archivosdirectorios-incorrectos-para-el-servidor-de-paginas-en-gnulinux</link> <comments>http://blog.jorgeivanmeza.com/2012/01/permisos-de-archivosdirectorios-incorrectos-para-el-servidor-de-paginas-en-gnulinux/#comments</comments> <pubDate>Mon, 30 Jan 2012 03:15:46 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Linux/Solaris/BSD]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Apache]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[permisos]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49950</guid> <description><![CDATA[Introducción El problema mas común que impide que se pueda acceder correctamente a un sitio o aplicación web que se está instalando o desarrollando es que los archivos y directorios no cuenten con los permisos de acceso apropiados para que &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/permisos-de-archivosdirectorios-incorrectos-para-el-servidor-de-paginas-en-gnulinux/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>El problema mas común que impide que se pueda acceder correctamente a un sitio o aplicación web que se está instalando o desarrollando es que los archivos y directorios no cuenten con los permisos de acceso apropiados para que el servidor de páginas (Apache por ejemplo) pueda accederlos correctamente.  En estos casos se obtiene un mensaje de error similar al  mostrado a continuación.</p><p
style="padding-left: 30px;"><em>failed to open stream: Permission denied in /ruta/al/proyecto/index.php on line xx</em></p><h2>La solución</h2><p>En términos generales, los directorios deben contar con permisos 755 (<span
style="font-family: courier new,courier;">drwxr-xr-x</span>) y los archivos -como .php- 644 (<span
style="font-family: courier new,courier;">-rw-r&#8211;r&#8211;</span>).  Esta modificación puede realizarse de manera recursiva aprovechando la flexibilidad del comando <span
style="font-family: courier new,courier;">find</span> de la siguiente manera.</p><pre>$ find /ruta/al/proyecto -type d -exec chmod 755 {} \;
$ find /ruta/al/proyecto -type f -exec chmod 644 {} \;</pre><p>Inclusive es posible establecer filtros a los nombres de los recursos actualizados para mayor precisión en el cambio.</p><pre>$ find /ruta/al/proyecto -type f -name '*.php' -exec chmod 644 {} \;</pre>]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/permisos-de-archivosdirectorios-incorrectos-para-el-servidor-de-paginas-en-gnulinux/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Invalid command &#039;RewriteEngine&#039; con Apache2</title><link>http://blog.jorgeivanmeza.com/2012/01/invalid-command-rewriteengine-con-apache2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=invalid-command-rewriteengine-con-apache2</link> <comments>http://blog.jorgeivanmeza.com/2012/01/invalid-command-rewriteengine-con-apache2/#comments</comments> <pubDate>Mon, 30 Jan 2012 02:58:08 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Linux/Solaris/BSD]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Apache]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[rewrite]]></category> <category><![CDATA[RewriteEngine]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49948</guid> <description><![CDATA[Introducción Intentando utilizar un software web que incluía un .htaccess y este se aprovechaba de la funcionalidad del RewriteEngine de Apache2, obtenía siempre el siguiente mensaje de error. Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/invalid-command-rewriteengine-con-apache2/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>Intentando utilizar un software web que incluía un <span
style="font-family: courier new,courier;">.htaccess</span> y este se aprovechaba de la funcionalidad del <span
style="font-family: courier new,courier;">RewriteEngine</span> de Apache2, obtenía siempre el siguiente mensaje de error.</p><p
style="padding-left: 30px;"><em>Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration</em></p><h2>Solución</h2><p>Activar el módulo del <span
style="font-family: courier new,courier;">RewriteEngine</span> de Apache2.</p><p><span
style="font-family: courier new,courier;">$ sudo a2enmod rewrite</span></p><p>Reiniciar Apache2 para que tenga en cuenta al módulo recién activado.</p><p><span
style="font-family: courier new,courier;">$ sudo service apache2 restart</span></p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/invalid-command-rewriteengine-con-apache2/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Instalando Unity 5.0 en GNU/Linux Ubuntu 11.10</title><link>http://blog.jorgeivanmeza.com/2012/01/instalando-unity-5-0-en-gnulinux-ubuntu-11-10/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=instalando-unity-5-0-en-gnulinux-ubuntu-11-10</link> <comments>http://blog.jorgeivanmeza.com/2012/01/instalando-unity-5-0-en-gnulinux-ubuntu-11-10/#comments</comments> <pubDate>Mon, 23 Jan 2012 02:52:08 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Linux/Solaris/BSD]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[GNU/Linux]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[Ubuntu]]></category> <category><![CDATA[Unity]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49946</guid> <description><![CDATA[Introducción Unity 5.0 es actualmente la última versión del ambiente de escritorio desarrollado por Canonical para Ubuntu su distribución de GNU/Linux.  Está versión que trae mejoras en su desempeño, se incluirá con la versión 12.04 ("Precise Pangolin") a liberarse en &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/instalando-unity-5-0-en-gnulinux-ubuntu-11-10/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p><a
href="http://unity.ubuntu.com/">Unity</a> 5.0 es actualmente la última versión del ambiente de escritorio desarrollado por Canonical para Ubuntu su distribución de GNU/Linux.  Está versión que trae <a
href="http://planetared.com/2012/01/unity-5-0-ya-esta-disponible-para-ubuntu-12-04/">mejoras en su desempeño</a>, se incluirá con la versión 12.04 ("<em>Precise Pangolin</em>") a liberarse en el mes de abril del 2012.</p><p>A continuación se describe el procedimiento necesario para instalar y desinstalar (no se ha probado aún) la versión mas reciente de Unity en Ubuntu 11.10.</p><h2>Instalación</h2><pre class="bash">$ sudo add-apt-repository ppa:unity-team/ppa
$ sudo apt-get update &amp;&amp; sudo apt-get dist-upgrade
</pre><p><strong>*Anotación*</strong> Si desea instalar los paquetes mas recientes que aún no cuentan con las pruebas de aceptación utilice el repositorio <span
style="font-family: courier new,courier;">ppa:unity-team/staging</span>.</p><h2>Desinstalación</h2><pre class="bash">$ sudo apt-get install ppa-purge
$ sudo ppa-purge ppa:unity-team/ppa
</pre>]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/instalando-unity-5-0-en-gnulinux-ubuntu-11-10/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Detectando movimiento con GSVideo y Processing</title><link>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-gsvideo-y-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=detectando-movimiento-con-gsvideo-y-processing</link> <comments>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-gsvideo-y-processing/#comments</comments> <pubDate>Fri, 20 Jan 2012 20:28:31 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[GSVideo]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[movimiento]]></category> <category><![CDATA[Processing]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49942</guid> <description><![CDATA[Introducción De manera análoga a como se realizó inicialmente con OpenCV, se realizó el proceso de detección de movimiento básico utilizando Processing y la librería de GSVideo instalada hace poco.  Esta librería se especializa en la captura, grabación y reproducción &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-gsvideo-y-processing/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>De manera análoga a como se realizó <a
href="http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-opencv-y-processing/">inicialmente con OpenCV</a>, se realizó el proceso de detección de movimiento básico utilizando Processing y la librería de <a
href="http://blog.jorgeivanmeza.com/2012/01/instalando-gsvideo-en-processing-bajo-gnulinux/">GSVideo instalada</a> hace poco.  Esta librería se especializa en la captura, grabación y reproducción del video mas que en su procesamiento así que la manipulación de las imágenes se realiza manualmente con las facilidades que provee el lenguaje.</p><p>En términos generales el procedimiento se basa en capturar el video proveniente de la cámara web a través de una instancia de la clase <span
style="font-family: courier new,courier;">GSCapture</span> provista por la librería GSVideo.  Cada una de las imágenes obtenidas es comparada con la imagen inmediatamente anterior.  De cada uno de sus píxeles se toma el color en forma de tripleta RGB y se determina su <em>cantidad de variación</em> utilizando la fórmula de distancia (función <a
href="http://processing.org/reference/dist_.html"><span
style="font-family: courier new,courier;">dist</span></a> en Processing).  De esta manera se determina si en ese punto específico sucedió movimiento o no y es traducido a un píxel de color blano o negro respectivamente.</p><h2>Screenshot</h2><p><div
id="attachment_49943" class="wp-caption aligncenter" style="width: 510px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_019.png"><img
class="size-large wp-image-49943" title="Workspace 1_019" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_019-1024x415.png" alt="Imagen de movmiento sobre el objetivo" width="500" height="202" /></a><p
class="wp-caption-text">Imagen de movmiento sobre el objetivo</p></div><br
/><h2>Enlaces</h2><ul><li>Código fuente<br
/><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/GSVideo_MotionImage.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/GSVideo_MotionImage.zip</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-gsvideo-y-processing/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Instalando GSVideo en Processing bajo GNU/Linux</title><link>http://blog.jorgeivanmeza.com/2012/01/instalando-gsvideo-en-processing-bajo-gnulinux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=instalando-gsvideo-en-processing-bajo-gnulinux</link> <comments>http://blog.jorgeivanmeza.com/2012/01/instalando-gsvideo-en-processing-bajo-gnulinux/#comments</comments> <pubDate>Thu, 19 Jan 2012 02:22:27 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Linux/Solaris/BSD]]></category> <category><![CDATA[GNU/Linux]]></category> <category><![CDATA[GStreamer]]></category> <category><![CDATA[GSVideo]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[Processing]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49937</guid> <description><![CDATA[Introducción GSVideo es una librería para Processing desarrollada por Andrés Colubri y basada en GStreamer.  Esta librería permite reproducir videos (incluyendo a la cámara web), capturar imágenes y realizar grabaciones.  Su API sigue los lineamientos de la librería nativa (processing.video.*) &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/instalando-gsvideo-en-processing-bajo-gnulinux/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p><a
href="http://gsvideo.sourceforge.net/">GSVideo</a> es una librería para <a
href="http://processing.org/">Processing</a> desarrollada por <a
href="http://interfaze.info/">Andrés Colubri</a> y basada en <a
href="http://www.gstreamer.net/">GStreamer</a>.  Esta librería permite reproducir videos (incluyendo a la cámara web), capturar imágenes y realizar grabaciones.  Su API sigue los lineamientos de la <a
href="http://processing.org/reference/libraries/video/index.html">librería nativa</a> (<span
style="font-family: courier new,courier;">processing.video.*</span>) la cual por estar basada en Apple QuickTime no se encuentra disponible en GNU/Linux.</p><h2>Instalación</h2><p>La instalación de la distribución binaria es muy simple y se describe a continuación.</p><p>Descargar la versión mas reciente de la librería desde la siguiente ubicación.</p><p
style="padding-left: 30px;"><a
href="http://sourceforge.net/projects/gsvideo/files/gsvideo/">http://sourceforge.net/projects/gsvideo/files/gsvideo/</a></p><p>En este caso se obtuvo el archivo <span
style="font-family: courier new,courier;">GSVideo-1.0.0-linux.zip</span>.</p><p>Descomprimir el paqute con la distribución de la librería.</p><p><span
style="font-family: courier new,courier;">$ unzip GSVideo-1.0.0-linux.zip</span></p><p>Reubicar la librería en el lugar apropiado del <em>sketchbook</em>.</p><p><span
style="font-family: courier new,courier;">$ mv GSVideo ~/sketchbook/libraries/</span></p><h2>Dependencias</h2><p>Como se mencionó inicialmente esta librería depende de GStreamer para su funcionamiento.  Utilizando GNU/Linux Mint 12 no fue necesario instalar ningún paquete adicional para trabajar con la librería.</p><p><span
style="font-family: courier new,courier;">$ sudo aptitude search gstream | grep "^i"</span></p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">i   bluez-gstreamer                 &#8211; Bluetooth GStreamer support               </span><br
/><span
style="font-family: courier new,courier;">i   gir1.2-gstreamer-0.10           &#8211; Description: GObject introspection data fo</span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-alsa              &#8211; GStreamer plugin for ALSA                 </span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-ffmpeg            &#8211; FFmpeg plugin for GStreamer               </span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-fluendo-mp3       &#8211; Fluendo mp3 decoder GStreamer plugin      </span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-gconf             &#8211; GStreamer plugin for getting the sink/sour</span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-nice              &#8211; ICE library (GStreamer plugin)            </span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-pitfdll           &#8211; GStreamer plugin for using MS Windows bina</span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-plugins-bad       &#8211; GStreamer plugins from the "bad" set      </span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-plugins-bad-multi &#8211; GStreamer plugins from the "bad" set (Mult</span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-plugins-base      &#8211; GStreamer plugins from the "base" set     </span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-plugins-base-apps &#8211; GStreamer helper programs from the "base" </span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-plugins-good      &#8211; GStreamer plugins from the "good" set     </span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-plugins-ugly      &#8211; GStreamer plugins from the "ugly" set     </span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-pulseaudio        &#8211; GStreamer plugin for PulseAudio           </span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-tools             &#8211; Tools for use with GStreamer              </span><br
/><span
style="font-family: courier new,courier;">i   gstreamer0.10-x                 &#8211; GStreamer plugins for X11 and Pango       </span><br
/><span
style="font-family: courier new,courier;">i   libgstreamer-plugins-base0.10-0 &#8211; GStreamer libraries from the "base" set   </span><br
/><span
style="font-family: courier new,courier;">i   libgstreamer0.10-0              &#8211; Core GStreamer libraries and elements</span></p><h2>Demostración</h2><p>El siguiente código se basa en el ejemplo <a
href="http://gsvideo.sourceforge.net/examples/Capture/GettingStartedCaptureLinux/GettingStartedCaptureLinux.pde">GettingStartedCaptureLinux</a> incluído en la distribución de la librería.</p><pre class="java">// Import the GSVideo library classes
import codeanticode.gsvideo.*;
// GSVideo capture object reference
GSCapture cam;
void setup()
{
  size(640, 480);
  // Create the GSVideo capture object with the capture's resolution
  cam = new GSCapture(this, 640, 480);
  // Begin the video capture process
  cam.start();
  // Retrieve the video resolutions available
  println("Supported video resolutions: ");
  int[][] res = cam.resolutions();
  for (int i = 0; i &lt; res.length; i++)
  {
    println(res[i][0] + "x" + res[i][1]);
  }
  println();
  // Retrieve the video framerates available
  println("Supported video framerates: ");
  String[] fps = cam.framerates();
  for (int i = 0; i &lt; fps.length; i++)
  {
    println(fps[i]);
  }
}
void stop()
{
  // Stop the GSVideo webcam capture
  cam.stop();
  // Stop the sketch
  this.stop();
}
void draw()
{
  // Check if there is a capture device available
  if (cam.available() == true)
  {
    // In this case, read an image from it
    cam.read();
    // Display it on the window
    image(cam, 0, 0);
  }
}</pre><h2>Enlaces</h2><ul><li>GSVideo project<br
/><a
href="http://gsvideo.sourceforge.net/">http://gsvideo.sourceforge.net/</a></li><li>GSVideo en SourceForge<br
/><a
href="http://sourceforge.net/projects/gsvideo/">http://sourceforge.net/projects/gsvideo/</a></li><li>GSVideo API reference<br
/><a
href="http://gsvideo.sourceforge.net/reference/index.html">http://gsvideo.sourceforge.net/reference/index.html</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/instalando-gsvideo-en-processing-bajo-gnulinux/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Detectando movimiento con OpenCV y Processing</title><link>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-opencv-y-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=detectando-movimiento-con-opencv-y-processing</link> <comments>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-opencv-y-processing/#comments</comments> <pubDate>Sun, 15 Jan 2012 09:05:11 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[movimiento]]></category> <category><![CDATA[OpenCV]]></category> <category><![CDATA[Processing]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49922</guid> <description><![CDATA[Introducción Una de las características que quería aprender a implementar con OpenCV era la detección de movimiento, esto me permitirá implementar formas de interacción interesantes (y bastante simples de generar) entre el usuario y el sketch a través de la &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-opencv-y-processing/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>Una de las características que quería aprender a implementar con OpenCV era la detección de movimiento, esto me permitirá implementar formas de interacción interesantes (y bastante simples de generar) entre el usuario y el <em>sketch</em> a través de la cámara web.</p><p>En pocas palabras, la técnica para detectar movimiento que se describe a continuación se basa en generar una imagen monocromática con los píxeles que han cambiado entre dos cuadros del video.  Para hacer esto se siguen los pasos mostrados a continuación.</p><table
style="width: 617px; height: 419px;" border="0" align="center"><tbody><tr><td><ol><li>Obtener una nueva imagen de la cámara web</li><li>Invertir la imagen horizontalmente (opcional)</li><li>Calcular la diferencia entre la imagen recién obtenida y la almacenada en memoria (recordada)</li><li>Procesar la imagen para facilitar su manejo: convertirla a escala de grises, suavizar la imagen y reducir el ruido eliminando los valores demasiado altos o bajos.</li><li>Mostrar la imagen de movimiento (opcional)</li><li>Recordar la imagen actual para ser procesada nuevamente en la siguiente iteración</li></ol></td><td><p><code>opencv.read();</code></p><p><code>opencv.flip(OpenCV.FLIP_HORIZONTAL);</code></p><p><code>opencv.absDiff();</code></p><p><code>opencv.convert(OpenCV.GRAY);</code></p><p><code>opencv.blur(OpenCV.BLUR, 3);</code></p><p><code>opencv.threshold(20); </code></p><p><code>image(opencv.image(), 0, 0);</code></p><p><code>opencv.remember(OpenCV.SOURCE, OpenCV.FLIP_HORIZONTAL);  </code></p></td></tr></tbody></table><p>Para verificar si ha sucedido movimiento en una determinada área de la imagen se debe verificar si los píxeles que pertenecen a esa área se encuentran blancos (si hubo) o no.  Esta información se obtiene utilizando el método <a
href="http://processing.org/reference/PImage_get_.html"><span
style="font-family: courier new,courier;">get(int x, int y)</span></a> del objeto <a
href="http://processing.org/reference/PImage.html"><span
style="font-family: courier new,courier;">PImage</span></a> el cual retorna el <a
href="http://processing.org/reference/color_datatype.html"><span
style="font-family: courier new,courier;">color</span></a> del píxel seleccionado.  Por facilidad se recomienda que se obtenga el brillo (<a
href="http://processing.org/reference/brightness_.html"><span
style="font-family: courier new,courier;">brightness(color)</span></a>) de este píxel para su comparación.</p><p>El siguiente código revisa un área cuadrada de píxeles en búsqueda de movimiento en esa zona.</p><p><code>for(int px=x; px&lt;x+size; px++)   <br
/>    for(int py=y; py&lt;y+size; py++)      <br
/>        if (px &lt; width &amp;&amp; px &gt; 0 &amp;&amp; py &lt; height &amp;&amp; py &gt; 0)        <br
/>            if (brightness(mImage.get(px, py)) &gt; 127)<br
/>                count ++;<br
/></code></p><h2>Screenshot</h2><p><div
id="attachment_49928" class="wp-caption aligncenter" style="width: 355px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_011.png"><img
class="size-full wp-image-49928" title="Workspace 1_011" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_011.png" alt="Imagen de movmiento sobre el objetivo (modo buffer)" width="345" height="286" /></a><p
class="wp-caption-text">Imagen de movmiento sobre el objetivo (modo buffer)</p></div><p>&nbsp;</p><h2>Enlaces</h2><ul><li>Código fuente.<br
/><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_MotionImage.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_MotionImage.zip</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-opencv-y-processing/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Poniendo sombreros a las personas con OpenCV y Processing</title><link>http://blog.jorgeivanmeza.com/2012/01/poniendo-sombreros-a-las-personas-con-opencv-y-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=poniendo-sombreros-a-las-personas-con-opencv-y-processing</link> <comments>http://blog.jorgeivanmeza.com/2012/01/poniendo-sombreros-a-las-personas-con-opencv-y-processing/#comments</comments> <pubDate>Fri, 13 Jan 2012 21:25:28 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[OpenCV]]></category> <category><![CDATA[Processing]]></category> <category><![CDATA[rostros]]></category> <category><![CDATA[sombreros]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49913</guid> <description><![CDATA[Introducción Como una versión un poco mas elaborada de la publicación anterior he preparado este sketch que toma el flujo de video proveniente de la cámara web,  encuentra en él los rostros de las personas y les pone un sombrero.  &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/poniendo-sombreros-a-las-personas-con-opencv-y-processing/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>Como una versión un poco mas elaborada de la <a
href="http://blog.jorgeivanmeza.com/2012/01/ubicando-caras-en-una-webcam-con-opencv-y-processing/" target="_blank">publicación anterior</a> he preparado este <em>sketch</em> que toma el flujo de video proveniente de la cámara web,  encuentra en él los rostros de las personas y les pone un sombrero.  Se incluyen diferentes sombreros que pueden cambiarse mediante el teclado.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">q</span> &#8211; terminar el <em>sketch</em><br
/><span
style="font-family: courier new,courier;">a</span> &#8211; mostrar/ocultar el rectángulo rojo alrededor de cada cara encontrada<br
/><span
style="font-family: courier new,courier;">s</span> &#8211; mostrar/ocultar la máscara sobre cada cara encontrada<br
/><span
style="font-family: courier new,courier;">z</span>/<span
style="font-family: courier new,courier;">x</span> &#8211; alternar entre las imágenes de máscaras disponibles</p><h2>Screenshots</h2><p><div
id="attachment_49914" class="wp-caption aligncenter" style="width: 368px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_006.png"><img
class="size-full wp-image-49914" title="Workspace 1_006" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_006.png" alt="Demostración con varias personas en la misma imagen" width="358" height="300" /></a><p
class="wp-caption-text">Demostración con varias personas en la misma imagen</p></div><div
id="attachment_49915" class="wp-caption aligncenter" style="width: 355px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_008.png"><img
class="size-full wp-image-49915" title="Workspace 1_008" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_008.png" alt="Demostración con la foto de un rostro" width="345" height="284" /></a><p
class="wp-caption-text">Demostración con la foto de un rostro</p></div><p>Agradecimientos para Martha, Diego y <a
href="http://www.jenniferconnelly.net/" target="_blank">Jennifer Connerlly</a> por participar como modelos para las fotos del artículo.</p><h2>Acerca de la ubicación de los rostros</h2><p>Hasta el momento el perfil que mejores resultados me ha dado para ubicar los rostros de las personas ha sido <span
style="font-family: courier new,courier;">OpenCV.CASCADE_FRONTALFACE_ALT_TREE</span> (<span
style="font-family: courier new,courier;">haarcascade_frontalface_alt_tree.xml</span>).  Este encuentra los rostros con el menor número de errores (identificación equivocada de un objeto inanimado como si fuera un rostro), sin embargo parece tener poca tolerancia a las variaciones de posición del rostro de las personas, si ellas agachan o rotan un poco la cara probablemente ya no serán renocidas.  Un trabajo a futuro consistirá en encontrar como mejorar estos resultados de la ubicación de rostros.</p><p>Estos son los perfiles de reconocimiento disponibles a través de OpenCV según la <a
href="http://blog.jorgeivanmeza.com/2012/01/instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12/" target="_blank">instalación que se realizó de la librería</a>.</p><p>Los siguientes perfiles se encuentran disponibles como constantes asociadas a la clase <span
style="font-family: courier new,courier;">OpenCV</span> de Processing.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">  public static final String CASCADE_FRONTALFACE_ALT_TREE</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_FRONTALFACE_ALT</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_FRONTALFACE_ALT2</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_FRONTALFACE_DEFAULT</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_PROFILEFACE</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_FULLBODY</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_LOWERBODY</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_UPPERBODY</span></p><p>A continuación se listan todos los archivos XML de los perfiles de reconocimiento que también pueden ser utilizados directamente en Processing.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">  haarcascade_eye_tree_eyeglasses.xml   </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_frontalface_default.xml  </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_eyepair_small.xml  </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_upperbody.xml</span><br
/><span
style="font-family: courier new,courier;">  haarcascade_eye.xml                   </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_fullbody.xml             </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_lefteye.xml        </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_profileface.xml</span><br
/><span
style="font-family: courier new,courier;">  haarcascade_frontalface_alt2.xml      </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_lefteye_2splits.xml      </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_mouth.xml          </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_righteye_2splits.xml</span><br
/><span
style="font-family: courier new,courier;">  haarcascade_frontalface_alt_tree.xml  </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_lowerbody.xml            </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_nose.xml           </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_upperbody.xml</span><br
/><span
style="font-family: courier new,courier;">  haarcascade_frontalface_alt.xml       </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_eyepair_big.xml      </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_righteye.xml </span></p><h2>Enlaces</h2><ul><li>Código fuente<br
/><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_SimpleHat.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_SimpleHat.zip</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/poniendo-sombreros-a-las-personas-con-opencv-y-processing/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Ubicando caras en una webcam con OpenCV y Processing</title><link>http://blog.jorgeivanmeza.com/2012/01/ubicando-caras-en-una-webcam-con-opencv-y-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ubicando-caras-en-una-webcam-con-opencv-y-processing</link> <comments>http://blog.jorgeivanmeza.com/2012/01/ubicando-caras-en-una-webcam-con-opencv-y-processing/#comments</comments> <pubDate>Fri, 13 Jan 2012 17:41:19 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[OpenCV]]></category> <category><![CDATA[personas]]></category> <category><![CDATA[Processing]]></category> <category><![CDATA[rostros]]></category> <category><![CDATA[webcam]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49901</guid> <description><![CDATA[Introducción En este sketch se aprovecha la agilidad para desarrollar en Processing con la facilidad que provee OpenCV para ubicar los rostros de las personas en el flujo de video proveniente de una cámara web.  En este caso el sketch &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/ubicando-caras-en-una-webcam-con-opencv-y-processing/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>En este <em>sketch</em> se aprovecha la agilidad para desarrollar en Processing con la facilidad que provee OpenCV para ubicar los rostros de las personas en el flujo de video proveniente de una cámara web.  En este caso el <em>sketch</em> mostrará una cara sonriente cuando se encuentra acompañado por una persona y una cara triste cuando está solo.</p><h2>Screenshots</h2><p><div
id="attachment_49902" class="wp-caption aligncenter" style="width: 540px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-2_002.png"><img
class=" wp-image-49902 " title="Workspace 2_002" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-2_002.png" alt="Sketch feliz" width="530" height="228" /></a><p
class="wp-caption-text">Sketch feliz</p></div><br
/><div
id="attachment_49910" class="wp-caption aligncenter" style="width: 540px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-2_003.png"><img
class="size-full wp-image-49910" title="Workspace 2_003" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-2_003.png" alt="Sketch triste" width="530" height="228" /></a><p
class="wp-caption-text">Sketch triste</p></div></p><h2>Enlaces</h2><ul><li>Código fuente<br
/><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_SimpleHappyWithFace.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_SimpleHappyWithFace.zip</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/ubicando-caras-en-una-webcam-con-opencv-y-processing/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Instalación de la librería de OpenCV en Processing bajo GNU/Linux Mint 12</title><link>http://blog.jorgeivanmeza.com/2012/01/instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12</link> <comments>http://blog.jorgeivanmeza.com/2012/01/instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12/#comments</comments> <pubDate>Fri, 13 Jan 2012 01:00:09 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[Linux/Solaris/BSD]]></category> <category><![CDATA[GNU/Linux]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[Mint]]></category> <category><![CDATA[OpenCV]]></category> <category><![CDATA[Processing]]></category> <category><![CDATA[Ubuntu]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49895</guid> <description><![CDATA[Introducción En el presente artículo se describirán los pasos necesarios para instalar el software de OpenCV y su correspondiente librería para desarrollar sketches con él utilizando Processing. Durante el desarrollo de la instalación se utilizó GNU/Linux Mint 12 sin emgbargo &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>En el presente artículo se describirán los pasos necesarios para instalar el software de <a
href="http://opencv.willowgarage.com/wiki/">OpenCV</a> y su correspondiente librería para desarrollar <em>sketches</em> con él utilizando <a
href="http://www.processing.org/">Processing</a>.</p><p>Durante el desarrollo de la instalación se utilizó GNU/Linux Mint 12 sin emgbargo el procedimiento debe ser compatible con Ubuntu.</p><p><strong>Aviso!</strong> La versión de OpenCV que se encuentra en los repositorios del sistema operativo (<span
style="font-family: courier new,courier;">2.1.0-7build1</span>) es un poco antigua, sin embargo se encontraron problemas para compilar la parte nativa de la librería con <a
href="https://launchpad.net/~gijzelaar/+archive/opencv2.3">una versión mas reciente</a>.  Por este motivo se decidió utilizar la versión disponible y experimentar posteriormente una posible actualización.</p><h2>Procedimiento</h2><h3>Instalar OpenCV</h3><p><span
style="font-family: courier new,courier;">$ sudo aptitude install libcv-dev libhighgui-dev libcvaux-dev opencv-doc</span></p><h3>Instalar la librería de Processing</h3><p><strong>Nota!</strong>  Se recomienda descargar la última versión disponible de la <a
href="http://ubaa.net/shared/processing/opencv/">página web del desarrollador</a>.  En este caso se utilizó <span
style="font-family: courier new,courier;"><a
href="http://ubaa.net/shared/processing/opencv/download/opencv_01.zip">opencv_01.zip</a></span>.</p><p>Crear el directorio donde se almacenarán las librerías de Processing del usuario.</p><p><span
style="font-family: courier new,courier;">$ mkdir -p ~/sketchbook/libraries ; cd ~/sketchbook/libraries</span></p><p>Descargar la librería y los ejemplos de la misma.</p><p><span
style="font-family: courier new,courier;">$ wget http://ubaa.net/shared/processing/opencv/download/opencv_01.zip</span><br
/><span
style="font-family: courier new,courier;">$ wget http://ubaa.net/shared/processing/opencv/download/opencv_examples.zip</span></p><p>Descomprimir los paquetes recién descargados</p><p><span
style="font-family: courier new,courier;">$ unzip opencv_01.zip</span><br
/><span
style="font-family: courier new,courier;">$ rm opencv_01.zip</span><br
/><span
style="font-family: courier new,courier;">$ unzip opencv_examples.zip</span><br
/><span
style="font-family: courier new,courier;">$ rm opencv_examples.zip</span></p><p>Ubicar correctamente el directorio con los ejemplos.</p><p><span
style="font-family: courier new,courier;">$ mv OpenCV\ examples/ OpenCV/examples</span></p><h3>Recompilar el módulo nativo de la librería</h3><p>La librería incluye una librería del sistema operativo (<span
style="font-family: courier new,courier;">libOpenCV.so</span>) enlazada dinámicamente con OpenCV.  La incluída con la distribución de la librería recién instalada fue compilada con versiones anteriores de OpenCV motivo por el cual no se cumplen sus dependencias y en el momento de compilar los <em>sketches</em> se obtiene el siguiente mensaje de error.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">!!! required library not found : /home/jimezam/sketchbook/libraries/OpenCV/library/libOpenCV.so: libcxcore.so.1: cannot open shared object file: No such file or directory</span><br
/><span
style="font-family: courier new,courier;">Verify that the java.library.path property is correctly set and 'libcxcore.so', 'libcv.so', 'libcvaux.so', 'libml.so', and 'libhighgui.so' are placed (or linked) in one of your system shared libraries folder</span></p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">Exception in thread "Animation Thread" java.lang.UnsatisfiedLinkError: hypermedia.video.OpenCV.capture(III)V</span><br
/><span
style="font-family: courier new,courier;">    at hypermedia.video.OpenCV.capture(Native Method)</span><br
/><span
style="font-family: courier new,courier;">    at hypermedia.video.OpenCV.capture(OpenCV.java:945)</span><br
/><span
style="font-family: courier new,courier;">    at sketch_jan12b.setup(sketch_jan12b.java:35)</span><br
/><span
style="font-family: courier new,courier;">    at processing.core.PApplet.handleDraw(Unknown Source)</span><br
/><span
style="font-family: courier new,courier;">    at processing.core.PApplet.run(Unknown Source)</span><br
/><span
style="font-family: courier new,courier;">    at java.lang.Thread.run(Thread.java:662)</span></p><p>Por este motivo es necesario recompilar el módulo nativo con las versiones actuales.  Para hacer esto se deben seguir los siguientes pasos.</p><p><span
style="font-family: courier new,courier;">$ cd ~/sketchbook/libraries/OpenCV/library/</span></p><p>Crear una copia de seguridad del módulo nativo a recompilarse.</p><p><span
style="font-family: courier new,courier;">$ mv libOpenCV.so libOpenCV.so.OLD</span></p><p>Generar la cabecera del módulo nativo de Java (JNI).</p><p><span
style="font-family: courier new,courier;">$ javah -classpath OpenCV.jar -jni hypermedia.video.OpenCV</span></p><p>Recompilar el módulo nativo.</p><p><span
style="font-family: courier new,courier;">$ g++ -shared ../source/cpp/OpenCV.cpp -o libOpenCV.so -I/usr/include/opencv/ -I/usr/lib/jvm/java-1.6.0-openjdk/include/ -I. -lcv -lhighgui -fPIC</span></p><p>Finalmente se obtienen los siguientes archivos.</p><p><span
style="font-family: courier new,courier;">$ ls -l</span></p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">-rw-rw-r&#8211; 1 jimezam jimezam  10748 2012-01-12 14:43 hypermedia_video_OpenCV.h</span><br
/><span
style="font-family: courier new,courier;">-rwxr-xr-x 1 jimezam jimezam  80088 2009-05-27 13:15 libOpenCV.jnilib</span><br
/><span
style="font-family: courier new,courier;">-rwxrwxr-x 1 jimezam jimezam  41953 2012-01-12 16:16 <strong>libOpenCV.so</strong></span><br
/><span
style="font-family: courier new,courier;">-rwxr-xr-x 1 jimezam jimezam  42861 2009-05-27 13:15 libOpenCV.so.OLD</span><br
/><span
style="font-family: courier new,courier;">-rwxr&#8212;&#8211; 1 jimezam jimezam 515184 2009-05-27 13:15 OpenCV.dll</span><br
/><span
style="font-family: courier new,courier;">-rw-r&#8211;r&#8211; 1 jimezam jimezam  12116 2009-05-27 13:15 OpenCV.jar</span></p><h3>Instalar los perfiles de reconocimiento</h3><p>Los perfiles de reconocimiento son archivos XML donde se estructura el conocimiento que le permite a la librería reconocer rostros sin la necesidad de mayor entrenamiento.  La versión actual de los paquetes de OpenCV en los repositorios instala estos perfiles en una ubicación que no permite que sean utilizados fácilmente desde Processing.  Los siguientes pasos corrígen esta situación.</p><p><span
style="font-family: courier new,courier;">$ sudo cp -R /usr/share/doc/opencv-doc/examples/haarcascades /usr/share/opencv/</span><br
/><span
style="font-family: courier new,courier;">$ sudo gunzip /usr/share/opencv/haarcascades/*.gz</span></p><h2><em>Sketch</em> de prueba</h2><p>Una vez instalada la librería se podrán desarrollar <em>sketches</em> con ella, a continuación se presenta el sketch mas sencillo posible que muestra la imagen proveniente de la cámara web utilizando OpenCV.</p><pre class="java">import hypermedia.video.*;
OpenCV opencv;
void setup()
{
  size(640, 480);
  opencv = new OpenCV(this);
  opencv.capture(width,height);
}
void draw()
{
    opencv.read();
    background(opencv.image());
}
</pre><h2>Enlaces</h2><ul><li>OpenCV &#8211; <em>Open Source Computer Vision</em><br
/><a
href="http://opencv.willowgarage.com/wiki/">http://opencv.willowgarage.com/wiki/</a></li><li>Librería para Processing<br
/><a
href="http://ubaa.net/shared/processing/opencv/">http://ubaa.net/shared/processing/opencv/</a></li><ul><li>Documentación del API<br
/><a
href="http://ubaa.net/shared/processing/opencv/opencv.html">http://ubaa.net/shared/processing/opencv/opencv.html</a></li></ul><li>Código fuente<br
/><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_HelloWorld.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_HelloWorld.zip</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
