<?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>HiperGalaxia &#187; Desarrollo de software</title>
	<atom:link href="http://www.hipergalaxia.org/blog/tag/desarrollo-de-software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hipergalaxia.org/blog</link>
	<description>El conocimiento, la frontera final.</description>
	<lastBuildDate>Fri, 10 Feb 2012 09:55:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<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/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=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[Sindicados]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[GSVideo]]></category>
		<category><![CDATA[hardware]]></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>&#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> </p>]]></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/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=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[Sindicados]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[GStreamer]]></category>
		<category><![CDATA[GSVideo]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[Linux/Solaris/BSD]]></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>&#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/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=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[Sindicados]]></category>
		<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>&#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><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/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=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[Sindicados]]></category>
		<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>&#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/" >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><p>Agradecimientos para Martha, Diego y <a href="http://www.jenniferconnelly.net/" >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/" >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/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=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[Sindicados]]></category>
		<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>&#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/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=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[Sindicados]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[Linux/Solaris/BSD]]></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>&#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><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> ]]></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>
		<item>
		<title>Utilizar la cámara infraroja (IR) del Kinect utilizando Processing</title>
		<link>http://blog.jorgeivanmeza.com/2012/01/utilizar-la-camara-infraroja-ir-del-kinect-utilizando-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=utilizar-la-camara-infraroja-ir-del-kinect-utilizando-processing</link>
		<comments>http://blog.jorgeivanmeza.com/2012/01/utilizar-la-camara-infraroja-ir-del-kinect-utilizando-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=utilizar-la-camara-infraroja-ir-del-kinect-utilizando-processing#comments</comments>
		<pubDate>Thu, 12 Jan 2012 16:06:07 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[IR]]></category>
		<category><![CDATA[Kinect]]></category>
		<category><![CDATA[OpenNI]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[Simple-OpenNI]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49891</guid>
		<description><![CDATA[Introducción Así como inicialmente se accedió a las imágenes RGB (convencional) y de profundidad de las cámaras del Kinect, también es posible acceder a la información proporcionada por la cámara infraroja con la misma facilidad. Screenshot Enlaces Código fuentehttp://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_IRCamera.zip]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2><p>Así como <a href="http://blog.jorgeivanmeza.com/2012/01/prueba-de-las-camaras-del-kinect-utilizando-processing/">inicialmente</a> se accedió a las imágenes RGB (convencional) y de profundidad de las cámaras del Kinect, también es posible acceder a la información proporcionada por la cámara infraroja con la misma facilidad.</p><h2>Screenshot</h2><p><div id="attachment_49892" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_IRCamera_002.png"><img class="size-large wp-image-49892" title="OpenNI_IRCamera_002" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_IRCamera_002-1024x404.png" alt="Imagen de profundidad | Imagen infraroja" width="500" height="197" /></a><p class="wp-caption-text">Imagen de profundidad | Imagen infraroja</p></div><br /><h2>Enlaces</h2><ul><li>Código fuente<br /><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_IRCamera.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_IRCamera.zip</a></li></ul> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/utilizar-la-camara-infraroja-ir-del-kinect-utilizando-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Búsqueda del punto mas cercano con el Kinect utilizando Processing y Simple-OpenNI</title>
		<link>http://blog.jorgeivanmeza.com/2012/01/busqueda-del-punto-mas-cercano-con-el-kinect-utilizando-processing-y-simple-openni/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=busqueda-del-punto-mas-cercano-con-el-kinect-utilizando-processing-y-simple-openni</link>
		<comments>http://blog.jorgeivanmeza.com/2012/01/busqueda-del-punto-mas-cercano-con-el-kinect-utilizando-processing-y-simple-openni/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=busqueda-del-punto-mas-cercano-con-el-kinect-utilizando-processing-y-simple-openni#comments</comments>
		<pubDate>Thu, 12 Jan 2012 05:00:54 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[DepthCamera]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[Kinect]]></category>
		<category><![CDATA[OpenNI]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[Simple-OpenNI]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49877</guid>
		<description><![CDATA[Introducción El siguiente paso lógico consiste en identificar cual es el punto mas cercano al Kinect, presumiblemente el usuario que interactúa con el sketch, para utilizar este valor como coordenada de entrada. Su implementación se reduce simplemente a recorrer el &#8230; <a href="http://blog.jorgeivanmeza.com/2012/01/busqueda-del-punto-mas-cercano-con-el-kinect-utilizando-processing-y-simple-openni/">Continue reading <span>&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2><p>El siguiente paso lógico consiste en identificar cual es el punto mas cercano al Kinect, presumiblemente el usuario que interactúa con el <em>sketch</em>, para utilizar este valor como coordenada de entrada.</p><p>Su implementación se reduce simplemente a recorrer el mapa de profundidad de alta resolución (<span style="font-family: courier new,courier;">context.depthMap()</span>) que provee la cámara de profundidad y obtener de allí la coordenada cuyo valor sea menor pero mayor a cero ya que este corresponde a las áreas no medidas.  Para mayores detalles acerca de la implementación referirse a la función <span style="font-family: courier new,courier;">int[] findClosestPoint(int, int)</span>.</p><p>Para hacerlo un poco mas interesante se agregaron dos barras de desplazamiento en la parte inferior que sirven para limitar la profundidad de los objetos que van a ser realmente tenidos en cuenta en la determinación del punto mas cercano, esto con el fin de aislar otras zonas de acuerdo a su distancia que no quieran ser tenidas en cuenta y puedan estar produciendo interferencia.  Hacia la izquierda de las barras de desplazamiento la distancia es menor (mas cerca del Kinect) y hacia la derecha la distancia crece (se aleja del Kinect).</p><p>Basado en esta característica se agregó la funcionalidad de aislar las porciones de la imagen de los objetos que no se encuentran ubicados en el rango de profundidad válido.  Para conmutar entre imagen completa e imagen parcial sólo es necesario presionar la letra '<span style="font-family: courier new,courier;">t</span>' (<em>toggle</em>) en el <em>sketch</em>.</p><h2>Screenshot</h2><div id="attachment_49878" class="wp-caption aligncenter" style="width: 530px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_findClosestPoint_008.png"><img class=" wp-image-49878 " title="OpenNI_findClosestPoint_008" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_findClosestPoint_008.png" alt="Punto mas cercano al Kinect filtrado por un rango de distancia" width="520" height="428" /></a><p class="wp-caption-text">Punto mas cercano al Kinect filtrado por un rango de distancia</p></div><div id="attachment_49883" class="wp-caption aligncenter" style="width: 530px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_findClosestPoint_002.png"><img class=" wp-image-49878 " title="OpenNI_findClosestPoint_002" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_findClosestPoint_002.png" alt="Separación de la imagen mostrando sólo los objetos ubicados en la distancia válida" width="520" height="428" /></a><p class="wp-caption-text">Separación de la imagen mostrando sólo los objetos ubicados en la distancia válida</p></div><h2>Enlaces</h2><ul><li>Código fuente<br /><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_findClosestPoint.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_findClosestPoint.zip</a></li></ul> ]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/busqueda-del-punto-mas-cercano-con-el-kinect-utilizando-processing-y-simple-openni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prueba de las cámaras del Kinect utilizando Processing</title>
		<link>http://blog.jorgeivanmeza.com/2012/01/prueba-de-las-camaras-del-kinect-utilizando-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=prueba-de-las-camaras-del-kinect-utilizando-processing</link>
		<comments>http://blog.jorgeivanmeza.com/2012/01/prueba-de-las-camaras-del-kinect-utilizando-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=prueba-de-las-camaras-del-kinect-utilizando-processing#comments</comments>
		<pubDate>Thu, 12 Jan 2012 00:30:58 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[DepthCamera]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[Kinect]]></category>
		<category><![CDATA[OpenNI]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[RGBCamera]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49869</guid>
		<description><![CDATA[Introducción Este sketch es una demostración simple del uso de las cámaras del Kinect utilizando Processing y la librería Simple-OpenNI.  Se incluyen las siguientes características. Mostrar las imágenes provenientes de la cámara de profundidad Mostrar las imágenes provenientes de la &#8230; <a href="http://blog.jorgeivanmeza.com/2012/01/prueba-de-las-camaras-del-kinect-utilizando-processing/">Continue reading <span>&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2><p>Este <em>sketch</em> es una demostración simple del uso de las cámaras del Kinect utilizando Processing y la librería Simple-OpenNI.  Se incluyen las siguientes características.</p><ul><li>Mostrar las imágenes provenientes de la cámara de profundidad</li><li>Mostrar las imágenes provenientes de la cámara RGB (video convencional)</li><li>Mostrar la información de color/brillo de un punto específico de una imagen</li><li>Calcular la distancia física entre la cámara y el punto elegido en el mundo real.</li></ul><h2>Requisitos</h2><ol><li>Librería OpenNI<br /><a href="http://blog.jorgeivanmeza.com/2011/12/instalacion-openni-sensor-kinect-y-nite-en-gnulinux-ubuntu-11-10-desde-fuentes/">http://blog.jorgeivanmeza.com/2011/12/instalacion-openni-sensor-kinect-y-nite-en-gnulinux-ubuntu-11-10-desde-fuentes/</a></li><li>Librería Simple-OpenNI para Processing<br /><a href="http://blog.jorgeivanmeza.com/2012/01/construccion-de-la-libreria-simple-openni-para-processing-bajo-ubuntu-de-32-bits/">http://blog.jorgeivanmeza.com/2012/01/construccion-de-la-libreria-simple-openni-para-processing-bajo-ubuntu-de-32-bits/</a></li><li>Processing<br /><a href="http://www.processing.org/">http://www.processing.org/</a></li></ol><h2>Screenshot</h2><p><div id="attachment_49870" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_DepthCamera_005.png"><img class="size-large wp-image-49870" title="OpenNI_DepthCamera_005" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_DepthCamera_005-1024x404.png" alt="Demostración imágenes de profundidad y RGB" width="500" height="197" /></a><p class="wp-caption-text">Demostración imágenes de profundidad y RGB</p></div></p><p>Al hacer clic izquierdo sobre cualquiera de las imágenes se obtiene información del color/brillo del pixel seleccionado y en el caso de la imagen de profundidad se obtiene además el cálculo de la distancia física entre la cámara y el punto elegido en el mundo real.</p><p style="padding-left: 30px;"><span style="font-family: courier new,courier;">Bright: r = 175</span><br /><span style="font-family: courier new,courier;">Distance: 2443 mm/96.18111 inches</span></p><p style="padding-left: 30px;"><span style="font-family: courier new,courier;">Bright: r = 81</span><br /><span style="font-family: courier new,courier;">Distance: 2609 mm/102.71654 inches</span></p><p style="padding-left: 30px;"><span style="font-family: courier new,courier;">Color: r = 49; g = 66; blue = 51</span></p><p style="padding-left: 30px;"><span style="font-family: courier new,courier;">Color: r = 73; g = 53; blue = 11</span></p><h2>Enlaces</h2><ul><li>Código Fuente<br /><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_DepthCamera.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenNI_DepthCamera.zip</a></li></ul> ]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/prueba-de-las-camaras-del-kinect-utilizando-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construcción de la librería Simple-OpenNI para Processing bajo Ubuntu de 32 bits</title>
		<link>http://blog.jorgeivanmeza.com/2012/01/construccion-de-la-libreria-simple-openni-para-processing-bajo-ubuntu-de-32-bits/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=construccion-de-la-libreria-simple-openni-para-processing-bajo-ubuntu-de-32-bits</link>
		<comments>http://blog.jorgeivanmeza.com/2012/01/construccion-de-la-libreria-simple-openni-para-processing-bajo-ubuntu-de-32-bits/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=construccion-de-la-libreria-simple-openni-para-processing-bajo-ubuntu-de-32-bits#comments</comments>
		<pubDate>Wed, 11 Jan 2012 21:52:41 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux/Solaris/BSD]]></category>
		<category><![CDATA[Mint]]></category>
		<category><![CDATA[NITE]]></category>
		<category><![CDATA[OpenNI]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49860</guid>
		<description><![CDATA[Introducción Simple-OpenNI es una librería de Processing que actúa como un recubrimiento (wrapper) para utilizar fácilmente OpenNI desde este lenguaje de programación. La distribución binaria de esta librería puede ser descargada directamente desde el sitio web del proyecto.  En el &#8230; <a href="http://blog.jorgeivanmeza.com/2012/01/construccion-de-la-libreria-simple-openni-para-processing-bajo-ubuntu-de-32-bits/">Continue reading <span>&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2><p><a href="http://code.google.com/p/simple-openni/">Simple-OpenNI</a> es una librería de <a href="http://www.processing.org/">Processing</a> que actúa como un recubrimiento (<em>wrapper</em>) para utilizar fácilmente <a href="http://openni.org/">OpenNI</a> desde este lenguaje de programación.</p><p>La distribución binaria de esta librería puede ser descargada directamente desde el <a href="http://code.google.com/p/simple-openni/downloads/list">sitio web del proyecto</a>.  En el presente artículo se describirán los pasos necesarios para construír esta librería a partir de su distribución de fuentes lo cual resulta interesante para garantizar compatibilidad con las versiones de las librerías nativas instaladas y mantener la última versión disponible, así como utilizar arquitecturas cuyas distribuciones binarias no se encuentren disponibles.</p><h2>Prerequisitos</h2><p>Para poder construír la librería bajo GNU/Linux Ubuntu es necesario contar con los siguientes requisitos previamente instalados.</p><ol><li><a href="http://blog.jorgeivanmeza.com/2011/12/instalacion-openni-sensor-kinect-y-nite-en-gnulinux-ubuntu-11-10-desde-fuentes/">OpenNI y NITE</a></li><li>Java Development Kit.<br /><span style="font-family: courier new,courier;">$ sudo aptitude install openjdk-6-jdk openjdk-6-jre openjdk-6-jre-headless openjdk-6-jre-lib</span> <br />Activar la versión recién instalada:<span style="font-family: courier new,courier;"> /usr/lib/jvm/java-6-openjdk/jre/bin/java<br />$ sudo update-alternatives &#8211;config java</span></li><li>CMake<br /><span style="font-family: courier new,courier;">$ sudo aptitude install cmake</span></li><li>Swig &gt;= v2.0.2<br /><span style="font-family: courier new,courier;">$ sudo aptitude install swig</span></li><li>Eigen &gt;= v3.0<br /><span style="font-family: courier new,courier;">$ sudo aptitude install libeigen3-dev</span></li><li>Boost &gt;= v1.46 (<em>use the static build</em>) <br /><span style="font-family: courier new,courier;">$ sudo aptitude install libboost-all-dev</span></li></ol><h2>Procedimiento</h2><p>Obtener la última versión del código fuente de la librería.</p><p><span style="font-family: courier new,courier;">$ svn checkout http://simple-openni.googlecode.com/svn/trunk/ simple-openni-read-only</span></p><p><span style="font-family: courier new,courier;">$ cd simple-openni-read-only/SimpleOpenNI/</span></p><p>Ajustar el <em>script</em> de construcción modificando la invocación a <span style="font-family: courier new,courier;">cmake</span> de la siguiente manera.  (Ajustar las rutas que se consideren convenientes, en especial a <span style="font-family: courier new,courier;">DP5_JAR</span>)</p><p><span style="font-family: courier new,courier;">$ vi buildLinux32.sh</span></p><p style="padding-left: 30px;">(actualizar)</p><p style="padding-left: 30px;"><code> cmake -DOPEN_NI_INCLUDE=/usr/include/ni/ \ <br />      -DXN_NITE_INCLUDE=/usr/include/nite/ \ <br />      -DXN_NITE_LIB=/usr/lib/ \ <br />      -DEIGEN3D_INCLUDE=/usr/include/eigen3/ \ <br />      -DP5_JAR=~/Processing/2.0a4/lib/core.jar \ <br />      -JAVA_INCLUDE_PATH=/usr/lib/jvm/java-6-openjdk/include/ \ <br />      -JAVA_INCLUDE_PATH2=/usr/lib/jvm/java-6-openjdk/include/linux \ <br />      .. </code></p><p>Realizar la construcción de la librería.</p><p><span style="font-family: courier new,courier;">$ ./buildLinux32.sh</span></p><p>Instalar la librería recién construída.</p><p><span style="font-family: courier new,courier;">$ ./installLinux.sh</span></p><h2>Verificar la instalación de la librería</h2><p>El procedimiento anterior construye e instala la librería de Simple-OpenNI bajo <span style="font-family: courier new,courier;">~/sketchbook/libraries/SimpleOpenNI/</span> dejándola lista para ser utilizada con Processing.</p><p><span style="font-family: courier new,courier;">$ tree -d ~/sketchbook/libraries/SimpleOpenNI/</span></p><p style="padding-left: 30px;"><span style="font-family: courier new,courier;">/home/jimezam/sketchbook/libraries/SimpleOpenNI/</span><br /><span style="font-family: courier new,courier;">├── documentation</span><br /><span style="font-family: courier new,courier;">│   ├── resources</span><br /><span style="font-family: courier new,courier;">│   └── SimpleOpenNI</span><br /><span style="font-family: courier new,courier;">├── examples</span><br /><span style="font-family: courier new,courier;">│   ├── eclipse</span><br /><span style="font-family: courier new,courier;">│   ├── Nite</span><br /><span style="font-family: courier new,courier;">│   │   ├── CircleCtrl</span><br /><span style="font-family: courier new,courier;">│   │   ├── Hands</span><br /><span style="font-family: courier new,courier;">│   │   └── Slider2d</span><br /><span style="font-family: courier new,courier;">│   └── OpenNI</span><br /><span style="font-family: courier new,courier;">│       ├── AlternativeViewpoint3d</span><br /><span style="font-family: courier new,courier;">│       ├── DepthImage</span><br /><span style="font-family: courier new,courier;">│       ├── DepthImageXml</span><br /><span style="font-family: courier new,courier;">│       │   └── data</span><br /><span style="font-family: courier new,courier;">│       ├── DepthInfrared</span><br /><span style="font-family: courier new,courier;">│       ├── DepthMap3d</span><br /><span style="font-family: courier new,courier;">│       ├── Hands3d</span><br /><span style="font-family: courier new,courier;">│       ├── MultiCam</span><br /><span style="font-family: courier new,courier;">│       ├── RecorderPlay</span><br /><span style="font-family: courier new,courier;">│       ├── Scene</span><br /><span style="font-family: courier new,courier;">│       ├── SceneDepth</span><br /><span style="font-family: courier new,courier;">│       ├── Threaded</span><br /><span style="font-family: courier new,courier;">│       ├── User</span><br /><span style="font-family: courier new,courier;">│       ├── User3d</span><br /><span style="font-family: courier new,courier;">│       ├── User3dCallback</span><br /><span style="font-family: courier new,courier;">│       ├── UserSaveCalib</span><br /><span style="font-family: courier new,courier;">│       └── UserScene3d</span><br /><span style="font-family: courier new,courier;">└── library</span></p><h2>Enlaces</h2><ul><li>simple-openni &#8211; A simple OpenNI wrapper for processing<br /><a href="http://code.google.com/p/simple-openni/">http://code.google.com/p/simple-openni/</a></li></ul><ul><li>Downloads<br /><a href="http://code.google.com/p/simple-openni/downloads/list">http://code.google.com/p/simple-openni/downloads/list</a></li><li>How to Build<br /><a href="http://code.google.com/p/simple-openni/wiki/HowToBuild">http://code.google.com/p/simple-openni/wiki/HowToBuild</a></li></ul> ]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/construccion-de-la-libreria-simple-openni-para-processing-bajo-ubuntu-de-32-bits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

