<?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; hardware</title>
	<atom:link href="http://www.hipergalaxia.org/blog/tag/hardware/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hipergalaxia.org/blog</link>
	<description>El conocimiento, la frontera final.</description>
	<lastBuildDate>Sun, 05 Feb 2012 03:52:47 +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>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>Problema con la interfaz de red inalámbrica Broadcom en Ubuntu: eth1 en lugar de wlan0</title>
		<link>http://blog.jorgeivanmeza.com/2011/12/problema-con-la-interfaz-de-red-inalambrica-broadcom-en-ubuntu-eth1-en-lugar-de-wlan0/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=problema-con-la-interfaz-de-red-inalambrica-broadcom-en-ubuntu-eth1-en-lugar-de-wlan0</link>
		<comments>http://blog.jorgeivanmeza.com/2011/12/problema-con-la-interfaz-de-red-inalambrica-broadcom-en-ubuntu-eth1-en-lugar-de-wlan0/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=problema-con-la-interfaz-de-red-inalambrica-broadcom-en-ubuntu-eth1-en-lugar-de-wlan0#comments</comments>
		<pubDate>Mon, 26 Dec 2011 18:08:07 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[11.10]]></category>
		<category><![CDATA[b43]]></category>
		<category><![CDATA[Broadcom]]></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[red]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49822</guid>
		<description><![CDATA[Introducción A diferencia de otros portátiles Dell que había configurado en el pasado, el mío tenía algo particular con su tarjeta de red inalámbrica.  Esta aparecía referenciada por la interfaz eth1 en lugar de la habitual wlan0.   $ iwconfig &#8230; <a href="http://blog.jorgeivanmeza.com/2011/12/problema-con-la-interfaz-de-red-inalambrica-broadcom-en-ubuntu-eth1-en-lugar-de-wlan0/">Continue reading <span>&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2><p>A diferencia de otros portátiles Dell que había configurado en el pasado, el mío tenía algo particular con su tarjeta de red inalámbrica.  Esta aparecía referenciada por la interfaz <span style="font-family: 'courier new', courier;">eth1</span> en lugar de la habitual <span style="font-family: 'courier new', courier;">wlan0</span>.  </p><p><span style="font-family: 'courier new', courier;">$ iwconfig</span></p><p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;"><strong>&#8230;<br />eth1</strong> IEEE 802.11bg ESSID:off/any </span><br /><span style="font-family: 'courier new', courier;"> Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm </span><br /><span style="font-family: 'courier new', courier;"> Retry long limit:7 RTS thr:off Fragment thr:off</span><br /><span style="font-family: 'courier new', courier;"> Power Management:off</span></p><p>A pesar de esto funcionaba aparentemente de manera correcta utilizando el driver STA, sin embargo empecé a tener problemas cuando quise hacer algunos ajustes a la interfaz así que tuve que darme a la tarea de solucionar este problema.</p><p>Como mencioné inicialmente, la tarjeta de red inalámbrica es una Broadcom BCM4312.</p><p><span style="font-family: 'courier new', courier;">$ sudo lspci -vk</span></p><p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;">08:00.0 Network controller: <strong>Broadcom Corporation BCM4312 802.11b/g <span style="text-decoration: underline;">LP-PHY</span></strong> (rev 01)</span><br /><span style="font-family: 'courier new', courier;"> Subsystem: <strong>Dell Wireless 1397 WLAN Mini-Card</strong></span><br /><span style="font-family: 'courier new', courier;"> Flags: bus master, fast devsel, latency 0, IRQ 17</span><br /><span style="font-family: 'courier new', courier;"> Memory at f0600000 (64-bit, non-prefetchable) [size=16K]</span><br /><span style="font-family: 'courier new', courier;"> Capabilities: [40] Power Management version 3</span><br /><span style="font-family: 'courier new', courier;"> Capabilities: [58] Vendor Specific Information: Len=78 &lt;?&gt;</span><br /><span style="font-family: 'courier new', courier;"> Capabilities: [e8] MSI: Enable- Count=1/1 Maskable- 64bit+</span><br /><span style="font-family: 'courier new', courier;"> Capabilities: [d0] Express Endpoint, MSI 00</span><br /><span style="font-family: 'courier new', courier;"> Capabilities: [100] Advanced Error Reporting</span><br /><span style="font-family: 'courier new', courier;"> Capabilities: [13c] Virtual Channel</span><br /><span style="font-family: 'courier new', courier;"> Capabilities: [160] Device Serial Number df-3d-0d-fd-fd-dd-0d-2d</span><br /><span style="font-family: 'courier new', courier;"> Capabilities: [16c] Power Budgeting &lt;?&gt;</span></p><h2>La situación</h2><p>Aparentemente esto se debe a la utilización del controlador incorrecto de la tarjeta de red inalámbrica.</p><h2>La solución</h2><p>Mediante la aplicación de <em>Additional Drivers</em> (<span style="font-family: 'courier new', courier;">/usr/bin/jockey-gtk</span>) desactivar el controlador STA que se venía utilizando.</p><p><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Additional-Drivers_002.png"><img class="aligncenter size-medium wp-image-49824" title="Additional Drivers_002" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Additional-Drivers_002-300x268.png" alt="" width="300" height="268" /></a></p><p>Remover los paquetes relacionados con el controlador STA (recomendado).</p><p><span style="font-family: 'courier new', courier;">$ sudo aptitude remove broadcom-sta-common broadcom-sta-source bcmwl-kernel-source</span></p><p>Instalar el <em>firmware</em> apropiado para la tarjeta de red.</p><p><span style="font-family: 'courier new', courier;">$ sudo aptitude install b43-fwcutter firmware-b43-installer</span></p><p>En mi caso resultó que la tarjeta era de bajo consumo -<em>Low-Power (LP-PHY)</em>- por lo cual recibí el siguiente mensaje de error.</p><p style="padding-left: 30px;"><span style="font-family: 'courier new', courier;">An unsupported BCM4312 Low-Power (LP-PHY) device was found.</span><br /><span style="font-family: 'courier new', courier;">Use b43 LP-PHY firmware (firmware-b43-lpphy-installer package) instead.</span></p><p>Por este motivo se deben instalar los siguientes paquetes en cambio.</p><p><span style="font-family: 'courier new', courier;">$ sudo aptitude install b43-fwcutter firmware-b43-lpphy-installer</span></p><p>Reiniciar el equipo para que sean tenidos en cuenta los cambios en la configuración recién hechos.</p><p><span style="font-family: 'courier new', courier;">$ sudo reboot</span></p><h2>La verificación</h2><p>Contrario a lo que esperaba, el nuevo controlador (b43) no aparece listado en la aplicación de <em>Additional Drivers</em>, sin embargo la interfaz ya aparece con su nombre correcto y es posible realizar la conexión a redes inalámbricas cercanas (por ejemplo utilizando el <em>NetworkManager</em>).</p><p>&nbsp;</p><p style="padding-left: 30px;"> </p> ]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2011/12/problema-con-la-interfaz-de-red-inalambrica-broadcom-en-ubuntu-eth1-en-lugar-de-wlan0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solucionando mis problemas con el modem Huawei HG530</title>
		<link>http://blog.jorgeivanmeza.com/2011/12/solucionando-mis-problemas-con-el-modem-huawei-hg530/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=solucionando-mis-problemas-con-el-modem-huawei-hg530</link>
		<comments>http://blog.jorgeivanmeza.com/2011/12/solucionando-mis-problemas-con-el-modem-huawei-hg530/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=solucionando-mis-problemas-con-el-modem-huawei-hg530#comments</comments>
		<pubDate>Fri, 16 Dec 2011 00:00:41 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Sindicados]]></category>
		<category><![CDATA[gateway]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[HG530]]></category>
		<category><![CDATA[Hipergalaxia]]></category>
		<category><![CDATA[Huawei]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Modem]]></category>
		<category><![CDATA[UNE]]></category>
		<category><![CDATA[VLAN]]></category>

		<guid isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49730</guid>
		<description><![CDATA[Introducción En el apartamento UNE me instaló un gateway Huawei HG530 ADSL.  Como es habitual en estos aparatos incluye cuatro puertos LAN para conectar mediante cable a un igual número de equipos, sin embargo los equipos que yo conectaba sólo &#8230; <a href="http://blog.jorgeivanmeza.com/2011/12/solucionando-mis-problemas-con-el-modem-huawei-hg530/">Continue reading <span>&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Introducción</h2><p>En el apartamento UNE me instaló un gateway <a href="http://www.huaweidevice.com/worldwide/productFeatures.do?pinfoId=2664&amp;directoryId=5013&amp;treeId=3342&amp;tab=0" >Huawei HG530</a> ADSL.  Como es habitual en estos aparatos incluye cuatro puertos LAN para conectar mediante cable a un igual número de equipos, sin embargo los equipos que yo conectaba sólo funcionaban en el puerto #1, los demás obtenían una dirección IP del servicio DHCP pero no conseguían acceder a Internet.</p><h2>El problema y la solución</h2><p>Anoche le dí otra oportunidad al problema y estuve revisando las opciones de configuración web del dispositivo y encontré que bajo la opción <em>Advanced</em> &gt; <em>Port Mapping</em> es posible crear una especie de VLANs entre los puertos.  Tal y como me lo entregaron los técnicos de UNE parecía contener la definición de dos VLANs, la primera incluía al puerto LAN #1 y la segunda a los demás siendo esto coherente con los síntomas analizados.</p><p><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Modem-Port-Mapping.png"><img class="aligncenter size-full wp-image-49731" title="Modem Port Mapping" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Modem-Port-Mapping.png" alt="" width="560" height="514" /></a></p><p>Para solucionar esta situación removí la segunda VLAN y agregué los puertos LAN faltantes a la primera para permitir la comunicación entre ellos, el puerto WAN y el puerto WLAN.  La configuración resultante se muestra a continuación.</p><p><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Selection_001.png"><img class="aligncenter size-full wp-image-49732" title="Selection_001" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Selection_001.png" alt="" width="565" height="578" /></a></p><p>También es conveniente verificar bajo la opción <em>Basic</em> &gt; DHCP que este servicio se encuentre activo a través de todos los puertos LAN, de lo contrario los equipos conectados en ellos no obtendrán una dirección IP de manera automática.</p><p><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Selection_002.png"><img class="aligncenter size-full wp-image-49734" title="Selection_002" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Selection_002.png" alt="" width="563" height="382" /></a></p><h2>Mejorando la seguridad</h2><p>Con sorpresa encontré que el <em>firewall</em> también venía desactivado, permitiendo establecer conexiones web y telnet para la administración del router desde Internet.  Para impedir esto se activaron las opciones bajo <em>Advanced</em> &gt; <em>Security</em>.</p><p><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Selection_0011.png"><img class="aligncenter size-full wp-image-49735" title="Selection_001" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Selection_0011.png" alt="" width="559" height="250" /></a><br />Así como las ubicadas bajo <em>Advanced</em> &gt; <em>Firewall</em>.</p><p><a href="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Selection_0021.png"><img class="aligncenter size-full wp-image-49736" title="Selection_002" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2011/12/Selection_0021.png" alt="" width="560" height="185" /></a></p> ]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2011/12/solucionando-mis-problemas-con-el-modem-huawei-hg530/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

