Wireless Video de Raspberry Pi a PC

Vamos a documentar como hacer una transmisión de video con la Camara Raspberry Pi a un PC. Como objetivo adicional nos proponemos crear un dispositivo autónomo que transmita imágenes mediante wifi en vivo, similar a una cámara wireless de seguridad.

Veremos que la Raspberry Pi camera board es un modulo diseñado para ser integrado con facilidad en el Pi.

La cámara posee una relación calidad-precio notable:

    • Tamaño 25mm x 20mm x 9mm
    • Peso 3g
    • Bajo consumo
    • 5 Megapixels
    • 2592 x 1944 pixeles de imágenes estáticas
    • Soporta video 1080p30, 720p60 y 640x480p60/90
    • Cuesta menos de 25 Euros

Contamos con un Raspberry Pi B 512K de memoria, ya nos hemos aproximado varias veces a micro placas

https://unpocodejava.wordpress.com/2013/07/05/java-en-un-raspberry-pi-desde-cero-2/
https://unpocodejava.wordpress.com/?s=raspberry+pi

Y tenemos un avance de los esfuerzos por tener una distribución de Java en un Pi:

https://unpocodejava.wordpress.com/2012/05/30/java-corriendo-intentando-correr-sobre-raspberry-pi/
https://unpocodejava.wordpress.com/2012/08/14/corriendo-tomcat-7-en-un-raspberry-pi/

 

Instalación


La instalación es muy sencilla. La banda se inserta en el conector plano entre la Ethernet y el HDMI. Primero es necesario levantar una pestaña tirando hacia arriba:

Después se inserta la faja de la cámara, con la parte plateada orientada hacia el puerto HDMI

Cuando esté bien colocada, se baja de nuevo la pestaña y listo.

 

Configuración


Arrancamos el Pi y nos autenticamos. El nombre y password por defecto, como ya hemos visto en otros tutoriales es

usuario: pi
password: raspberry

Actualizamos el firmware y librerías del Pi a la última versión:
>sudo apt-get update
>sudo apt-get upgrade

Accedemos a la configuración del Pi con el comando
>sudo raspi-config

Navegamos al menú camera y seleccionamos enable

image014

image018

Seleccionamos Finish y reiniciamos

En el tutorial anterior java-en-un-raspberry-pi-desde-cero, podemos encontrar como instalar wifi y un servidor remoto vnc en el Pi. En http://www.raspipc.es podemos encontrar baterías recargables de 5v – 1mA y una toma usb, como esta:

Con esto y un poco de esparadrapo, quedamos totalmente wireless para mover la cámara en busca de la mejor toma.

 

Pruebas Locales


Procedemos testear que la instalación de la cámara funciona correctamente. El commando raspivid permite realizar capturas de video, mientras que raspistill captura imágenes fijas.

Escribamos en la consola el siguiente comando:
>raspistill -v -o test.jpg

Que muestra 5 segundos de vista previa por defecto y toma una foto, salvándola en el fichero test.jpg,

Hay que destacar que no es posible ver la vista previa desde el cliente remoto vnc.

-o ó –output el nombre del fichero y -t ó –timeout especifica los milisegundos de vista previa.
-d ó –demo ejecuta el modo demo que rota a través de varios efectos de imagen

Comandos de Ejemplo
Captura 5s de video en formato h264:
>raspivid -o video.h264

Capturar 10s de video:
>raspivid -o video.h264 -t 10000

Captura 10s de video en modo demo:
>raspivid -o video.h264 -t 10000 –d

Para más información acerca del uso de estos comandos, referirse a la bibliogrfia o a la ayuda de los propios comandos:
>raspivid | less
>raspistill | less

 

Desactivar Led de la Cámara

La cámara incluye un LED en la esquina que se enciende cuando la cámara esta activa.

Este led se puede desactivar editando el fichero
>sudo nano /boot/config.txt

y añadiendo la linea
>disable_camera_led=1

 

Streaming con VLC


