Instalar OpenCV en Trisquel GNU/Linux


Hace poco en la UNIversidad me vi en la necesidad de usar OpenCV (Open Source Computer Vision Library) para un proyecto, al principio me compliqué un poco con la instalación, luego de un par de tropiezos logré que funcione correctamente y por si tal vez alguien tenga la misma duda de como realizar una correcta instalación es que escribo esta instalación en 10 pasos.

1.- Primero tenemos que instalar los paquetes necesarios para poder hacer las funciones de procesar imágenes, trabajar con vídeo, etc. Para eso instalamos los siguientes paquetes mediante el apt:

– Instalamos los paquetes necesarios para descargar, compilar y configurar el OpenCV:

apt-get install build-essential subversion libgtk2.0-dev cmake pkg-config 

– Además, instalamos una seria de bibliotecas para trabajar con el OpenCV:

apt-get install libpng12-0 libpng12-dev libpng++-dev libpng3
apt-get install libpnglite-dev libpngwriter0-dev libpngwriter0c2
apt-get install zlib1g-dbg zlib1g zlib1g-dev
apt-get install libjasper-dev libjasper-runtime libjasper1
apt-get install pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools
apt-get install libjpeg8 libjpeg62-dev libjpeg8-dbg libjpeg-progs
apt-get install ffmpeg libavcodec-dev libavcodec52 libavformat52 libavformat-dev
apt-get install libgstreamer0.10-0-dbg libgstreamer0.10-0  libgstreamer0.10-dev
apt-get install libxine1-ffmpeg libxine-dev libxine1-bin
apt-get install libunicap2 libunicap2-dev
apt-get install libdc1394-22-dev libdc1394-22 libdc1394-utils
apt-get install swig
apt-get install libv4l-0 libv4l-dev
apt-get install python-numpy 

Además de las anteriormente mencionadas instale algunas otras para que no salga error con el “cmake” que haremos mas adelante.

apt-get install libgstreamer-plugins-base0.10-dev libjpeg62-dev libswscale-dev 

2.- Entramos en la carpeta que usaremos para trabajar, en mi caso usaré la carpeta “/home/urpi/svn/” que es equivalente a “~/svn/” .

cd ~/svn/ 

3.- Luego descargamos el OpenCV, para esto tenemos dos opciones:

– Descargar la última versión de OpenCV del repositorio central (trunk):

svn co https://opencvlibrary.svn.sourceforge.net/svnroot/opencvlibrary/trunk 

– Descargar la última versión probada de OpenCV (tested):

svn co https://opencvlibrary.svn.sourceforge.net/svnroot/opencvlibrary/tags/latest_tested_snapshot 

4.- Continuaremos el ejemplo con la primera opción (la otra es similar). Entramos a la carpeta principal del proyecto descargado.

cd ~/svn/trunk/opencv/ 

5.- Creamos la carpeta “release” para ahí compilar el proyecto, luego entramos en ella.

mkdir release
cd release/ 

6.- A continuación ejecutamos “cmake” y comprobamos que no nos muestre errores para continuar con la instalación, si falta algún paquete instalarlo antes de continuar.

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON .. 

7.- Luego de que comprobamos que no hay errores continuamos compilando e instalando el OpenCV:

make
sudo make install 

8.- Para que el sistema reconozca la ruta de la biblioteca ejecutamos lo siguiente:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH 

9.- Ahora, para probar que todo salió correctamente entramos a la carpeta de los binarios ejecutables y probamos el “cxcoretest” (debería darnos todo OK):

cd bin/
./cxcoretest 

10.- Luego también podemos compilar y probar tres de los ejemplos predefinidos en C que vienen con el OpenCV:

cd ../../samples/c/
. build_all.sh

./delaunay
./facedetect lena.jpg
./bgfg_segm tree.avi 

Notas adicionales:

Desmintiendo el mito: El Software Libre no tiene soporte como el Software Privativo


Hace poco en la UNIversidad alguien mencionó en alusión al Software Libre: “si el el producto no funciona, entonces no puedo ir a un foro a gritarle al administrador que su producto es muy malo y que demando atención inmediata”.

A lo que respondí para desmentir ese mito parte por parte:

Cuando descargas algún software libre puedes proponer mejoras al software o reportar bugs, esto es algo que tienen muchos proyectos de software libre, teniendo en su mayoría una mayor rapidez de respuesta por parte de la comunidad, lo cual no sucede con los del software privativo.

1 .- En la frase se presume, al mencionar un foro, que el software se descargo de manera gratuita, ya que cuando se adquiere un servicio por parte de una empresa que representa a algún software libre, el cliente puede y debe de decir su queja a esta empresa, lo mismo que en cualquier otra.
Pregunta: “¿Si tienes una copia gratuita en el software privativo puedes ir a reclamarle a la empresa que su producto es defectuoso, o es que igualmente debes de tener un contrato con dicha empresa?”

