Saturday, January 19, 2013

Cubieboard + OpenCV


¿Qué es la visión artificial?

Cuando un ordenador procesa una imagen, no entiende lo que realmente se ve en ella.
Pero y si necesitamos detectar una persona, o una cara en concreto, o un objeto, o seguir un color, o encontrar una forma, interpretar lo que vemos, etc.
De todo esto se encarga la visión artificial.

¿Cómo aplicamos la visión artificial?

Bueno aquí es donde viene en nuestra ayuda OpenCV, es un conjunto de librerías que nos permite abstraer al programador de la parte más laboriosa de la programación y utilizar funciones ya preparadas para todas las necesidades que tengamos.
Hay posibles instalaciones para Linux, android, windows, ios

Instalando OpenCV


He sacado toda la información técnica de este blog, muy bueno, no solo por este artículo sino por muchos otros.

Fuente: http://mitchtech.net/raspberry-pi-opencv
Fuente: http://docs.opencv.org/doc/tutorials/introduction/linux_install/linux_install.html#linux-installation

Raspbian : Linux raspberrypi 3.4.19-a10-aufs+
OpenCV: OpenCV-2.4.3.tar.bz2 (os recomiendo entrar y descargar la última versión)
http://OpenCV.org

¿Quizas antes de hacer la instalación deberías decidir si libjpeg o libjpeg-turbo?
May be if you are reading this you should to think libjpeg or libjpeg-turbo?
  1. ¿Dónde vamos a hacer la instalación?
    1. Tarjeta ¿Hay espacio?, Con 2 GB suficiente pero mejor una de 8GB (que luego ya iremos necesitando)

      S.ficheros     Tamaño Usados  Disp Uso% Montado en
      rootfs           7,3G   1,5G  5,5G  22% /


      NOTA: Se hace un poco lenta, pero funciona

      ¿Por qué sobre la tarjeta? En el futuro quiero que esta placa sea el "razonador lógico" (no me gusta la definición inteligencia artificial), además de portátil debe consumir poco y un disco duro por muy ligero que sea, tiene un consumo muy alto para baterías (1A a 5 V)
  2. Descargar la última versión
    1. Yo instale esta OpenCV-2.4.3.tar.bz2  de todas formas buscar la última versión.
  3. Dependencias
    Bueno para hacer la instalación necesitamos hacer nuestra máquina con una base de herramientas necesarias. Describir cada una de ellas se escapa de este blog, pero las más interesante es cmake que nos permitirá configurar nuestra compilación e instalación.

    sudo apt-get -y install build-essential cmake pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools

    sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev python-numpy libpython2.6 python-dev python2.6-dev libgtk2.0-dev pkg-config
  4. Ahora vamos por pasos a instalar
    1. Nuestro directorio OpenCV con su versión OpenCV-2.4.3.tar.bz2

      tar -xvjpf OpenCV-2.4.3.tar.bz2
      rm OpenCV-2.4.3.tar.bz2
      cd OpenCV-2.4.3.tar.bz2
      mkdir build
      cd build

    2. Preconfigurando la compilación
      Con esto le diremos que nos compile lo que necesitemos, con este se crea una instalación bastante estándar, además de instalar el soporte para python


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

      make
      sudo make install

  5. Últimos pasos
    1. Unas configuraciones para indicar las bibliotecas y librerías.

      $ sudo vi /etc/ld.so.conf.d/opencv.conf

      Si no existe lo creamos y añadimos la siguiente línea

      /usr/local/lib

      Configuramos el enlace dinámico de las librerías

      $sudo ldconfig -v

    2. Configuramos el sistema de bashrc de modo global

      sudo vi /etc/bash.bashrc
      Y añadimos la siguiente línea

      PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
  6. Probando OpenCV
    1. Nos vamos al directorio de ejemplos de C
      ~/OpenCV/OpenCV-2.4.3/build/bin

      convexhull

      kmeans

      drawing

Hull

Cluster


Dibujos



Siguientes pasos

Wednesday, January 9, 2013

Vaso Medio lleno, vaso medio vacio, o ... sobra vaso

