Tutorial Raspberry Pi - TwiThief: Twython + Motion + Playstation Eye Toy

Tutorial Raspberry Pi - TwiThief: Twython + Motion + Playstation Eye Toy
a1

¡Hola de nuevo amigos! Hoy os traigo un nuevo tutorial con el que conseguiremos recibir notificaciones en nuestra cuenta de Twitter. Pero no una notificación cualquiera! Se nos avisará que se ha detectado movimiento en la zona donde tengamos vigilando a nuestro sistema de seguridad (de nuevo, la Playstation Eye o Webcam compatible) adjuntando una imagen encuadrada de la persona, objeto, animal o cosa que haya invadido nuestro espacio!

Ya vimos en Geeky Theory un tutorial de cómo hacer funcionar Motion en Raspberry Pi, pero ahora lo veremos con más funcionalidades.

Y...¿Cómo conseguimos esto?

Lo primero de todo, como siempre, vamos a detallar una lista de lo que necesitaremos:

  1. 1x Raspberry Pi con Raspbian.
  2. 1x Webcam USB (Se ha utilizado la Playstation Eye de PS3 de nuevo)
  3. 1x Cuenta/desarrollador en Twitter
  4. Librería Twython para Python
  5. Herramienta Motion
  6. Conexión Internet en Raspberry Pi
  7. Conocimientos básicos de Python y comandos en Linux (para eso estamos aquí)

¡Manos al teclado, empezamos!

Lo primero de todo, como siempre, recomiendo actualizar nuestra distribución Raspbian para actualizar todos los binarios hasta la fecha (recordad que puede demorar un tiempo hacerlo), para ello desde una terminal de la Raspberry Pi ejecutaremos los comandos:

$ sudo apt-get update $ sudo apt-get upgrade $ sudo reboot

A continuación, vamos a registrarnos en la red social Twitter para conseguir tener acceso a las opciones de desarrollador. Para conseguir tal registro os recomiendo seguir los pasos que mi compañero @luisvillak os detalló a la perfección (imágenes incluidas) y recientemente en el tutorial TUTORIAL RASPBERRY PI – USO DE TWITTER CON PYTHON. Lo importante es que consigamos las "API-keys" necesarias para conectarnos con la aplicación generada en nuestra cuenta de desarrollador de Twitter.

Generada la aplicación y obtenidas nuestras "API-keys" vamos a instalar las librerías y herramientas necesarias con las que va a trabajar nuestro script Python:

$ sudo apt-get install motion $ sudo apt-get install pip $ sudo pip install twython

A continuación se van a detallar para qué sirve cada una de ellas:

MOTION

Motion es un programa que monitoriza la señal de vídeo proveniente de una cámara. Es capaz de detectar que una parte significante de una imagen ha cambiado, es decir, que es sensible a captar movimiento entre las imágenes.

Como seguramente habréis deducido, va a ser el programa sobre el cual nos vamos a ayudar para detectar que alguien ha invadido nuestra zona privada. Motion tiene una gran lista de opciones y parámetros que se le pueden fijar, pero no creo que ésta ocasión sea con la finalidad de hacernos unos expertos en la herramienta, por lo que voy a comentar las opciones y parámetros más importantes que deberemos de ajustar (os dejaré más abajo un enlace a toda su documentación oficial para el que quiera saber más):

Para empezar, comentar que Motion se ejecuta en base a un fichero de configuración, que por defecto, en nuestras Raspberry Pi's se ha generado en la ruta /etc/motion y se llama motion.conf.

Éste fichero de configuración es bastante amplio (alrededor de 700 líneas) por lo que voy a detallar a continuación (y específicamente) aquellas líneas que deberemos de ajustar para nuestros intereses:

  • Abriremos dicho fichero de configuración que se encuentra en la ruta /etc/motion/motion.conf con la orden:

$ sudo nano /etc/motion/motion.conf

  • Tendremos abierto en un editor de texto (nano) el archivo motion.conf y ahora vamos a ir buscando y ajustando las siguientes líneas de acuerdo a lo expuesto a continuación:

daemon off videodevice /dev/video0 v4l2_palette 6 input 8 width 640 height 480 framerate 2 threshold 3000 gap 60 output_normal on quality 90 locate on target_dir /home/pi/projects/twithief jpeg_filename photo_thief webcam_port 8081 webcam_localhost off control_port 8080 control_localhost off on_event_start python /home/pi/projects/twithief/twithief.py

  • Guardamos el archivo y ahora nos fijamos en el último parámetro que se ha modificado, el cual es el más importante para la finalidad que se quiere llevar a cabo (captura de imagen cuando haya detección de movimiento):

on_event_start python /home/pi/projects/twithief/twithief.py

  • Éste parámetro de configuración sirve para ejecutar un comando externo cuando se ha detectado un evento. ¿Cómo se define un evento? Un evento comienza cuando se ha detectado movimiento después de que haya pasado un período de ausencia de movimiento definido por el parámetro gap (sí, parece un trabalenguas, a mí me costó entenderlo a la primera en su documentación oficial ;P).  Para entendernos todos, lo que hace es: ejecutar el script python que le vamos a pasar (y vamos a crear a continuación)  como parámetro, transcurrido el tiempo definido (en segundos) en el parámetro gap, que para ésta ocasión hemos elegido 1min, es decir, 60 segundos.
  • Otros parámetros importantes a explicar son: jpeg_filename y target_dir, definiendo el primero de ellos, el nombre con el que queremos guardar las imágenes que se creen cuando se detecte movimiento (por defecto se guardan con extensión *.jpeg) y el segundo de ellos, la ruta absoluta donde queremos que se guarden dichas imágenes (en nuestro ejemplo hemos elegido que se guarden en la ruta /home/pi/projects/twithief )