VLC es una plataforma opersource que interpreta la mayoría de formatos multimedia. Para hacer streaminf vlc, necesitamos descargar en el PI el software

>sudo apt-get install vlc

Un método muy eficiente para hacer stream es el vía protocolo RTSP

>raspivid -o – -t 3600000 -w 800 -h 600 -fps 31 |cvlc -vvv stream:///dev/stdin –sout ‘#rtp{sdp=rtsp://:8554/}’ :demux=h264

El comando activa la cámara y el puerto 8554 es configurado como canal de stream, a la escucha de suscriptores.

Podemos jugar con los valores -w (ancho en pixels), -h (alto en pixels), -fps (fotogramas por segundo) para conseguir mayor velocidad de transmisión.

Para ver el stream debemos instalar el cliente VLC en un PC, descargable desde http://www.videolan.org/.

Para suscribirnos a la dirección de stream hay que abrir en el menú Abrir volcado de red…

La dirección:
>rtsp://<IPdeRaspberryPi>:8554/

por ejemplo, un PC en la red local podría tener esta IP

Pulsamos en reproducir y comenzaremos a ver el video en el reproductor.

Los pros de este método son

  • Facilidad de configuración
  • Conexión de múltiples clientes
  • Fácil acceso a traves de routers (se podria configurar streaming a mediante protocolo http de un modo similar).
  • La aplicación se integra en multiples plataformas, como lynux y android

Los contras.

  • Pese a haber probado múltiples configuraciones en cliente y en servidor, el protocolo rtsp tiene una latencia de hasta 10 segundos en la LAN. Esto provoca un desfase que hace imposible el uso en tiempo real de una conexión.

Este un problema conocido y el autor del post aun no ha encontrado una solución factible.

 

Streaming Punto a Punto con MPlayer


Al contrario que el protocolo anterior El stream punto a punto envía la señal del raspberry pi directamente a la IP del reproductor. Para ello necesitamos dos programas:

  • Netcat es una utilidad de red que redirige flujos de lectura/escritura utilizando tcp/udp.
  • MPlayer es un reproductor opensource que interpreta los formatos mas habituales.
  • Tomamos como ejemplo un PC con sistema Windows. Tenemos que instalar ambos programas, descargables desde

https://dl.dropboxusercontent.com/u/106074492/mplayer%20and%20netcat.zip

y los descomprimimos en un directorio de trabajo, por ejemplo d:/pro/netplayer

Para arrancar la escucha en el PC, ejecutar en el directorio de trabajo

>d:
>cd pro
>cd netplayer
>nc -l -p 5001 | mplayer -vo direct3d -fps 31 -cache 2048 -nosound -framedrop –

que genera un socket de escucha (-l) en el puerto 5001. De ahí, enruta (|) el stream de información al reproductor MPlayer con la siguiente configuración:

  • Interpreta 31 fotogramas por segundo
  • Con un cache de 2MB
  • Deshabilitamos el sonido (la cámara no tiene micrófono)
  • En caso de falta de información, tirar el fotograma
  • Es muy importante es seleccionar el driver de output de video. En las pruebas direct3d ofrece un rendimiento muy correcto.

El programa se queda a la escucha de un stream entrante.

En la parte del Pi necesitamos descargar el software:
>sudo apt-get install mplayer netcat

y activamos la cámara para enviar el stream de video con el comando
>raspivid -o – -vf -t 3600000 -w 800 -h 600 -fps 31 -n| nc <IPdePC> 5001

conocemos el comando raspivid; con el pipe mandamos la información al netcat, que manda el stream a la IP y puertos especificados.

En la parte del PC, se abre el reproductor mplayer:

Los Contras de este método son:

  • No es posible enviar más que a un solo destinatario
  • Configuración muy rígida, es necesario que el PI conozca la IP del destinatario
  • El mplayer no esta tan extendido en diferentes plataformas como el VLC

