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:0Esto 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.
Buenas,
ResponderEliminarIgual 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/
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.
Eliminar2 FPS, son 2 fotogramas por segundo ... un ñordo.
si kieres mas fps puedes stremear en vez de cn raspistill a base de imagenes cn raspivid stremearlo a su vez cn netcat luego ya en el pc que quieras rediriges el stream hacia una named pipe y luego lo lees cn un script de opencv en el lenguaje que quieras o simplemente via mplayer , con eso tienes 32 fps facil que creo k es el maximo que soporta la picamara
Eliminarel pc ubuntu/debian(supongo que windows tendrá sus comandos equivalentes, pero en el caso de netcat influye mucho la versión):
$sudo nano streamScript.sh
#!/bin/bash
#comprobamos si existe el pipe i si existe lo borramos.
if [ -p fifo.stream ]
rm fifo.stream
fi
#creamos un nuevo pipe
mkfifo fifo.stream
#escuchamos el stream cn netcat i lo guardamos dentro del pipe
nc -l -v -p 6969 > fifo.stream
guardamos el archivo y le damos permisos $sudo chmod 755 streamScript.sh
en la pi:
raspivid -hf -w 600 -h 480 -o - -t 0 -fps 32 -b 20000000 | nc 192.xxx.xxx.xxx 6969
con eso empezamos el stream i lo pasamos por socket via netcat a la direccion ip tiene que ser la del pc que ara de server donde ejecutaremos el script anterior.
luego ya depende del lenguaje que utilizes para programar desde c solo capturalo desde stdin '/dev/stdin' desde python bueno mejor os paso la solucion de python en overflow no es muy complejo. pero si largo de explicar aki. xD https://stackoverflow.com/questions/35166111/opencv-python-reading-video-from-named-pipe
si kieres mas resolucion solo subela no ifluye mucho en los fps finales, los fps que tendras depende mas de tu conexion a internet. Si no te interesa reeditarla cn ningun lenguaje solo pasa del script de la pipe y en vez de pasarselo, lo pasas por ejemplo al mplayer:
nc -l -v -p 6969 | mplayer -fps 200 -demuxer h264es -
un saludo espero k le sirva a alguien xP
Felicidades, la verdad me molan tu tutos son interesantisimos, espero ver la torreta con los 2 servos tiene que ser una pasada.
ResponderEliminarCuidado con tu gato! Domokun está escondido en la estantería!! :O
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
EliminarEste comentario ha sido eliminado por el autor.
EliminarAqui os dejo un video tutorial de raspi con netcat y en el pc mplayer
ResponderEliminarsin apenas retado , y he conseguido 1024x768 sin retardo .
el video esta en youtube : Raspberry pi camara en castellano
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?
EliminarEsto es lo mejor que es visto con respecto poco retardo en streaming con las raspberry
ResponderEliminarhttp://raspberrypiwonderland.wordpress.com/2014/01/15/awesome-camera-app/
pero hace streaming?
Eliminarsudo modprobe bcm2835-v4l2 y ya tienes el /dev/video0 para funcionar con motion o lo que se antoje. Saludos
ResponderEliminar