TWYTHON Y SCRIPT PYTHON

Como se ha explicado, mediante el programa MOTION vamos a ejecutar un script python. Éste se va a encargar básicamente de conectarse con nuestra aplicación asociada a nuestra cuenta de Twitter y actualizar nuestro estado con un mensaje e imagen del invitado no deseado. Para realizar la conexión con Twitter, vamos a utilizar en ésta ocasión la librería Twython, la cual posee una amplia API capaz de realizar consultas sobre:

  • Información de Usuario
  • Listas Twitter
  • Timelines
  • Mensajes directos
  • ...y cualquier cosa que encuentres en los documentos de la API de Twitter.
  • Subida de imágenes
  • Actualizar el estado de un usuario con una imagen (¡esta es la nuestra!)
  • Cambiar el Avatar de usuario
  • Cambiar el background de un usuario
  • Cambiar la imagen banner de un usuario
  • Soporte OAuth 2 Application Only (sólo lectura)
  • Soporte con la Twitter’s Streaming API
  • Soporte con Python 3

Si alguien quiere más información sobre Twython, aquí dejo su WEB OFICIAL TWYTHON

A continuación os dejo el código del script en cuestión que se va a ejecutar, lo he llamado TwiThief (a modo de juego de palabras entre 'Twit' y 'Thief'), al estar comentado, creo se sobreentienda:

#!/usr/bin/env python #coding: utf-8 # Twithief v0.1 by @AlexCorvis84 # Agradecimientos a www.geekytheory.com y @luisvallik # Importamos las librerias necesarias: # Twython: necesaria para creacion/autenticacion con Twitter #     y asi poder actualizar el estado de nuestra #     cuenta con un mensaje e imagen. import os import sys import time from twython import Twython # Creacion de las variables necesarias para conectarnos # con la apliacion creada en  nuestra cuenta de desarrollador. CONSUMER_KEY = 'COPIAD_LA_VUESTRA' CONSUMER_SECRET = 'COPIAD_LA_VUESTRA' ACCESS_KEY = 'COPIAD_LA_VUESTRA' ACCESS_SECRET = 'COPIAD_LA_VUESTRA' print "Se ha detectado movimiento. Capturando imagen del invitado...." api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET) print "Abriendo imagen generada..." photo = open('/home/pi/projects/twithief/photo_thief.jpg', 'rb') print "Actualizando el estado de la cuenta Twitter con la imagen capturada" api.update_status_with_media(status='Cuidado! Se ha detectado movimiento en la zona! Una imagen vale+ que 118 caracteres... #twithief', media=photo) print "TwiThief enviado!!!" print "Bye, Bye...." sys.exit()

Lo que deberéis hacer es crear tal script en un fichero que se llame twithief.py en el directorio /home/pi/projects/twithief (NOTA: aseguraros de haber creado tal ruta de directorios), para ello:

  1. Ejecutad el siguiente comando: $ sudo nano /home/pi/projects/twithief/twithief.py
  2. Copiad y pegad (...todos de él) el código de arriba y guardad el archivo mediante las combinación de teclas: Ctrl+O (para guardar) y salir con la combinación de teclas Ctrl+X.
  3. Cambiad las API-Keys por vuestras personales correspondientes donde pone COPIAD_LA_VUESTRA.
  4. Dar permisos de ejecución al fichero, ésto lo logramos con: $ sudo chmod +x /home/pi/projects/twithief/twithief.py

Y ya hemos llegado al paso final....¡Puesta en marcha de todo el conjunto!

Para ejecutar nuestro proyecto, sólo queda ejecutar un comando, el cual dejará en funcionamiento el programa MOTION a la "escucha" de detección de movimiento, para lanzar así nuestro script y capturar al "special guest" que se ha entrometido en nuestra zona privada.

Deberemos ejecutar, por tanto, el siguiente comando (da igual donde nos encontremos):

$ sudo motion -c /etc/motion/motion.conf -n

Básicamente con éste comando, lo que estamos haciendo es:

  1. Con el parámetro -c ruta_fichero_config_motion: estamos indicando a MOTION que se ejecute con el fichero de configuración que ajustamos con nuestros requisitos al principio del tutorial.
  2. Con en parámetro -n: estamos indicando a MOTION que se ejecute en modo terminal (no modo demonio o daemon-mode), con lo que conseguimos que aparezcan mensajes en la terminal de todo lo que está sucediendo.

Y como broche final a éste tutorial, y porque como se suele decir, una imagen vale más que mil palabras.....(o 140 caracteres) aquí os va una instantánea de un "famoso intruso" que se quiso apoderar de mis queridos libros:

¡Espero os haya gustado y os animéis a crear más TwiThief's!

¡Salu2!

@AlexCorvis84

TwiThief