<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>Jorge Iván Meza Martínez &#187; Hardware</title> <atom:link href="http://blog.jorgeivanmeza.com/category/hardware/feed/" rel="self" type="application/rss+xml" /><link>http://blog.jorgeivanmeza.com</link> <description>The Fire Within Me: &#34;knowledge will set you free&#34;</description> <lastBuildDate>Tue, 31 Jan 2012 18:18:13 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Detectando movimiento con GSVideo y Processing</title><link>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-gsvideo-y-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=detectando-movimiento-con-gsvideo-y-processing</link> <comments>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-gsvideo-y-processing/#comments</comments> <pubDate>Fri, 20 Jan 2012 20:28:31 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[GSVideo]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[movimiento]]></category> <category><![CDATA[Processing]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49942</guid> <description><![CDATA[Introducción De manera análoga a como se realizó inicialmente con OpenCV, se realizó el proceso de detección de movimiento básico utilizando Processing y la librería de GSVideo instalada hace poco.  Esta librería se especializa en la captura, grabación y reproducción &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-gsvideo-y-processing/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>De manera análoga a como se realizó <a
href="http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-opencv-y-processing/">inicialmente con OpenCV</a>, se realizó el proceso de detección de movimiento básico utilizando Processing y la librería de <a
href="http://blog.jorgeivanmeza.com/2012/01/instalando-gsvideo-en-processing-bajo-gnulinux/">GSVideo instalada</a> hace poco.  Esta librería se especializa en la captura, grabación y reproducción del video mas que en su procesamiento así que la manipulación de las imágenes se realiza manualmente con las facilidades que provee el lenguaje.</p><p>En términos generales el procedimiento se basa en capturar el video proveniente de la cámara web a través de una instancia de la clase <span
style="font-family: courier new,courier;">GSCapture</span> provista por la librería GSVideo.  Cada una de las imágenes obtenidas es comparada con la imagen inmediatamente anterior.  De cada uno de sus píxeles se toma el color en forma de tripleta RGB y se determina su <em>cantidad de variación</em> utilizando la fórmula de distancia (función <a
href="http://processing.org/reference/dist_.html"><span
style="font-family: courier new,courier;">dist</span></a> en Processing).  De esta manera se determina si en ese punto específico sucedió movimiento o no y es traducido a un píxel de color blano o negro respectivamente.</p><h2>Screenshot</h2><p><div
id="attachment_49943" class="wp-caption aligncenter" style="width: 510px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_019.png"><img
class="size-large wp-image-49943" title="Workspace 1_019" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_019-1024x415.png" alt="Imagen de movmiento sobre el objetivo" width="500" height="202" /></a><p
class="wp-caption-text">Imagen de movmiento sobre el objetivo</p></div><br
/><h2>Enlaces</h2><ul><li>Código fuente<br
/><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/GSVideo_MotionImage.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/GSVideo_MotionImage.zip</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-gsvideo-y-processing/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Detectando movimiento con OpenCV y Processing</title><link>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-opencv-y-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=detectando-movimiento-con-opencv-y-processing</link> <comments>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-opencv-y-processing/#comments</comments> <pubDate>Sun, 15 Jan 2012 09:05:11 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[movimiento]]></category> <category><![CDATA[OpenCV]]></category> <category><![CDATA[Processing]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49922</guid> <description><![CDATA[Introducción Una de las características que quería aprender a implementar con OpenCV era la detección de movimiento, esto me permitirá implementar formas de interacción interesantes (y bastante simples de generar) entre el usuario y el sketch a través de la &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-opencv-y-processing/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>Una de las características que quería aprender a implementar con OpenCV era la detección de movimiento, esto me permitirá implementar formas de interacción interesantes (y bastante simples de generar) entre el usuario y el <em>sketch</em> a través de la cámara web.</p><p>En pocas palabras, la técnica para detectar movimiento que se describe a continuación se basa en generar una imagen monocromática con los píxeles que han cambiado entre dos cuadros del video.  Para hacer esto se siguen los pasos mostrados a continuación.</p><table
style="width: 617px; height: 419px;" border="0" align="center"><tbody><tr><td><ol><li>Obtener una nueva imagen de la cámara web</li><li>Invertir la imagen horizontalmente (opcional)</li><li>Calcular la diferencia entre la imagen recién obtenida y la almacenada en memoria (recordada)</li><li>Procesar la imagen para facilitar su manejo: convertirla a escala de grises, suavizar la imagen y reducir el ruido eliminando los valores demasiado altos o bajos.</li><li>Mostrar la imagen de movimiento (opcional)</li><li>Recordar la imagen actual para ser procesada nuevamente en la siguiente iteración</li></ol></td><td><p><code>opencv.read();</code></p><p><code>opencv.flip(OpenCV.FLIP_HORIZONTAL);</code></p><p><code>opencv.absDiff();</code></p><p><code>opencv.convert(OpenCV.GRAY);</code></p><p><code>opencv.blur(OpenCV.BLUR, 3);</code></p><p><code>opencv.threshold(20); </code></p><p><code>image(opencv.image(), 0, 0);</code></p><p><code>opencv.remember(OpenCV.SOURCE, OpenCV.FLIP_HORIZONTAL);  </code></p></td></tr></tbody></table><p>Para verificar si ha sucedido movimiento en una determinada área de la imagen se debe verificar si los píxeles que pertenecen a esa área se encuentran blancos (si hubo) o no.  Esta información se obtiene utilizando el método <a
href="http://processing.org/reference/PImage_get_.html"><span
style="font-family: courier new,courier;">get(int x, int y)</span></a> del objeto <a
href="http://processing.org/reference/PImage.html"><span
style="font-family: courier new,courier;">PImage</span></a> el cual retorna el <a
href="http://processing.org/reference/color_datatype.html"><span
style="font-family: courier new,courier;">color</span></a> del píxel seleccionado.  Por facilidad se recomienda que se obtenga el brillo (<a
href="http://processing.org/reference/brightness_.html"><span
style="font-family: courier new,courier;">brightness(color)</span></a>) de este píxel para su comparación.</p><p>El siguiente código revisa un área cuadrada de píxeles en búsqueda de movimiento en esa zona.</p><p><code>for(int px=x; px&lt;x+size; px++)   <br
/>    for(int py=y; py&lt;y+size; py++)      <br
/>        if (px &lt; width &amp;&amp; px &gt; 0 &amp;&amp; py &lt; height &amp;&amp; py &gt; 0)        <br
/>            if (brightness(mImage.get(px, py)) &gt; 127)<br
/>                count ++;<br
/></code></p><h2>Screenshot</h2><p><div
id="attachment_49928" class="wp-caption aligncenter" style="width: 355px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_011.png"><img
class="size-full wp-image-49928" title="Workspace 1_011" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_011.png" alt="Imagen de movmiento sobre el objetivo (modo buffer)" width="345" height="286" /></a><p
class="wp-caption-text">Imagen de movmiento sobre el objetivo (modo buffer)</p></div><p>&nbsp;</p><h2>Enlaces</h2><ul><li>Código fuente.<br
/><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_MotionImage.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_MotionImage.zip</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/detectando-movimiento-con-opencv-y-processing/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Poniendo sombreros a las personas con OpenCV y Processing</title><link>http://blog.jorgeivanmeza.com/2012/01/poniendo-sombreros-a-las-personas-con-opencv-y-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=poniendo-sombreros-a-las-personas-con-opencv-y-processing</link> <comments>http://blog.jorgeivanmeza.com/2012/01/poniendo-sombreros-a-las-personas-con-opencv-y-processing/#comments</comments> <pubDate>Fri, 13 Jan 2012 21:25:28 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[OpenCV]]></category> <category><![CDATA[Processing]]></category> <category><![CDATA[rostros]]></category> <category><![CDATA[sombreros]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49913</guid> <description><![CDATA[Introducción Como una versión un poco mas elaborada de la publicación anterior he preparado este sketch que toma el flujo de video proveniente de la cámara web,  encuentra en él los rostros de las personas y les pone un sombrero.  &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/poniendo-sombreros-a-las-personas-con-opencv-y-processing/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>Como una versión un poco mas elaborada de la <a
href="http://blog.jorgeivanmeza.com/2012/01/ubicando-caras-en-una-webcam-con-opencv-y-processing/" target="_blank">publicación anterior</a> he preparado este <em>sketch</em> que toma el flujo de video proveniente de la cámara web,  encuentra en él los rostros de las personas y les pone un sombrero.  Se incluyen diferentes sombreros que pueden cambiarse mediante el teclado.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">q</span> &#8211; terminar el <em>sketch</em><br
/><span
style="font-family: courier new,courier;">a</span> &#8211; mostrar/ocultar el rectángulo rojo alrededor de cada cara encontrada<br
/><span
style="font-family: courier new,courier;">s</span> &#8211; mostrar/ocultar la máscara sobre cada cara encontrada<br
/><span
style="font-family: courier new,courier;">z</span>/<span
style="font-family: courier new,courier;">x</span> &#8211; alternar entre las imágenes de máscaras disponibles</p><h2>Screenshots</h2><p><div
id="attachment_49914" class="wp-caption aligncenter" style="width: 368px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_006.png"><img
class="size-full wp-image-49914" title="Workspace 1_006" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_006.png" alt="Demostración con varias personas en la misma imagen" width="358" height="300" /></a><p
class="wp-caption-text">Demostración con varias personas en la misma imagen</p></div><div
id="attachment_49915" class="wp-caption aligncenter" style="width: 355px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_008.png"><img
class="size-full wp-image-49915" title="Workspace 1_008" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-1_008.png" alt="Demostración con la foto de un rostro" width="345" height="284" /></a><p
class="wp-caption-text">Demostración con la foto de un rostro</p></div><p>Agradecimientos para Martha, Diego y <a
href="http://www.jenniferconnelly.net/" target="_blank">Jennifer Connerlly</a> por participar como modelos para las fotos del artículo.</p><h2>Acerca de la ubicación de los rostros</h2><p>Hasta el momento el perfil que mejores resultados me ha dado para ubicar los rostros de las personas ha sido <span
style="font-family: courier new,courier;">OpenCV.CASCADE_FRONTALFACE_ALT_TREE</span> (<span
style="font-family: courier new,courier;">haarcascade_frontalface_alt_tree.xml</span>).  Este encuentra los rostros con el menor número de errores (identificación equivocada de un objeto inanimado como si fuera un rostro), sin embargo parece tener poca tolerancia a las variaciones de posición del rostro de las personas, si ellas agachan o rotan un poco la cara probablemente ya no serán renocidas.  Un trabajo a futuro consistirá en encontrar como mejorar estos resultados de la ubicación de rostros.</p><p>Estos son los perfiles de reconocimiento disponibles a través de OpenCV según la <a
href="http://blog.jorgeivanmeza.com/2012/01/instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12/" target="_blank">instalación que se realizó de la librería</a>.</p><p>Los siguientes perfiles se encuentran disponibles como constantes asociadas a la clase <span
style="font-family: courier new,courier;">OpenCV</span> de Processing.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">  public static final String CASCADE_FRONTALFACE_ALT_TREE</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_FRONTALFACE_ALT</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_FRONTALFACE_ALT2</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_FRONTALFACE_DEFAULT</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_PROFILEFACE</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_FULLBODY</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_LOWERBODY</span><br
/><span
style="font-family: courier new,courier;">  public static final String CASCADE_UPPERBODY</span></p><p>A continuación se listan todos los archivos XML de los perfiles de reconocimiento que también pueden ser utilizados directamente en Processing.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">  haarcascade_eye_tree_eyeglasses.xml   </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_frontalface_default.xml  </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_eyepair_small.xml  </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_upperbody.xml</span><br
/><span
style="font-family: courier new,courier;">  haarcascade_eye.xml                   </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_fullbody.xml             </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_lefteye.xml        </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_profileface.xml</span><br
/><span
style="font-family: courier new,courier;">  haarcascade_frontalface_alt2.xml      </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_lefteye_2splits.xml      </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_mouth.xml          </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_righteye_2splits.xml</span><br
/><span
style="font-family: courier new,courier;">  haarcascade_frontalface_alt_tree.xml  </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_lowerbody.xml            </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_nose.xml           </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_upperbody.xml</span><br
/><span
style="font-family: courier new,courier;">  haarcascade_frontalface_alt.xml       </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_eyepair_big.xml      </span><br
/><span
style="font-family: courier new,courier;">  haarcascade_mcs_righteye.xml </span></p><h2>Enlaces</h2><ul><li>Código fuente<br
/><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_SimpleHat.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_SimpleHat.zip</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/poniendo-sombreros-a-las-personas-con-opencv-y-processing/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Ubicando caras en una webcam con OpenCV y Processing</title><link>http://blog.jorgeivanmeza.com/2012/01/ubicando-caras-en-una-webcam-con-opencv-y-processing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ubicando-caras-en-una-webcam-con-opencv-y-processing</link> <comments>http://blog.jorgeivanmeza.com/2012/01/ubicando-caras-en-una-webcam-con-opencv-y-processing/#comments</comments> <pubDate>Fri, 13 Jan 2012 17:41:19 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[OpenCV]]></category> <category><![CDATA[personas]]></category> <category><![CDATA[Processing]]></category> <category><![CDATA[rostros]]></category> <category><![CDATA[webcam]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49901</guid> <description><![CDATA[Introducción En este sketch se aprovecha la agilidad para desarrollar en Processing con la facilidad que provee OpenCV para ubicar los rostros de las personas en el flujo de video proveniente de una cámara web.  En este caso el sketch &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/ubicando-caras-en-una-webcam-con-opencv-y-processing/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>En este <em>sketch</em> se aprovecha la agilidad para desarrollar en Processing con la facilidad que provee OpenCV para ubicar los rostros de las personas en el flujo de video proveniente de una cámara web.  En este caso el <em>sketch</em> mostrará una cara sonriente cuando se encuentra acompañado por una persona y una cara triste cuando está solo.</p><h2>Screenshots</h2><p><div
id="attachment_49902" class="wp-caption aligncenter" style="width: 540px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-2_002.png"><img
class=" wp-image-49902 " title="Workspace 2_002" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-2_002.png" alt="Sketch feliz" width="530" height="228" /></a><p
class="wp-caption-text">Sketch feliz</p></div><br
/><div
id="attachment_49910" class="wp-caption aligncenter" style="width: 540px"><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-2_003.png"><img
class="size-full wp-image-49910" title="Workspace 2_003" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/Workspace-2_003.png" alt="Sketch triste" width="530" height="228" /></a><p
class="wp-caption-text">Sketch triste</p></div></p><h2>Enlaces</h2><ul><li>Código fuente<br
/><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_SimpleHappyWithFace.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_SimpleHappyWithFace.zip</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/ubicando-caras-en-una-webcam-con-opencv-y-processing/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Instalación de la librería de OpenCV en Processing bajo GNU/Linux Mint 12</title><link>http://blog.jorgeivanmeza.com/2012/01/instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12</link> <comments>http://blog.jorgeivanmeza.com/2012/01/instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12/#comments</comments> <pubDate>Fri, 13 Jan 2012 01:00:09 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[Linux/Solaris/BSD]]></category> <category><![CDATA[GNU/Linux]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[Mint]]></category> <category><![CDATA[OpenCV]]></category> <category><![CDATA[Processing]]></category> <category><![CDATA[Ubuntu]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=49895</guid> <description><![CDATA[Introducción En el presente artículo se describirán los pasos necesarios para instalar el software de OpenCV y su correspondiente librería para desarrollar sketches con él utilizando Processing. Durante el desarrollo de la instalación se utilizó GNU/Linux Mint 12 sin emgbargo &#8230; <a
href="http://blog.jorgeivanmeza.com/2012/01/instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción</h2><p>En el presente artículo se describirán los pasos necesarios para instalar el software de <a
href="http://opencv.willowgarage.com/wiki/">OpenCV</a> y su correspondiente librería para desarrollar <em>sketches</em> con él utilizando <a
href="http://www.processing.org/">Processing</a>.</p><p>Durante el desarrollo de la instalación se utilizó GNU/Linux Mint 12 sin emgbargo el procedimiento debe ser compatible con Ubuntu.</p><p><strong>Aviso!</strong> La versión de OpenCV que se encuentra en los repositorios del sistema operativo (<span
style="font-family: courier new,courier;">2.1.0-7build1</span>) es un poco antigua, sin embargo se encontraron problemas para compilar la parte nativa de la librería con <a
href="https://launchpad.net/~gijzelaar/+archive/opencv2.3">una versión mas reciente</a>.  Por este motivo se decidió utilizar la versión disponible y experimentar posteriormente una posible actualización.</p><h2>Procedimiento</h2><h3>Instalar OpenCV</h3><p><span
style="font-family: courier new,courier;">$ sudo aptitude install libcv-dev libhighgui-dev libcvaux-dev opencv-doc</span></p><h3>Instalar la librería de Processing</h3><p><strong>Nota!</strong>  Se recomienda descargar la última versión disponible de la <a
href="http://ubaa.net/shared/processing/opencv/">página web del desarrollador</a>.  En este caso se utilizó <span
style="font-family: courier new,courier;"><a
href="http://ubaa.net/shared/processing/opencv/download/opencv_01.zip">opencv_01.zip</a></span>.</p><p>Crear el directorio donde se almacenarán las librerías de Processing del usuario.</p><p><span
style="font-family: courier new,courier;">$ mkdir -p ~/sketchbook/libraries ; cd ~/sketchbook/libraries</span></p><p>Descargar la librería y los ejemplos de la misma.</p><p><span
style="font-family: courier new,courier;">$ wget http://ubaa.net/shared/processing/opencv/download/opencv_01.zip</span><br
/><span
style="font-family: courier new,courier;">$ wget http://ubaa.net/shared/processing/opencv/download/opencv_examples.zip</span></p><p>Descomprimir los paquetes recién descargados</p><p><span
style="font-family: courier new,courier;">$ unzip opencv_01.zip</span><br
/><span
style="font-family: courier new,courier;">$ rm opencv_01.zip</span><br
/><span
style="font-family: courier new,courier;">$ unzip opencv_examples.zip</span><br
/><span
style="font-family: courier new,courier;">$ rm opencv_examples.zip</span></p><p>Ubicar correctamente el directorio con los ejemplos.</p><p><span
style="font-family: courier new,courier;">$ mv OpenCV\ examples/ OpenCV/examples</span></p><h3>Recompilar el módulo nativo de la librería</h3><p>La librería incluye una librería del sistema operativo (<span
style="font-family: courier new,courier;">libOpenCV.so</span>) enlazada dinámicamente con OpenCV.  La incluída con la distribución de la librería recién instalada fue compilada con versiones anteriores de OpenCV motivo por el cual no se cumplen sus dependencias y en el momento de compilar los <em>sketches</em> se obtiene el siguiente mensaje de error.</p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">!!! required library not found : /home/jimezam/sketchbook/libraries/OpenCV/library/libOpenCV.so: libcxcore.so.1: cannot open shared object file: No such file or directory</span><br
/><span
style="font-family: courier new,courier;">Verify that the java.library.path property is correctly set and 'libcxcore.so', 'libcv.so', 'libcvaux.so', 'libml.so', and 'libhighgui.so' are placed (or linked) in one of your system shared libraries folder</span></p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">Exception in thread "Animation Thread" java.lang.UnsatisfiedLinkError: hypermedia.video.OpenCV.capture(III)V</span><br
/><span
style="font-family: courier new,courier;">    at hypermedia.video.OpenCV.capture(Native Method)</span><br
/><span
style="font-family: courier new,courier;">    at hypermedia.video.OpenCV.capture(OpenCV.java:945)</span><br
/><span
style="font-family: courier new,courier;">    at sketch_jan12b.setup(sketch_jan12b.java:35)</span><br
/><span
style="font-family: courier new,courier;">    at processing.core.PApplet.handleDraw(Unknown Source)</span><br
/><span
style="font-family: courier new,courier;">    at processing.core.PApplet.run(Unknown Source)</span><br
/><span
style="font-family: courier new,courier;">    at java.lang.Thread.run(Thread.java:662)</span></p><p>Por este motivo es necesario recompilar el módulo nativo con las versiones actuales.  Para hacer esto se deben seguir los siguientes pasos.</p><p><span
style="font-family: courier new,courier;">$ cd ~/sketchbook/libraries/OpenCV/library/</span></p><p>Crear una copia de seguridad del módulo nativo a recompilarse.</p><p><span
style="font-family: courier new,courier;">$ mv libOpenCV.so libOpenCV.so.OLD</span></p><p>Generar la cabecera del módulo nativo de Java (JNI).</p><p><span
style="font-family: courier new,courier;">$ javah -classpath OpenCV.jar -jni hypermedia.video.OpenCV</span></p><p>Recompilar el módulo nativo.</p><p><span
style="font-family: courier new,courier;">$ g++ -shared ../source/cpp/OpenCV.cpp -o libOpenCV.so -I/usr/include/opencv/ -I/usr/lib/jvm/java-1.6.0-openjdk/include/ -I. -lcv -lhighgui -fPIC</span></p><p>Finalmente se obtienen los siguientes archivos.</p><p><span
style="font-family: courier new,courier;">$ ls -l</span></p><p
style="padding-left: 30px;"><span
style="font-family: courier new,courier;">-rw-rw-r&#8211; 1 jimezam jimezam  10748 2012-01-12 14:43 hypermedia_video_OpenCV.h</span><br
/><span
style="font-family: courier new,courier;">-rwxr-xr-x 1 jimezam jimezam  80088 2009-05-27 13:15 libOpenCV.jnilib</span><br
/><span
style="font-family: courier new,courier;">-rwxrwxr-x 1 jimezam jimezam  41953 2012-01-12 16:16 <strong>libOpenCV.so</strong></span><br
/><span
style="font-family: courier new,courier;">-rwxr-xr-x 1 jimezam jimezam  42861 2009-05-27 13:15 libOpenCV.so.OLD</span><br
/><span
style="font-family: courier new,courier;">-rwxr&#8212;&#8211; 1 jimezam jimezam 515184 2009-05-27 13:15 OpenCV.dll</span><br
/><span
style="font-family: courier new,courier;">-rw-r&#8211;r&#8211; 1 jimezam jimezam  12116 2009-05-27 13:15 OpenCV.jar</span></p><h3>Instalar los perfiles de reconocimiento</h3><p>Los perfiles de reconocimiento son archivos XML donde se estructura el conocimiento que le permite a la librería reconocer rostros sin la necesidad de mayor entrenamiento.  La versión actual de los paquetes de OpenCV en los repositorios instala estos perfiles en una ubicación que no permite que sean utilizados fácilmente desde Processing.  Los siguientes pasos corrígen esta situación.</p><p><span
style="font-family: courier new,courier;">$ sudo cp -R /usr/share/doc/opencv-doc/examples/haarcascades /usr/share/opencv/</span><br
/><span
style="font-family: courier new,courier;">$ sudo gunzip /usr/share/opencv/haarcascades/*.gz</span></p><h2><em>Sketch</em> de prueba</h2><p>Una vez instalada la librería se podrán desarrollar <em>sketches</em> con ella, a continuación se presenta el sketch mas sencillo posible que muestra la imagen proveniente de la cámara web utilizando OpenCV.</p><pre class="java">import hypermedia.video.*;
OpenCV opencv;
void setup()
{
  size(640, 480);
  opencv = new OpenCV(this);
  opencv.capture(width,height);
}
void draw()
{
    opencv.read();
    background(opencv.image());
}
</pre><h2>Enlaces</h2><ul><li>OpenCV &#8211; <em>Open Source Computer Vision</em><br
/><a
href="http://opencv.willowgarage.com/wiki/">http://opencv.willowgarage.com/wiki/</a></li><li>Librería para Processing<br
/><a
href="http://ubaa.net/shared/processing/opencv/">http://ubaa.net/shared/processing/opencv/</a></li><ul><li>Documentación del API<br
/><a
href="http://ubaa.net/shared/processing/opencv/opencv.html">http://ubaa.net/shared/processing/opencv/opencv.html</a></li></ul><li>Código fuente<br
/><a
href="http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_HelloWorld.zip">http://blog.jorgeivanmeza.com/wp-content/uploads/2012/01/OpenCV_HelloWorld.zip</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2012/01/instalacion-de-la-libreria-de-opencv-en-processing-bajo-gnulinux-mint-12/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <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/#comments</comments> <pubDate>Thu, 12 Jan 2012 16:06:07 +0000</pubDate> <dc:creator>jimezam</dc:creator> <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> ]]></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/#comments</comments> <pubDate>Thu, 12 Jan 2012 05:00:54 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[DepthCamera]]></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
class="meta-nav">&#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/#comments</comments> <pubDate>Thu, 12 Jan 2012 00:30:58 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Hardware]]></category> <category><![CDATA[DepthCamera]]></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
class="meta-nav">&#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>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/#comments</comments> <pubDate>Mon, 26 Dec 2011 18:08:07 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Hardware]]></category> <category><![CDATA[Linux/Solaris/BSD]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[11.10]]></category> <category><![CDATA[b43]]></category> <category><![CDATA[Broadcom]]></category> <category><![CDATA[GNU/Linux]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[Mint]]></category> <category><![CDATA[red]]></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
class="meta-nav">&#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>1</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/#comments</comments> <pubDate>Fri, 16 Dec 2011 00:00:41 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Hardware]]></category> <category><![CDATA[Internet]]></category> <category><![CDATA[gateway]]></category> <category><![CDATA[HG530]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[Huawei]]></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
class="meta-nav">&#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" target="_blank">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>