2.- Ahora en el caso de que lo defectuoso del software sea por un error de programación y la mejora involucra el cambio de código fuente, la empresa que representa al software (ojo, no la empresa desarrolladora original necesariamente, sino la que dio el servicio) puede hacer esta modificación y mejorar el producto.
Pregunta: “¿En caso que el error fuese de programación la empresa que representa al software puede modificar el código fuente del software?”

3 .- Por ultimo en el peor de los casos que existiese un problema con la empresa que representa al software y no no se desea continuar con su servicio, se puede recurrir a otra empresa o personas, ya que al tenerse el código fuente cualquier otro desarrollador es capaz de hacer modificaciones, evitándose así la dependencia de la empresa creadora del software.
Pregunta: “En el caso que no desees adquirir el servicio de la empresa de software privativo se puede recurrir a otra empresa para que modifique el código fuente y nos arregle así el problema, o es que se genera una dependencia hacia la empresa desarrolladora?”

Por lo anteriormente mencionado con el software libre la empresas y las personas si pueden hablar de una propiedad privada, porque el software es suyo (puede hacer modificaciones, sea pagando a un desarrollador aparte o haciéndolo el mismo), dejando de ser solo un usuario al cual se le ha prestado mediante una licencia el derecho de usar el software.

Cualquier software puede tener problemas, pero el software libre permite que podamos ser independientes tecnológicamente y que podamos contribuir para avanzar en conjunto. En otras palabras el software libre es tuyo, es mio, es nuestro, es de todos.

Espero haber podido aclarar las dudas con respecto a este mito 😀 .

Trisquel GNU/Linux


Logo Trisquel GNU/Linux

Desde hace un par de meses comencé a usar Trisquel GNU/Linux y me va de maravilla :D, como comente en otro post anterior antes venia usando el gNewSense, el cual aún conservo en otra partición.

Me cambié a usar Trisquel GNU/Linux debido a que se encuentran mas actualizados los paquetes y tiene un mejor soporte para mi PC (he probado que corre con muchas portátiles), además de el hecho de ser otra de las distribuciones que trabaja para conservar la libertad de los usuarios, en otras palabras ser una distribución 100% libre :D.

Captura de Pantalla

Trisquel GNU/Linux

Descargas

El kernel Linux no es Software Libre


Primero dejar en claro que Linux es el solo nombre del kernel usado en el sistema GNU.

Este kernel Linux (en sus inicios llamado Freax, modificado posteriormente por Ari Lemmke colega de Linus Torvalds y con aceptación de este) era privativo cuando se lanzó en 1991 y en el 1992 cambia su licencia a la GNU GPL versión 2, pasando recién a ser Software Libre, pero luego en el año 1996 Linus Torvalds (creador del kernel) comienza a aceptar la inclusión de firmware que solo estuviese en formato binario, lo cual genera que con esto se acepte también firmware no-libre al kernel, esto en la actualidad ha ido creciendo y actualmente existe mas de 2MB de software no libre dentro del kernel Linux.

Logo de linux-libre

Actualemente Alexandre Oliva con la FSFLA (Fundación del Software Libre para Latinoamerica) mantine el proyecto Linux-libre (ver logo arriba) en el cual se han removido todas las partes no libres del kernel, con lo cual seguimos teniendo un kernel libre, pero ojo que el kernel linux a secas no es software libre, ya que no cumple con las cuatro libertades que son:

– La libertad de usar el programa, con cualquier propósito (libertad 0).
– La libertad de estudiar el funcionamiento del programa, y adaptarlo a las necesidades (libertad 1). El acceso al código fuente es una condición previa para esto.
– La libertad de distribuir copias, con lo que puede ayudar a otros (libertad 2).
– La libertad de mejorar el programa y hacer públicas las mejoras, de modo que toda la comunidad se beneficie (libertad 3). De igual forma que la libertad 1 el acceso al código fuente es un requisito previo.

El kernel linux-libre es el kernel que es usado en distribuciones como gNewSense, Trisquel, entre otras.

Más información en : http://www.fsfla.org/svnwiki/anuncio/2010-03-Linux-2.6.33-libre.es

Comenzando con GNU Assembler (GAS)


En estas semanas en la UNIversidad estuve viendo lo que es un poco de assembler, pero sucede que cuando se explica se usa herramientas privativas como NASM, por lo cual decidí buscar herramientas libres y encontré que existía GNU Assembler (GAS) dentro del sistema GNU, el cual usa la sintaxis de AT&T, así que decidí aprender el uso de GAS y ahora procederé a explicar un par de ejemplos.

En este articulo explicare sobre imprimir una cadena, macros y algunas otras cositas que encontré por ahí. Tener en claro que esto lo he aprendido de diferentes códigos, ya que encontré poca información en la red, así que si me equivoco en algún concepto por favor díganmelo.

Cada código para poder tenerlo como ejecutable, deberemos de ensamblarlo (volverlo a código objeto “.o”) y luego Vincularlo (volverlo ejecutable). Para esto haremos los siguientes comandos en la consola con cada ejemplo encontrado debajo.

Primero lo ensamblamos:

as –o programa.o programa.s

Segundo lo vinculamos:

ld –o programa programa.o

Al final los ejecutamos:

