jueves, 8 de agosto de 2013

Streaming de video desde RaspberryPi (parte 4)

Con la Raspicam (Raspberry Pi Camera Board)

Bueno, despues de 583 intentos más, retomo el tema del videostreaming, en este caso con la raspicam, la cámara "oficial" de Raspberry Pi, con muy buena pinta, no muy cara ... pero que en mi caso es un poco desilusionante (por ahora).

No voy a entrar a especificar como instalar y probar la raspicam, porque para eso tenemos la web oficial, con todo explicado muy clarito.
Una vez que hemos comprobado que efectivamente funciona, te darás cuenta que no te crea un dispositivo de video linux, del tipo /dev/videoX, como si haría cualquier webcam usb. Se supone que como está en beta (seguramente nunca pasará de ahí) "si quieres que haga algo, prográmalo tú mismo"
¿Y esto qué quiere decir? Pues que en realidad la raspicam es un dispositivo externo de vídeo  por lo que la vamos a pasar canutas para poder trastearla.
Después de pelearme con el cacharro y ver 200 ejemplos en youtube, google, foros, grupos ... he visto que la mejor forma de usarla para hacer streaming, es capturando fotos, por lo que la característica de "30 fps a 1080p", mejor la vamos olvidando.
Bueno, necesitamos mjpg-streamer, que he instalado de nuevo siguiendo mis propias instrucciones.

Capturando fotogramas

Vamos a tener una tasa de refresco de 2 FPS (más o menos) con hasta 1080p de calidad. Para ello ejecutamos:
mkdir /tmp/stream/
raspistill -w 640 -h 480 -q 10 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0
Esto captura a la calidad que le indiquemos (640x480 para las pruebas) y lo guarda continuamente en un único archivo de imagen /tmp/stream/pic.jpg. La calidad esta a un 10% (parámetro -q), cuanto más la aumentes, más ancho de banda necesitarás.

Captura a 640x480:
Captura a 1920x1080:

Configurando el streaming

Como ya he comentado, necesitamos tener instalado el mjpeg-streamer. Para lanzarlo correctamente, ejecutaremos:
cd /usr/src/mjpg-streamer/mjpg-streamer/
/mjpg_streamer -i "/usr/src/mjpg-streamer/mjpg-streamer/input_file.so -f /tmp/stream/" -o "/usr/src/mjpg-streamer/mjpg-streamer/output_http.so -w /usr/src/mjpg-streamer/mjpg-streamer/www/"
Creo que no necesita más explicaciones. Ahora desde un navegador (que puede ser el del Android) vamos a http://ip_del_raspberry:8080 y ahí veremos una web con varios ejemplos, vamos al menú de la izquierda y seleccionamos stream, que es el más compatible. Puedes directamente ir a http://ip_del_raspberry:8080/stream_simple.html que de hecho es la url que tendrás que configurar en ZoneMinder o cualquier otro.

Resultados

En la parte de calidad, es perfecto, 1080p, ahí no hay quejas. La tasa de refresco es algo baja, unos 2 FPS, pero aún así es mayor que las cámaras de seguridad convencionales.
La mejor parte es sin duda la carga de micro, que no llega ni al 2%:
Lo siguiente es combinar la raspicam con dos servos para hacer una torreta de vigilancia e integrarla con OpenCV para detectar movimientos, gestos, caras y personas. Y posiblemente le ponga un arma para matar zombies.

12 comentarios:

  1. Buenas,
    Igual es que hoy estoy mas espeso que otros dias pero ¿2FPS = 2 Frames por segundo? Me parece poquisimo!

    Y si te puedo hacer la consulta... por que utilizas rapistill en vez de raspivid? este comando te permite elegir tamaño de imagen y fps mediante los parametros, y usando vlc podrias recodificar al vuelo (dentro de las limitaciones de la reaspberry, claro.)

    Vi informacion al respecto en http://www.mybigideas.co.uk/RPi/RPiCamera/

    ResponderEliminar
    Respuestas
    1. eso ya lo probé, pero necesito que sea compatible con algo standard, necesito verlo desde android, windows, smartv, por dlna, java, xbmc, OpenCV, motion, zoneminder, ... y así es de la única forma que lo he conseguido. Con el añadido que necesitaba un retardo de un segundo o menos.
      2 FPS, son 2 fotogramas por segundo ... un ñordo.

      Eliminar
  2. Felicidades, la verdad me molan tu tutos son interesantisimos, espero ver la torreta con los 2 servos tiene que ser una pasada.

    ResponderEliminar
  3. Cuidado con tu gato! Domokun está escondido en la estantería!! :O

    ResponderEliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
  5. Aqui os dejo un video tutorial de raspi con netcat y en el pc mplayer

    sin apenas retado , y he conseguido 1024x768 sin retardo .

    el video esta en youtube : Raspberry pi camara en castellano

    ResponderEliminar
    Respuestas
    1. Hola, esa es una solución a medias, como ya he comentado en otra ocasión ¿cómo integras eso con motion o cualquier otro?

      Eliminar
  6. Esto es lo mejor que es visto con respecto poco retardo en streaming con las raspberry

    http://raspberrypiwonderland.wordpress.com/2014/01/15/awesome-camera-app/

    ResponderEliminar
  7. sudo modprobe bcm2835-v4l2 y ya tienes el /dev/video0 para funcionar con motion o lo que se antoje. Saludos

    ResponderEliminar