Cámara
8 Cámara
8.1 ¿Qué vamos a hacer?
Manejar la cámara web es fácil si queremos que salga por la salida HDMI de la Raspberry, simplemente ejecutando el siguiente código Python sale, en este caso durante 10 segundos Pero no sale por VNC ni por SSH:
from picamera import PiCamera
from time import sleep
camera = PiCamera()
camera.start_preview()
sleep(10)
camera.stop_preview()
Pero nosotros necesitamos que retransmita = streaming las imágenes, pues el robot se mueve, no tiene instalado un monitor.
Encontrarás en Internet varias formas de hacerlo:
- Utilizando un programa en Python
- Utilizando MJPG STREAMER bajo un programa servidor WEBIOPI
- Utilizando Motion (recomendamos)
La primera opción video o este tutorial dependes de tener todas las librerías intaladas, por ejemplo limmal ...
La segunda opción WEBIOPI (http://webiopi.trouch.com/) siguen con la versión 0.7.1 sin actualizar luego no lo recomendamos
Vamos a usar Motion, un programa diseñado para manejar la cámara en estos contextos y sí que está actualizado (actualmente por la 4.3.1) y muy extendido en el uso de cámaras web, lo que nos da unas garantías de no tener problemas, su página web oficial https://motion-project.github.io/index.html .
8.2 Configuracion
Lo primero que tienes que hacer es activar la cámara y Remote GPIO
¿Recuerdas? En el capítulo 8.1 de Raspberry básico ya activamos VNC Server y SSH, ahí también están la opciones de activar la cámara y Remote GPIO.
Si estás utilizando la Raspberry pero no de forma gráfica con VNC sino textual con SSH el comando a utilizar es
sudo raspi-config
entra en la opción 5
Y activas la cámara y Remote SSH en las opciones P1 y P8 :
8.3 Motion
Esta librería open-source muy utilizado en sistemas de alarma con la Raspberry (🤔🤔🤔🤔 hacer un sistema de videovigilancia📹 de mi casa 🏠a distanci📡 y monitorizar 📺 por muy bajo coste... 🤔 ), se pueden encontrar proyectos interesantes como :
- Que grabe en un vídeo cuando detecta un movimiento
- Que nos envíe un email con una foto cuando detecta uno movimiento
Pero nosotros NO nos interesa que detecte movimiento, sino que simplemente haga streaming.
Para esto, simplemente modificaremos el fichero de configuración de la librería motion.conf. Es muy típico modificar ficheros de configuración tipo texto en los softwares abiertos, lo que muestra su versatilidad y potencialidad. Puedes ver las diferentes posibilidades de configuración de Motion aquí
Cómo hacerlo
Abrimos una ventana de comandos, en SSH, ya sabes cómo y ejecutamos estas órdenes:
Instalamos MOTION :
sudo apt-get install motion
Editamos el fichero de configuración motion.conf con el editor nano
sudo nano /etc/motion/motion.conf
Buscamos estas líneas y las modificamos :
- stream_localhost on lo cambiamos por off si es on sólo localhost puede abrirlo, si es off pueden todos:
- stream_localhost off
- si vemos #stream_port 8081 y como queremos abrirlo por ese puerto, le quitamos el hastag, o sea lo dejamos así,:
- stream_port 8081
- Si vemos daemon off lo cambiamos por
- daemon on
Si estuvieran estas líneas webcam_localhost on y webcam_port 8080 las borramos, o mejor las dejamos como comentarios poniendo delante un hastag # así #webcam_localhost on #webcam_port 8080.
En esta página podemos ver otra configuración de motion.conf para el mismo propósito de streaming.
Grabamos el fichero: pulsando Ctrl+X se sale pero preguntará si queremos grabar el fichero con el mismo nombre, le decimos que sí
Finalmente ejecutamos motion con esta orden
sudo motion
Si queremos que se ejecute de forma automática cuando arranque la raspberrypi editamos el fichero /etc/rc.local y al final le ponemos esa instrucción. Es decir
sudo nano /etc/rc.local y añadimos sudo motion al final (he puesto un comentario My script optativo)
¿Cómo se ve desde la red local?
http://---LA-DIRECCION-DE-LA-RASPBERRY--:8081
es decir si la dirección es 192.168.1.25 entonces tecleamos http://192.168.1.25:8081
Si queremos un protocolo seguro https mirar esta página
¿Y desde Internet?
Opción instalar un nuevo servicio
No se puede hacer gráficamente en la página Remote.it no sabemos por qué. Hay que hacerlo con comandos con SSH.
sudo remoteit add -h
Nos sale una lista de servicios que podemos añadir, tecleamos el ID del servicio que queremos añadir en este caso vemos en la figura que el 7 es HTTP.
Nos pide el puerto, ponemos 8081 el mismo que en Motion
Un nombre para el servicio, le hemos puesto webcam, y hecho lo que tienes que hacer en la Raspberry.
Entramos ahora en un ordenador a remote.it en nuestros "Devices" y pinchamos en el servicio que hemos creado:
Y automáticamente nos abre el navegador con la webcam funcionando
(en este caso he utilizado el robot para vigilar la impresora 3D)
Vale, pero .. ¿y cómo se quita un servicio de Remoteit?
Entramos en al página web en el device en cuestión
Y copiamos el ID del servicio que queremos borrar:
Y ejecutamos la orden sudo remoteit remove --id y la ID que queremos borrar es decir en mi caso :
sudo remoteit remove --id 80:00:00:00:01:0A:18:DF
Opción cutre con VNC
Si lo anterior por alguna razón fallara o remote.it quita el servicio HTTP, puedes ver la cámara por VNC.
Tienes que acceder a la Raspberry desde Internet con VNC mira estos apuntes
Una vez accedido por VNC remotamente podemos abrir el navegador de la misma Raspberry y la IP de él mismo es 127.0.0.1 luego abrir
http://127.0.0.1:8081