./programa

Ejemplo1

#Definimos el segmento de datos
.section .data
	mensaje: .ascii "Hola Urpi\n" #Definimos una variable mensaje
	longitud = . - mensaje #Definimos la longitud de mensaje

#Definimos el segmento de texto
.section .text
	.globl _start #Le damos el punto de entrada _start

_start:
	movl $longitud, %edx #Asignamos longitud a edx
	movl $mensaje,%ecx #Asignamos mensaje a edx
	movl $1,%ebx
	movl $4,%eax
	int $0x80 #Similar a la llamada 21 del MS-DOS

	#Terminamos el programa
	movl $0,%ebx
	movl $1,%eax
	int $0x80 #Llamando al kernel

En el ejemplo1 usamos la sección (similar a segmento) “data” para definir variables, dentro de la sección “text” vamos a poner el código en si, cabe notar también que ahora es movl en lugar de mov y que el orden es inverso y ahora se usa “%” antes de llamar a los registros, los comentarios se pueden hacer con “//”, “#” o “/* … */” (sin las comillas), entre algunas otras diferencias.

Ejemplo2

#Creamos un macro para definir la funcion imprimir
.macro imprimir cadena longitud
	movl \longitud,%edx
	movl \cadena,%ecx
	movl $1,%ebx
	movl $4,%eax
	int $0x80
.endm

.macro terminar
	movl $0,%ebx
	movl $1,%eax
	int $0x80 #Llamando al kernel
.endm

#Definimos el segmento de datos
.section .data
	msg_saludo: .ascii "Hola Urpi\n" #Definimos una variable mensaje
	long_saludo = . - msg_saludo #Definimos la longitud de mensaje
	msg_email: .ascii "To correo es : ovegar (at) uni (dot) pe\n"
	long_email = . - msg_email

#Definimos el segmento de texto
.section .text
	.globl _start #Le damos el punto de entrada _start

_start:
	imprimir $msg_saludo $long_saludo #Mandamos msg_saludo y long_saludo al macro imprimir
	imprimir $msg_email $long_email
	terminar #Terminamos el programa, el codigo ahora esta en el macro terminar

En el ejemplo2 ahora necesitamos imprimir dos cadenas y como usaremos código de manera repetitiva código, entonces crearemos macros que vendría a ser similar a funciones.

Se puede encontrar información para poder iniciar en esta web de IBM.

Conferencia sobre Software Libre y GNU/Linux


El día de hoy dicte una charla, sobre Software Libre y GNU/Linux, puse algunos conceptos básicos debido a lo extenso del tema y a lo reducido del tiempo. Al final regale unos CD’s y unos stickers que me regalo Richard Stallman cuando estuvo en la UNI.

Aquí les dejo la diapositiva de la conferencia, espero les guste 😀

Licencia del archivo: CC BY 2.5

Versiones para descargar: pdf

Actualizar Debian Etch a Lenny


Debian 5.0

El día 14 de Febrero del 2009 se lanzó la nueva versión de Debian, entonces decidí actualizar la versión del Debian que uso. Así que aquí les pongo los pasos para actualizar el Debian.

Primero para actualizar el Debian tenemos dos opciones, una es instalar nuevamente el Debian con los CD’s conseguidos previamente de http://www.debian.org/distrib/ , la otra es actualizar el Debian que ya poseemos. Yo mostraré el segundo ya que es lo que hice.

1.- Cambie en mi sources.list ( archivo /etc/aqt/sources.list ) modifique lo que decía etch a lenny, quedándome algo similar a esto:

deb http://ftp.br.debian.org/debian/ lenny main
deb-src http://ftp.br.debian.org/debian/ lenny main

deb http://security.debian.org/ lenny/updates main contrib
deb-src http://security.debian.org/ lenny/updates main contrib

2.- Luego de eso abrí la consola y escribí como root “apt-get update” (sin comillas) y al final me salio este mensaje (lo mismo salé con el synaptic):

There is no public key available for the following key IDs: 4D270D06F42584E6

3.- Entonces luego buscando en internet encontré que la solución para esto era agregar la llave publica solicitada, escribiendo ahora esto:

gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 4D270D06F42584E6

Saliéndome este mensaje:

gpg: requesting key F42584E6 from hkp server wwwkeys.eu.pgp.net
gpg: key F42584E6: "Lenny Stable Release Key " not changed
gpg: Total number processed: 1
gpg: unchanged: 1

4.- Luego agregamos la llave encontrada en el servidor con esto:

 

apt-key add /root/.gnupg/pubring.gpg

5.- Posteriormente de que nos sale un mensaje que dice “OK”, ya procedemos a hacer un “apt-get dist-upgrade” para actualizar los paquetes de nuestra PC.

apt-get dist-upgrade

6.- Una vez terminado los pasos anteriores ya pueden disfrutar de su nuevo Debian Lenny, algunos configuraciones cambiaron, caso mi Eclipse, Xmms (ahora Xmms2) y Gimp (desapareció :-s), pero solo es cuestión de dar pequeños arreglos, espero les sea de su agrado :D.