Los Pros:

  • Muy baja latencia, menos de 0.5 segundos en la LAN.
  • Debido a la velocidad, este método es válido para imagen en tiempo real.

     

    Solución Múltiples Clientes


    Si fuera necesario conectar múltiples clientes (de distintos sistemas operativos) al stream, una solución sencilla podría ser usar el PC como “Gateway” de video y conectarse mediante vnc.

    Los clientes VNC existen para múltiples plataformas. En el “gateway” (PC), instalar y ejecutar el servidor vnc desde http://www.realvnc.com/

    El puerto de escucha por defecto es el 5900, es posible cambiarlo desde la sección options.

    La pantalla de conexión del cliente es como la siguiente:

    Escribimos la ip:puerto del servicio vnc (5900) del Gateway PC y pulsamos connect. La primera vez dara un aviso (por no tener el certificado) y pasara a la ventana de autenticación:

    Y sin más problemas accederemos al escritorio.

    En mi experiencia, la elección del driver de reproducción mplayer (opción –vo) afecta drásticamente a la calidad de la imagen remota.

    Si accedemos desde fuera de la LAN al gateway, tener en cuenta que hay que poner la IP externa (consultar en www.whatismyip.org) y configurar el router para redespachar la señar a la IP/puerto internos correspondientes:

    Existen diversas implementaciones para VNC desde android. Debido que en los dispositivos móviles la banda limitada de datos, si queremos conseguir imagen a tiempo real se recomienda:

    • Quitar fondos, temas y efectos visuales del escritorio del gateway
    • Definir la resolución de la maquina Gateway lo mas parecida al tamaño de la pantalla (se podría configurar que corriera en full screen)
    • Bajar los colores del cliente vnc a 256
    • Bajar los fps, width y height del transmisor (Pi)

     

    Referencias


    Tutorial de iniciación a la cámara
    http://www.adafruit.com/products/1367

    Documentación Raspicam mas en profundidad
    http://www.raspberrypi.org/wp-content/uploads/2013/07/RaspiCam-Documentation.pdf

    Resumen de conexión VLC con protocolos rtsp/http/hsl
    http://www.mybigideas.co.uk/RPi/RPiCamera/

    Tutorial configuración punto a punto MPlayer
    http://smokespark.blogspot.com.es/2013/06/26-streaming-live-video-from-raspicam.html

Auto-links sobre sobre Big Data

En los últimos días me ha tocado elaborar esta lista dos veces, así que recordemos algunos posts sobre tecnologías Big Data (como veis enfocadas al procesamiento en Tiempo Real):

· Big Data en 2013:

o https://unpocodejava.wordpress.com/2013/03/18/predicciones-big-data-2013/

o https://unpocodejava.wordpress.com/2012/11/13/tecnologias-open-source-de-moda-en-big-data-storm-y-kafka/

· Storm: este es mi favorito :)

o https://unpocodejava.wordpress.com/2012/07/26/cuando-hadoop-no-es-suficientemente-rapido/

o https://unpocodejava.wordpress.com/2012/09/17/storm-el-hadoop-para-procesar-streams/

o https://unpocodejava.wordpress.com/2013/06/06/donde-se-usa-storm/

o https://unpocodejava.wordpress.com/2013/06/06/un-poco-de-trident/

· Kafka: es un Bus Distribuido, lentamente se ha convertido una opción muy interesante para algunos escenarios:

o https://unpocodejava.wordpress.com/2012/12/21/un-poco-de-kafka/

· Kestrel: es una cola de mensajería distribuida al estilo Kafka pero más sencilla y limitada. Storm tiene también un KestrelSpout:

o https://unpocodejava.wordpress.com/2013/07/03/que-es-kestrel/

· Fluentd: Fluentd es una librería open source que actúa como colector de logs tratándolos como streams JSON y enviándolos a otros sistemas como S3, MongoDB, Hadoop o otros Fluentds. Tiene ya como input source un Apache Log.

o https://unpocodejava.wordpress.com/2013/02/18/fluentd-colector-de-logs-bigdata/

