Tag Archives: Linux

IMG_20170304_142007

SimpleCV Hello World ++ en otros 5 minutos (Linux MINT 18)

4 Mar , 2017,
Jose Nunez
, , , , , ,
No Comments

Siguiendo nuestra serie sobre SimpleCV y como una motivación personal para aprender Python. Acá les presento un par de scripts basados en el ejemplo “Hello World” de SimpleCV.

El primero toma constantemente  una foto de una cámara y la “binariza”; es decir, la convierte cada pixel de la foto en negro o blanco dependiendo de su “posición estadística” respecto de los demás pixeles y muestra el resultado en pantalla.

El segundo toma la fotografía original, sin ser “binarizada” y la muestra en pantalla.

Al correr los scripts de manera simultánea podemos apreciar de mejor manera este filtro de binarización de la imagen.


PASO 1 – simplecv_helloworld.py

Usando un editor de texto como “xed” copiamos el siguiente programa y guardamos el archivo como “simplecv_helloworld.py”

from SimpleCV import Camera
# Initialize the camera
cam = Camera()
# Loop to continuously get images
while True:
    # Get Image from camera
    img = cam.getImage()
    img.save('/home/toruk-makto/imageport.jpg')
    # Make image black and white
    img = img.binarize()
    # Draw the text "Hello World" on image
    img.drawText("Hello World!")
    # Show the image
    img.show()

PASO 2 – simplecv_helloworld2.py

De nuevo, mediante el editor de texto copiamos el siguiente programa y guardamos el archivo como “simplecv_helloworld2.py”

from SimpleCV import Image

# Loop to continuously get images
while True:
    # Get Image from camera
    try:
        img = Image('/home/toruk-makto/imageport.jpg')
        # Draw the text "Hello World" on image
        img.drawText("Hello World!")
        # Show the image
        img.show()
    except:
        print "skip!"

PASO 3 – Ejecutar ambos scripts

En una terminal ejecutemos los siguientes dos commandos:



python simplecv_helloworld.py &

python simplecv_helloworld2.py &


Vemos como se muestran ambas imágenes “en tiempo real”

Para detener los scripts podemos digitar el comando fg(que trae el comando al “foreground de ejecución”) y luego usar las teclas CTRL C; o ejecutamos el comando sudo kill #### donde “####” corresponde al número del proceso que queremos detener; o simplemente cerramos la terminal.

 

 

IMG_20170304_130620

Iniciemos con SimpleCV en 5 minutos en Linux MINT 18 (Ubuntu 16.04)

Mar , 2017,
Jose Nunez
, , , ,
No Comments

Como les mencioné en mi publicación anterior, estamos investigando un poco sobre Vision Computarizada, y en eso nos tropezamos con SimpleCV como una propuesta práctica para adentrarnos en este mundo.

Me tomó cerca de 30 minutos (quizas por culpa de mi propio déficit atencional) instalar SimpleCV, así que aquí va un resumen para echar a andar esto en 5 minutos:


PASO 1 – Instalar dependencias de Python Support

wget http://launchpadlibrarian.net/109052632/python-support_1.0.15_all.deb
sudo dpkg -i python-support_1.0.15_all.deb