Bueno ahora ya hemos visto que nuestra cubieboard es más lenta en procesamiento que un dos nucleos (cielos y tanto estudiar para esto :S)
¿Pero eso realmente significa que es malo ?

¿ Realmente cuanta potencia necesito ?

Para contestar esa pregunta hay que hacer otra pregunta.

¿Qué vamos a hacer ?

Algún ejemplo
Por ejemplo el software de  cabina del space shutthle (1981) (transbordador espacial ) funcionaba con un intel 8086 y luego fue un 80386.
Los equipos de la estación internacional espacial (ISS) usan para los comandos  un 80386.
http://www.gratisprogramas.org/descargar/los-cpu-de-las-naves-espaciales-computadoras-en-el-espacio/

Ahora si queremos jugar al Angrybirds igual necesitamos algo más.

¿Qué voy a hacer?

Una vez visto los ejemplos me tendré que centrar en lo que yo quiero hacer.
  1. Visión artificial con Opencv (umm igual se me queda corto, pero estamos hablando de una plataforma de estudio)
  2. Manejo y comunicación con arduinos
  3. Estudiar temas de Inteligencia artificial para problemas racionales. (aquí estoy algo verde)
Bueno pues ya tengo tarea para estudiar.
Iré poniendo los temas de las cosas que vaya aprendiendo.

¿Que tarjeta de memoria le pongo?

Tarjeta de memoria.

Bueno tenemos que hacernos con una tarjeta microSD para empezar, pero cual.

Por casa tenía una tarjeta de 8GB clase 4, pero siempre uno quiere algo más de velocidad, así que compre una tarjeta Sandisk Ultra 16GB y ejecute una prueba de velocidad de acceso a la tarjeta.

8 GB Clase 4

16GB  Clase 10 UHS-I
Así que la velocidad que ganamos es, ummm no mucha, pero bueno es más grande y ya puedo empezar a cargar al Raspbian de cosas, pero lo mejor será en pensar en un disco duro.

NOTA: Al instalar Linux no se pierde la memoria NAND donde está Android


Problemas(más vale tarjeta vieja que arranca, que nueva y rápida que no arranca)

No todo el monte es orégano, la nueva tarjeta de Sandisk Ultra 16GB, tiene un comportamiento anómalo.

Instalo sin problemas el berryboot, y luego raspbian, pero una vez terminada la instalación no permite arrancar, viendo por foros he visto que no soy el único

En la comunidad de Cubieboard en google+ se ha comentado y la verdad he tenido que darles la razón, cambiando de tarjeta funciona y como la tarjeta de 8GB y clase 4, tampoco es que de un peor resultado apreciable, continuaremos con la tarjeta "antigua"

Más benchmarks, más benchmarks es la guerra

Más benchmarks (ahora son de Android)

Bueno vamos a ver de que equipo disponemos y hasta donde podremos llegar con él.

Tenemos que saber de que potencia de procesamiento hablamos así que he corrido un par de benchmarks propios de android.
(los podéis encontrar en el playstore)



Bueno parece que no sale muy bien parada nuestra cubieboard, pero eso lo veremos más adelante.
Cubieboard:3295

Motorola Razr: 8026



















Bueno parece que la cubieboard (1 nucleo) es algo menos potente que  mi Motorola razr (2 nucleos), pero eso no significa gran cosa.

Cubieboard

Motorola Razr

Raspberry PI vs Cubieboard


Como en informática uno nunca es el único que hace las cosas, que encuentra un problema, o que da con una solución, pero la base si está en compartir.

Aquí os dejo un enlace calentito de hace unos días (09/01/2013) de una comparativa entre raspberry pi y cubieboard, que encontré en el foro de Cubieboard



Cubie Board quick look, compared to Raspberry Pi
Merçi Alexandre Bulté

Pero ¿ cómo está vaso? ¿ medio lleno,  medio vacío o me sobra vaso ?

Saturday, January 5, 2013

Primeras pruebas

Probando, probando 1,2,3.....¿Cuántos Kflops?

Bueno, ya tenemos todo instalado ahora vamos a probar que tenemos entre manos.


¿Qué equipo tengo ?

Vamos probando un lscpu
 
pi@raspberrypi ~ $ lscpu
Architecture:            armv7l
Byte Order:               Little Endian
CPU(s):                        1
On-line CPU(s) list:  0
Thread(s) per core: 1
Core(s) per socket:   1
Socket(s):                    1

¿Y de memoria? ¿Cómo ando?

pi@raspberrypi ~ $ cat /proc/meminfo
MemTotal:         834892 kB
MemFree:          381636 kB
Buffers:           85808 kB
Cached:           285972 kB

¿Y si nos marcamos un benchmark ?

Vamos a hacernos unas cuantas operaciones algo rapidito, que hay cosas que hacer.

Con la aplicación de HardInfo de linux :) saldremos del paso, y así podremos comparar con ordenadores conocidos.


CPU Blowfish

 Cubieboard    1000 MHz     46,346
I3    1197 MHz        4,009
Intel(R) Celeron(R) M processor 1.50GHz (null)  26.1876862
PowerPC 740/750 (280.00MHz)     (null)  172.816713
 (medido en segundos, mejor cuanto más bajos)

CPU Fibonacci

Cubieboard    1000 MHz     14,525
I3    1197 MHz        2,796
Intel(R) Celeron(R) M processor 1.50GHz (null)  8.1375674
PowerPC 740/750 (280.00MHz)     (null)  58.07682
 (medido en segundos, mejor cuanto más bajos)

Bueno si lo comparamos con un celeron no está tan mal
Aunque parezca poca cosa, estamos hablando de un buen procesamiento, seguro que podremos sacarle mucho jugo y como plataforma de estudio está muy bien.

Instalando Linux 2/2

Instalación de Linux

Partimos del paso anterior, donde habíamos instalado el berryboot (gestor de arranque ) en nuestra tarjeta uSD.
Hacemos reset a nuestra cubieboard (dejando la tarjeta insertada) y nos arrancará el gestor berryboot
  1. Arrancamos con la tarjeta uSD
  2. Nos arranca el berryboot para hacer la primera instalación. (se pueden tener varias distribuciones de Linux en una misma tarjeta)
  3. Configurar el acceso a internet (en mi caso fue la wifi)
  4. Nos pide sobre que soporte vamos a hacer la instalación, usaremos la uSD.
  5. Nos da a elegir entre una serie de distribuciones, según nuestras necesidades.
  6. Yo elegí por tema de programación y sistemas la raspbian, la versión de Debian para raspberry
  7. Nos descargará la distribución elegida y nos la instalará en nuestra tarjeta.
  8. y a disfrutar

Se puede conectar vía wifi

¿Cuál elijo ? :|

La guardamos en la tarjeta


Esperamos, pero no mucho

y voilá, aquí tenemos nuestra raspbian

Arrancando
Raspbian en la cubieboard

 

Instalando un Linux parte 1/2

Introducción.

La placa ya viene de serie con un Android (4.0.4) que ya nos permitiría que una televisión normal se convierta en un smart TV, se le puede añadir wifi sin problemas, teclado y ratón inalámbricos y a disfrutar.

Pero, ¿ si queremos más ? ¿Y sí necesitamos programar ?, si queremos algo más que un simple Android. Pues nada a instalar Linux :)

Para gestionar el arranque de nuestro sistema Linux dentro de la cubieboard, se hace necesario la instalación de un sistema que nos permita seleccionar desde donde arrancamos, y como instalamos la distribución de Linux que nos interese, esa herramienta, es el berryboot

Requisitos

  1. La cubieboard
  2. Tarjeta uSD al menos 4 GB (yo use para la prueba una de 8GB clase 4, la cambiaré por una de 16 o 32 GB clase 10)
  3. Conexión a internet
  4. Leer bien la información, yo saqué la información de esta página, es muy buena.http://www.cnx-software.com/2012/12/09/cubieboard-unboxing-and-quick-start-guide

Instalando Berryboot (gestor de arranque e instalación)

El paso inicial será utilizar el berryboot que nos permitirá gestionar la instalación. (en el link está toda la información sobre berryboot)
Podemos usar nuestro Android preinstalado o nuestro ordenador, y una vez instalado el berryboot, nos hará como un gestor de arranque mejorado, donde podremos elegir con que sistema operativo queremos arrancar o instalar alguno nuevo.

Android

  Pasos para instalar el berryboot desde android.

  1. Arrancar nuestra cubieboard y esperar a que cargue Android
  2. Meter nuestra uSD formateada
  3. Instalar berryboot.apk
    1. Poner este enlace en el navegador de android "http://get.berryboot.com/"
  4. Nos descargamos la aplicación berryboot.apk
  5. Ejecutamos
  6. Y seguimos las instrucciones, esto nos formateará la tarjeta e instalara el berryboot como gestor de arranque





PC (Linux, Mac, Windows)

Nota: toda la instalación está hecha con Linux (Linux 3.2.0-23-generic) en 64 bits, pero lo pondré en genérico para que hagamos los pasos independientemente de nuestro sistema operativo.
  1. Insertamos nuestra tarjeta uSD 4GB o mayor.
  2. Descargamos la imagen del berryboot. Berryboot-cubieboard-beta1.zip” desde http://www.berryterminal.com/doku.php/berryboot_a10
  3. Quemamos la imagen en la microSD
    1. Windows
      1. Utilizar Win32DiskImager.exe para pasar la imagen a la tarjeta (este paso no lo he probado, me quedé en windows 98 segunda edición :) )
    2. Linux
      1. Utilizamos un terminal para pasar la imagen a la tarjeta
      2. sudo dd if=Berryboot-cubieboard-beta1.ddimg of=/dev/sdX (X es la unidad de nuestra uSD)

  4. Ya tendremos quemado nuestro gestor de arranque berryboot en la tarjeta y ahora es cuando vamos a instalar nuestro Linux.

Arrancando

Cuando llegó la cubieboard, surgió la duda

¿Ahora como la conecto?

Bueno como todo equipo electrónica necesita una fuente de alimentación, sencillo, ¿ no ?
¿qué fuente de alimentación uso ? ¿qué consumo va a tener lo que le conecte?
Según las especificaciones son 5v 2A (aunque se me hace escaso trabajando dos USB y un HD, pero tengo que probarlo, aún me queda comprar un HD)

  • USB (host) (500 mA cada uno)
    • Teclado y ratón
    • wifi
  • USB (OTG)
    • conexión al ordenador para debug
  • HD
    • 5v, 1A, disco de 2.5'' debería funcionar (tengo que comprobarlo)
  • uSD
    • Utilizaré para las primeras pruebas una tarjeta de 8GB clase 4 (pasaré en breve a una de mayor capacidad y clase 10)

Como mínimo necesitaremos los 2 A para que la placa funcione correctamente a ver que tal va cuando le ponga el HD (aunque probé con 1A y también funciona)

¿Teclado y ratón en un solo USB?

Solo tenemos 2 USB, aunque se puede utilizar un hub de USB(alimentado aparte), pero tenía por casa un teclado con ratón inalámbrico y funcionó sin problemas.

¿ Wifi ?

Lejos de mi ordenador está el router, mi primera idea era usar el ethernet, pero por probar dije vamos a probar un Wifi-USB que tenía, y bingo
Este es mi pincho wifi :Belkin Components F7D2102 802.11n N300 Micro Wireless Adapter v3000 [Realtek RTL8192CU]

Primeros pantallazos

Con la versión que me llegó la 2012-09-09 me venía preinstalado un android ICS (4.0.4) con lo que ya tenía una smart TV, además que detectó sin problemas la wifi, el teclado y el ratón inalámbricos
¿ Tablet de 21'' ?

¿Smart TV?
Cubieboard




Sacando a la cubieboard de la caja

¿ Dónde comprar una cubieboard ?


Tuve mucha suerte al encontrar de casualidad la campaña en internet para apoyar este proyecto, está campaña ya está terminada y la cubieboard ya me llegó.
Para aquellos que quieran comprar una, aquí os dejo el enlace donde os podrán informar. Información compra cubieboard

Desempaquetado.


Cuando apoyé el proyecto cogí el paquete básico, pero envío por avión, llegó antes del fin del mundo (21/12/2012)
No sabía que una pequeña caja pudiera contener tanto potencial.
El sacarlo de su caja no es ningún problema, mi paquete venía con la Cubieboard, un cable de alimentación USB-Jack, y un cable SATA II

La alimentación se la he tenido que poner aparte con un cargador de 5v y 2A
  • Cada USB puede consumir como unos 500 mA
  • El disco duro SATA II también necesita la alimentación
    • El disco duro de 2.5'' funciona bien según las especificaciones (tengo que probarlo) consume 1A
    • Discos duros más grandes necesitarían su propia alimentación.
También se hace necesario una uSD (microSD) para la instalación del sistema.
  • Mi cubieboard (2012-09-09) viene preinstalada con una versión de Android ICS (trataré de hacerle un backup u obtener una copia de seguridad)
  • Otras cubieboards (2012-08-08) vienen con Berryboot. Que es un sistema que facilita la instalación de una distribución de Linux . video



¿Qué es una cubieboard?

Cubieboard


Cubieboard es una placa para el desarrollo y el estudio de aplicaciones electrónicas e informáticas.
A grandes rasgos es un ordenador con una arquitectura de ARM (como los de muchos móviles "iteligentes")

En pagina oficial cubieboard podemos encontrar todas sus características detalladas.

Por ahora vamos a quedarnos con lo básico
Dimensiones 10cm x 6 cm
Soc : A10 características (Cortex A8 , 1GHz)
DRAM : 512MB / 1GB
NAND : 4GB
Vídeo : HDMI
Almacenamiento : µSD, SATA (+5v incluido en la placa)
USB (host/OTG) : 2 / 1
Otros: Infrarrojos, i2c, rgb, vga, etc.

¿Dónde puse el ordenador?
Eres grande, pequeño.

 Este es el pequeño caos que tengo no solo encima de la mesa.









En realidad la placa tiene todo lo que necesita para sacarle provecho a la imaginación, al desarrollo, al estudio, y además es divertido.

Cubieboard el cerebro de la bestia

Cubieboard el cerebro de la bestia


Cuando hacemos algunos montajes electrónicos con microprocesadores, nos quedamos algo cortos y la imaginación va más lejos que nuestros arduinos, Mbed, existen ordenadores capaces de hacer lo que nosotros necesitamos pero son grandes, caros y lejos de las plataformas de estudio, eso era hasta ahora.

No hace mucho apareció la raspberry-pi y recientemente un compañero llamado cubieboard sobre los cuales nuestra imaginación puede desarrollar temas como, son la visión artificial, podemos controlar varios arduinos dedicados a tareas específicas, sistemas web, php y sqlLite, etc

En definitiva ya podemos dejar volar la imaginación a nivel de la electrónica, a nivel de equipos y ahora solo queda rellenar los conocimientos para poder hacer realidad lo que imaginemos.

Esta es la función de este pequeño blog sobre cubieboard, compartir todo lo que voy aprendiendo y poder compartir dudas, ideas, documentación, etc.

Mi idea es instalar sobre una cubieboard el tema de visión artificial y conectarlo con arduinos, espero poder dedicar el tiempo necesario para poder llegar a ese nivel.

Fuentes de información.

Cubieboard : http://cubieboard.org/
Cubieboard: http://linux-sunxi.org/Cubieboard/es.
Raspberry-pi : http://www.raspberrypi.org/
Instalación de berryboot: http://www.cnx-software.com/2012/12/09/cubieboard-unboxing-and-quick-start-guide/
Berryboot : http://www.berryterminal.com/doku.php/berryboot

Otras plataformas.

Hay otras plataformas con diferentes características, utilizamos el cubieboard como primer paso.

Odroid: http://www.hardkernel.com/
(tienen unos quad-core muy interesantes)

Nota

Este es mi primer blog medio técnico por favor cualquier comentario no dudéis hacérmelo llegar, teniendo en cuenta que siempre estoy aprendiendo cosas, seguramente mejoraré este blog en función de lo aprendido.
Todo lo que pongo aquí está sacado de internet, no he inventado nada nuevo, lo único que hice fue una lectura, aplicar Newton (prueba y error) y compartir los resultados
Si tenéis información que pueda ser interesante no dudéis en comentarlo.

Gracias por vuestra comprensión.