· LogTash: es una Herramienta para recolectar logs, parsearlos, almacenarlos y consultarlos desde una consola Web:

o https://unpocodejava.wordpress.com/2012/06/05/logtash-procesamiento-de-eventos-y-generacion-de-logs/

· Impala, Stinger y Presto: tecnologías para hacer queries en tiempo real sobre Hadoop:

o https://unpocodejava.wordpress.com/2012/11/05/cloudera-impala-o-queries-en-tiempo-real-en-hadoop/

o https://unpocodejava.wordpress.com/2012/11/12/comparando-tiempos-de-impala-y-hive/

o https://unpocodejava.wordpress.com/2013/06/24/impala-stinger-dremel-y-ahora-presto/

· Scribe: es un Servidor para agregar logs en tiempo real enviados desde clientes, puede funcionar con Storm,…

o https://unpocodejava.wordpress.com/2013/07/04/procesamiento-de-logs-en-tiempo-real-i-scribe/

Cuando Hadoop no es suficientemente rápido!!!

Llevamos ya varios posts dedicados a Hadoop, casi como sinónimo de BigData pero qué pasa cuando Hadoop no es suficientemente rápido!!!

Para ciertas cosas como calcular trending topics en Twitter sin ir más lejos el flujo de Hadoop es muy lento. El motivo es que Hadoop no está pensado para trabajar en tiempo real.

En este post vamos a analizar Twitter Storm:

En 2011 Twitter adquirió la compañía de análisis online BackType. En septiembre de 2011 Twitter liberó Storm como librería open source.

Storm funciona de forma semejante a Hadoop pero en lugar de jobs MapReduce Storm corre topologías que nunca acaban.

Storm puede usarse para :

· Procesamiento de streams de datos Storm es escalable y tolerante a fallos

· Computación continua Storm puede ejecutar una query de forma continua y hacer stream de los resultados a los clientes en tiempo real (así se usa para los trending topics)

· RPC distribuido: Storm permite paralelizar una query al vuelo

Existen varias alternativas a Storm que intentaremos analizar en otros posts (Hstreaming y Apache S4 como poco), sobre estas Storm ofrece:

· Open Source: Hstreaming no lo es

· Modelo de programación simple

· Corre en cualquier lenguaje: Clojure, Java, Ruby y Python se soportan pero se pueden añadir nuevos sólo implementando el protocolo de comunicación

· Tolerante a fallos

· Escalable horizontalmente

· Garantiza el procesamiento del mensaje: Storm garantiza que cada mensaje se ha proceso por completo al menos una vez. S4 no lo garantiza.

· Rápido: usa ØMQ como capa de mensajería

· Modo local: para simular un cluster Storm y hacer test unitarios de topologías

Para correr Storm se necesita Apache Zookeeper, ØMQ, JZMQ, Java 6 y Python:

· ZooKeeper se encarga de gestionar los components de un cluster

· ØMQ como sistema de mensajería interno y JZMQ como Java Binding para ØMQ.

Existe un subproyecto, storm-deploy, que permite el despliegue inmediato de clusters Storm clusters en AWS.

Mientras nos ponemos con el post que explique el funcionamiento de Storm podéis seguir su tutorial.

Qué es PI System

PI System de es un producto que permite gestionar los datos y eventos de tiempo real.

El objetivo de PI System es convertir estos datos de tiempo real en acciones, para eso rutea datos de tiempo real a lo largo de toda la infraestructura.

Los módulos que componen PI System son:

Veamos cada uno de los módulos funcionales dentro de PI System:

COLLECT:

· PI Interfaces provee un mecanismo estándar para la recolección de datos.

· Ofrece conexión con más de 400 datasources, como PLCs, bases de datos, ficheros, SCADAs, HTML, XML,… (lista completa de interfaces)

· Soporta estándares OPC, OLEDB, Modbus, DNP3, BACnet o SNMP