(tomado de http://askubuntu.com/questions/766169/why-no-more-python-support-in-16-04)


PASO 2 – Descargar SimpleCV de SourceForge.net

  1. Página Principal en SourceForge: http://simplecv.sourceforge.net/
  2. Página oficial: http://simplecv.org/
  3. Paquete que yo descargué: Paquete SimpleCV-1.3.deb (versión 1.3-1)

PASO 3 – Instalación

  1. Puede usar el comando sudo dpkg -i ~/Downloads/SimpleCV-1.3.deb
  2. También puede instalarse mediante la interfaz gráfica, haciendo clic derecho sobre el archivo SimpleCV-1.3.deb ubicado en la carpeta de descargas (Downloads), selecciona “Open with GDebi package installer” y hacer clic en el botón “Install Package

PASO 4 – Algo antes del Hello World…

  1. En la terminal, ejecutar el comando simplecv. Esto abre una consola simplecv
  2. En la consola simplecv, ejecute los siguientes comandos uno por uno:
    cam = Camera() #Esto genera una instancia de la cámara principal en una variable llamada cam
    img = cam.getImage() #Esto captura una foto de la cámara accesible desde la variable img
    d = img.show() #Esto abre una ventana que muestra la foto de la variable img. La variable d se usa para maniuplar esa ventana.
    d.quit() #Esto cierra la ventana de visualización.
    

Listo… para más información hay tutoriales en la página oficial. También la consola simplecv tiene tutoriales que uno puede llevar digitando el comando tutorial dentro de la consola simplecv. En mi caso, los tutoriales fallaban en algunas tareas. Pero si me sirvieron para obtener una idea de por dónde empezar.

 

IMG_20170120_183547

Intel Edison – Análisis de Datos con Lenguaje “R” mediante UBILINUX (nota rápida)

21 Ene , 2017,
Jose Nunez
, , , , , , , , , , , ,
No Comments

IMG_20170120_183547Durante 2016 hicimos varios proyectos interesantes con Intel Edison.

Uno de ellos fue un proyecto de colaboración con nuestros colegas de UNED en la investigación de sonido ambiente mediante tecnologías IoT.

Una de las cosas más interesantes que pudimos experimentar fue esta idea de hacer análisis de grabaciones de sonido mediante la plataforma Intel Edison y el lenguaje de “Machine Learning” llamado “R”

Esperamos detallar más aun el proceso en próximas entregas. Por lo pronto les dejamos con un tutorial de Sparkfun sobre cómo instalar UBULINUX, una versión de LINUX para IoT basada en DEBIAN en el Edison. La ventaja de esto es que se puede usar el sistema de paquetes APT-GET para instalar el lenguaje “R”

https://learn.sparkfun.com/tutorials/loading-debian-ubilinux-on-the-edison

Pese a que los desarrolladores de UBILINUX se lamentan de no tener soporte suficiente para esta herramienta; creo que vale la pena probar y ayudar un poco a generar ese ecosistema.

IMG_20161206_202348

Comenzando con Intel Galileo

7 Dic , 2016,
Jose Nunez
, , , , , ,
No Comments

IMG_20161206_202348Tomando en cuenta una pequeña comunidad que hay acá en C.R. sobre Intel Galileo GEN2, acá les presentamos un pequeño resumen introductorio.

La línea Galileo de Intel parece estar más orientada a la parte didáctica de microcontroladores que funcionan con ARDUINO mezclada con Micro-computadores que corren LINUX.

Enlace con Especificaciones

Para “iniciar” con este dispositivo no se necesita mayor cosa, solo un cable de tipo USB-a-microUSB (~$6) para programarlo mediante el ambiente ARDUINO IDE. Es el mismo tipo de cable que se usa para cargar una mayoría de teléfonos Android desde una PC.

Hay un tutorial en Inglés acá: https://software.intel.com/en-us/get-started-galileo-windows

Para sacarle mayor provecho se recomienda tener lo siguiente:
• Tarjeta Micro SD de 2GB a 32GB (crcibernetica ~$8) Para instalar una versión LINUX personalizada
• Cable de tipo “6-pin Serial to Type A USB cable (FTDI cable # TTL-232R-3V3 is recommended ($20 en Amazon)” o interfaz USB/SERIAL/FTDI tipo FOCA 2.2 ($ 11 en crcibernetica) Para acceder a la consola LINUX
• Tarjeta WiFi para laptop (Centrino N135 o Centrino 6205 ~$11-$14 en Amazon) para darle conectividad WiFi. Ambas tarjetas requieren este accesorio.

La presentación estándar de Intel Galileo GEN2 incluye la fuente de poder.

El dispositivo puede ser programado con ARDUINO IDE o mediante la plataforma LINUX que corre.

IMG_20160224_164111-2

Intel Edison – Cómo Grabar Sonido usando un adaptador USB

25 Feb , 2016,
José Núñez
, , , ,
No Comments

Descripción

Una de las capacidades de Intel Edison que me resultan más intersantes es la capacidad de manejar dispositivos USB compatibles con LINUX, incluyendo adaptadores para grabar y ejecutar Audio.

Este pequeño proyecto nos permitirá adentrarnos en esta capacidad. Vamos a conectar un adaptador de audio USB al Edison, y vamos a grabar sonido.

Fuente: Intel’s Edison Audio Setup Guide

(!) Antes de seguir estas instrucciones asegúrese de entender las Condiciones de Uso de nuestro sitio.


En resumen:

  1. Se conecta el dispositivo de Audio al puerto USB colocando el switch de selección USB en posición “up”
  2. Se conecta el Edison a la laptop mediante el puerto serial para usar la terminal LINUX con software como putty (windows) o screen (linux)
  3. Se obtiene una lista de dispositivos de audio USB para determinar el numero de dispositivo a utilizar.
    • cat /proc/asound/pcm
  4. Se listan los puertos de audio disponibles para determinar el puerto de salida (out) y de entrada (mic).
    • pactl list | grep Name | grep usb
  5. Se configura los puertos predeterminados (sink y source)
    • pactl set-default-sink {output-device-name}
    • pactl set-default-source {input-device-name}
  6. Se ejecuta el comando arecord con los parámetros correspondientes para el adaptador en uso.
    • arecord -f cd -c 1 -d 10 -r 44100 -D hw:2,0 soundfile.wav
  7. La grabación es almacenada en un archivo soundfile.wav

Lista Recomendada de Materiales:


PASO #1 – Conectar el Edison

Para este proyecto necesitaremos conectar el Edison a un computador por medio del puerto serial USB. Esto para poder manipular la terminal linux del Edison. El purto USB Serial es el que se ubica en la parte inferior derecha. Se puede usar putty (en el caso de Windows) o screen (en el caso de Linux) para acceder a dicha terminal. En el Administrador de Dispositivos de Windows, el puerto aparece bajo el nombre “Ports (COM & LPT) > USB Serial COM Port (COMxx)


PASO #2 – Conectar el Adaptador de Audio USB edison_usb

Este proyecto se ha probado en diversos adaptadores de audio (Plantronics*, Pluggable*, SYBA*)

Se conecta el adaptador de audio USB al puerto USB principal del Edison. Nótese que el switch de selección de modo USB debe estar en posición “up” para activar el puerto USB. Esto desactiva el puerto dedicado a recibir los Sketch de ARDUINO.


PASO #3 – Listar los Dispositivos

Una vez conectado al Edison, el sistema operativo reconoce el dispositivo de audio USB. Se puede listar los dispositivos de audio conectados al Edison usando el siguiente comando. Puede ejecutarlo con el dispositivo de audio conectado y desconectado para ver la diferencia de resultado. Anote el número de dispositivo.

cat /proc/asound/pcm

cat_proc_asound_pcm


PASO #4 – Listar los Puertos de Audio

Seguidamente necesitaremos anotar el nombre de los puertos de audio, utilizando el siguiente comando.

pactl list | grep Name | grep usb

pactl_list_grep


PASO #5 – Configurar Los Dispositivo de entrada y salida de audio

Utilice los siguientes comandos para configurar los dispositivos predeterminados de entrada y de salida de audio.

pactl set-default-source {input-device-name}

pactl set-default-sink {output-device-name}

edison_set_default_audio

 


PASO #6 – EJECUTE ARECORD

El siguiente comando se usa para grabar audio del dispositivo 2,0 que anotamos en el paso #3 a un archivo “soundfile.wav”

Puede necesitar opciones diferentes de arecord dependiendo de su dispositivo de audio USB. Las opciones disponibles pueden encontrarse en este enlace.

En este ejemplo, estamos grabando 10 segundos de audio (-d 10) a un “rate” de 44100, para un dispositivo 2,0 (-D hw:2,0)

arecord -f cd -c 1 -d 10 -r 44100 -D hw:2,0 soundfile.wav


Disclaimer:

(*) Este artículo cita marcas registradas que son propiedad de sus respectivos dueños

Al momento de escribir este artículo, el autor fungía como empleado de Intel Corp

Este artículo se brinda “tal cual” y de buena fe como un método para compartir conocimientos. No se brinda garantía de funcionamiento de ningún tipo; no asumimos responsabilidad por daños o pérdidas causados al seguir estas instrucciones; salvo lo que indique la ley aplicable.

 

Un Agradecimiento especial para nuestros amigos del Laboratorio de Investigación e Innovación Tecnológics (LIIT) de UNED, con quienes hemos trabajado largas horas explorando estas tecnologías.

2112-00

Comenzando con Intel Edison en UBUNTU

17 Feb , 2016,
javilargo
, , ,
No Comments

Descripción2112-00

Este procedimiento describe a groso modo cómo comenzar a utilizar la placa Intel Edison con tarjeta de expansión ARDUINO, programándola desde una Laptop  que corra UBUNTU LINUX.


Procedimiento

PASO 1 – Descargar el programa aquí
Descomprimir el archivo e instalar el script install_GUI.sh por medio de la terminal de Ubuntu. También instalar Intel Phone Flash Tool Lite, que viene incluido a la hora de instalar el programa (en el directorio del programa)

sudo ./install_GUI.sh

sudoinstalsh


PASO 2 – Conectar la placa Intel Edison mediante una conexion serial (Ej: usb). en este caso se utilizará la conexión que permite el uso de arduino, además de la placa conectada a una fuente de corriente. Se debe considerar: la pc en la mayoria de los casos no brinda suficiente corriente para alimentar la placa por lo que es mejor conectarlo a una fuente de energia estable.
Igualmente las conexiones que se utilizan para conectar al USB de la PC, la placa edison, son las conexiones micro USB, el mini switch en la placa debe seńalar hacia los puertos micro USB. estos puertos en la placa serán representados como a) y b) ya que tienen funciones diferentes. En todo caso se pueden conectar ambos micro usb simultaneamente a la PC.
a) A la hora de conectar cada micro USB se nota la diferencia en que uno, al conectarlo a la pc, aparecera como un dispositivo removible en esta, esta conexion sirve para subir funciones desde el programa de arduinos
b) En la otra conexion micro USB al conectarse a la PC no aparecera como un dispositivo removible, esta conexión es la que sirve para trabajar en la placa desde la terminal de Ubuntu.

  1. Para este paso se necesita screen shell en ubuntu en caso de no tenerlo utilizar el siguiente comando en la terminal
sudo apt-get install screen

Conectar el Edison desde la conexion micro usb b) (ver punto 2)
Para conectar la placa ingresar el siguiente comando (donde ttyUSB0 es el dispositivo)

sudo screen /dev/ttyUSB0 115200

Después de escribir este comando darle Enter, en algunas ocasiones se le debe dar enter 2 veces.
La terminal nos pedirá un login aqui, escribir ¨root¨ (sin comillas)
Se solicitará la contraseńa del sistema. Ingresarla y darle Enter
Debe quedar un mensaje similar a este:

terminal


PASO 3 –  Conectar la placa Intel Edison a internet mediante WI-FI utilizando el comando:

configure_edison --wifi

En caso de que ocurra el error en el que no se encuentra la Placa Edison (configure_edison: not found) se debe utilizar la aplicacion Intel Phone Flash Tool para preparar el dispositivo.     Aceptar y darle enter para continuar. Aparecera una lista con las conexiones WI-FI disponibles, cada una con un numero, el cual debemos ingresar para elegir la conexion a la cual se quiere accesar, ingresar los credenciales de la red. Aparecerá el mensaje ¨done¨ . La placa ya esta conectada a internet y se puede observar que aparece la dirección IP de esta en la terminal, se puede comprobar la conexión mediante el comando ¨ping¨ en la terminal.


PASO 4 – Completar el setup de la aplicación descargada para que se instalen los programas, se instalará el programa arduino e Intel Phone Flash Tool Lite.
En este caso se utilizó, como se dijo anteriormente el lenguaje Arduino como IDE en la aplicación instalada. Esta aplicación se corre como administrador mediante el comando:

sudo arduino

En este caso, se debe conectar al puerto micro USB a) para subir funciones a la placa


Notas *Recordar ejecutar el programa como administrador a la hora de abrirlo, de lo contrario el acceso será denegado

**Fijarse que el puerto seleccionado en la aplicación sea el adecuado, es decir que concuerde con el que se esta utilizando en la conexion serial y utilizar el correcto Addon para cada dispositivo que se este utilizando. En la aplicación donde dice ¨tools¨ revisar: Port que esté seleccionado el que se esta utilizando y Board que se esté utilizando el que concuerde con el dispositivo (En el caso del Edison, ya viene en la aplicación se selecciona Edison)

***Esta es una versión en espańol para comenzar a utilizar la placa Intel Edison. La versión original (en inglés) puede encontrarse en la siguiente dirección: https://software.intel.com/en-us/get-started-edison-linux-step1

Edison – Linux – Cómo restablecer la conexión de Red

1 Sep , 2015,
José Núñez
, , , , , ,
No Comments

En otra publicación veíamos que para reiniciar la conexión de red en GALILEO se usaba un comando de init.d

Para Edison es diferente. Dado que Edison no usa init.d, hay qu usar otro tipo de comando para reiniciar:

1. Reiniciar la red:
systemctl restart wpa_supplicant.service

2. Verificar el estado del servicio de red:
systemctl status wpa_supplicant.service

o tambien…

ping google.com

Llamadas dinámicas a LINUX desde ARDUINO IDE en un Intel Edison – Aprendizaje de 10 minutos

7 Mar , 2015,
José Núñez
, , , , , , , , ,
one comments

IMG_20150307_170030

Uno de los súper poderes de las plataformas Edison y Galileo de Intel es la disponibilidad de LINUX y la posibilidad de ejecutar comandos de LINUX desde un “sketch” de ARDUINO.

En esta receta les comparto cómo hacer llamadas dinámicas al sistema de LINUX desde un sketch ARDUINO, concatenando valores en un objeto String y luego convirtiendo dicho objeto a un arreglo de caracteres necesario para la llamada de sistema.

La idea es poder concatenar comandos de sistema, con valores leidos de los sensores, y hacer llamdas a Linux para que haga algo a partir de estos valores.

En resumen:

  1. La llamada de sistema recibe un parámetro que es un arreglo de caracteres (no un String)
  2. La concatenación se puede hacer de manera muy sencilla usando un String
  3. La conversión se realiza creando un arreglo de caracters del tamaño del String mas un caracter terminador.
  4. El sketch abajo es una modificacion del ejemplo BLINK, que además de hacer parpadear un led, tiene un contador que lleva la cuenta de la cantidad de veces que se ejecuta el comando loop().
  5. La función “dynamicCommand(c)” recibe el valor del contador y genera un comando de sistema para realizar un listado del contenido de una carpeta y poner el resultado en un archivo. Este archivo es nombrado con un sufijo que indica la cuenta que lleva el contador.
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
int c = 0; //just a counter

// the setup routine runs once when you press reset:
void setup() {                
    // initialize the digital pin as an output.
    pinMode(led, OUTPUT);    
    Serial.begin(9600);
    Serial.println("TEST FOR STRING CONCATENATION"); 
}

// the loop routine runs over and over again forever:
void loop() {
    c++; //un simple contador
  
    Serial.println("Count: ");  
    Serial.println(c);

//  Serial.println("Count: " + c); //This behaves weird...  
    
    if( c < 10){ 
         dynamicCommand(c);
    }
    Serial.println("Blinking...");
    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(1000); // wait for a second
    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
    delay(1000);               // wait for a second
    Serial.println("Loop Complete!"); } 

dynamicCommand(int counter){
     Serial.println("dynamicCommand function..."); 
     String command = "ls > resultFile";
     command += counter;
     command += ".log";
     Serial.println("Concatenated command looks like this:");
     Serial.println(command);

//UPDATE: THIS COULD BE ACHIEVED USING THE buffer propery of the String object
//     Serial.println("Converting to char array...");
//     int commandLength = command.length() + 1;
//     char commandCharArray [commandLength];
     
//     command.toCharArray(commandCharArray, commandLength);
     
//     Serial.println("Command array looks like this:");
//     Serial.println(commandCharArray);
//     Serial.println("Making system call...");
//     system(commandCharArray);


system(command.buffer);

Serial.println("Done!"); }

Linux – ¿Como restablecer la conexión a la red?

1 Nov , 2014,
José Núñez
, , ,
No Comments

En resumen

  1. Intente ejecutando el siguiente comando:
    /etc/init.d/networking restart
  2. Si esto no funciona intente remover y reinstalar físicamente su tarjeta WIFI y ejecute el paso 1

Explicación

En ocasiones el sistema se queja de que no puede encontrar ningun servidor en Internet. En estos casos, siempre es bueno tener a mano el siguiente comando para reiniciar los servicios de red:

/etc/init.d/networking restart

El comando reiniciara la red en Linux y tratara de conectarse de nuevo, refrescando las referencias a servidores de nombres de dominio (DNS) a conexiones WIFI y/o alambradas (Ethernet) y restablecerá las direcciones IP con que el computador se conecta a las redes disponibles.

Si esto no funciona puede que la conexión física de la tarjeta WIFI este fallando. Intente desconectar la tarjeta WIFI fisicamente y volverla a instalar con firmeza para recuperar la conectividad.

Happy Making!