· PI Interfaces conecta las fuentes de datos con el Sistema PI para permitir el acceso en tiempo real a datos actuales e históricos.

· Las fuentes de datos se integran de forma independiente al protocolo, fuente, vendedor,…

HISTORIZER:

· Los sistemas de producción producen una gran cantidad de datos desde diversas fuentes, la gestión de estos datos (almacenar, distribuir,….) es muy costosa.

· El PI Server es el motor que se encarga de recolectar los datos de tiempo real, archivarlos y distribuirlos.

o Los datos son almacenados instantáneamente en el PI Server y disponibilizaros para usuarios en tiempo real.

o Puede disponibilizar décadas de datos de forma transparente

o Optimiza el almacenamiento de datos para usar la menos cantidad de recursos

o Funciona en HA (Alta disponibilidad)

o Soporta escalabilidad horizontal y vertical

FIND:

· En los sistemas existe una gran cantidad de datos que proviene de diversas fuentes (medidas, procesos Batch, cálculos,…)

· PI System permite buscar datos basado en tags, contexto,…

ANALYZE:

· PI Analytics suministra análisis en tiempo real y permite a los usuarios analizar y agregar datos históricos y de tiempo real en Key performance indicators (KPIs).

· Estos análisis se pueden compartir.

· PI Analytics se compone de varios productos que permiten generar alarmas, sumarizar, Statistical Quality Control, ecuaciones,…

DELIVER:

· SIsoft’s PI Data Access y PI Notifications ofrecen la funcionalidad para conectar con personas y sistemas entregando los datos que necesitan.

· PI Data Access ofrece conexión por OLE, JDBC, Web Services,…

· PI Notifications permite entregar información ante el trigger de una condición configurada. Soporta acknowledgement y escalado de notificaciones.

VISUALIZER:

· PI ProcessBook permite:

o Diagrámas gráficos intuitivos

o Datos en tiempo real

o Diagramas que muestran diversos activos.

o Diagramas que muestram unidades similares

o Tendencias de datos fáciles

o Notas de puntos de datos

o Indicadores intuitivos de estatus muestran la “salud” de los datos

o Amplia librería de símbolos prediseñados

· PI ActiveView

· PI WebParts integra tus datos con las capacidades de Microsoft Office SharePoint Server.

· PI por Office es un paquete que permite mostrar datos de negocio en la suite de Office:

Arquitectura típica PI System

Publicado en Tiempo Real. 2 Comments »

OpenSplice DDS: Solución DDS de Tiempo Real

es un DDS (Data Distribution Service) de mensajería de tiempo real, capaz de dar un comportamiento determinista incluso cuando coordina muchos mensajes.

Es un bus de mensajería pensado para sistemas críticos o con una gran cantidad de mensajes, se usa en sectores aeroespaciales y de defensa, así como en industria, telcos y en SCADAs.

La Arquitectura de OpenSplice DDS es abierta, su núcleo básico está disponible como Open Source (licenciado bajo LGPLv3).

También ofrece diferentes paquetes de suscripción que aseguran a los clientes la actualización y el soporte de la tecnología por el fabricante, añadiendo módulos interesantes:

Algunas de las características más interesantes de OpenSplice DDS son:

· Rendimiento: puede distribuir millones de datos por segundo con latencias de microsegundos.

· Basado en estándares: API para OMG Data Distribution Service for Real-Time Systems (DDS) v1.2 y para OMG Data Distribution Service Interoperability v2.1

· Soporte Plataformas: Soporta SO Linux, Windows, AIX y Solaris, además de VxWorks, INTEGRITY,…. Su API está disponible en C, C++, Java y C#.

· Muchas implantaciones: en diferentes áreas.

Podéis consultar su Getting Started aquí. y su Guía de Referencia Java

OpenSplice DDE ofrece una herramienta de modelado llamada Power Tools basada en Eclipse que simplifica la creación de aplicaciones.

Aquí se pueden ver algunos de sus partners y de sus usuarios:

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 408 seguidores

%d personas les gusta esto: