# Cámara

# 8 Cámara

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-gconrhz7.jpeg)

# 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**:

```cpp+lineNumbers:true
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:

1. Utilizando un programa en Python
2. Utilizando MJPG STREAMER bajo un programa servidor WEBIOPI
3. Utilizando **Motion** (recomendamos)

La primera opción [video](https://www.youtube.com/watch?v=fCTc1sBQwi8) o [este tutorial](https://randomnerdtutorials.com/video-streaming-with-raspberry-pi-camera/) 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 ](https://catedu.github.io/raspberry-muy-basico/8-vnc/81-vnc-server.html) ya activamos **VNC Server y SSH**, ahí también están la opciones de **activar la cámara y Remote GPIO**.

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-t1ugpfxm.jpeg)

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

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-pmwfx34g.jpeg)

Y activas la cámara y Remote SSH en las opciones P1 y P8 :

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-gnoacc63.jpeg)

# 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](https://projects.raspberrypi.org/en/projects/parent-detector)
- [Que nos envíe un email con una foto cuando detecta uno movimiento](https://www.instructables.com/Raspberry-Pi-Motion-Detector-and-Alert-System/)

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-bjuvjd9t.png)

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í](https://motion-project.github.io/motion_config.html)

## Cómo hacerlo

Abrimos una ventana de comandos, en SSH, [ya sabes cómo](https://catedu.github.io/raspberry-muy-basico/5-ssh.html) 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](https://raspberrypi.stackexchange.com/questions/108419/stream-raspberry-pi-camera-on-web-page):
- **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](https://raspberryparatorpes.net/instalacion/conectar-una-webcam-con-motion-en-raspberry-pi/) 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)

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-gef2bzoz.jpeg)

## ¿Cómo se ve desde la red local?

Pues abrimos un navegador y ponemos la dirección a través del puerto que le hemos dicho en stream\_port o sea 8081

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](https://raspberrypi.stackexchange.com/questions/107868/motion-security/107872#107872)

## ¿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.

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-3xtymy91.jpeg)

Entramos ahora en un ordenador a remote.it en nuestros "Devices" y pinchamos en el servicio que hemos creado:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-dae9wez1.jpeg)

Y automáticamente nos abre el navegador con la webcam funcionando

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-cwj6xuln.jpeg)

(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

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-w8rhttcp.jpeg)

Y copiamos el ID del servicio que queremos borrar:

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-qdpwkoga.jpeg)

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

![](https://libros.catedu.es/uploads/images/gallery/2022-02/embedded-image-oplzgfnt.jpeg)

### 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](https://catedu.github.io/raspberry-muy-basico/11-conectando-desde-internet.html)

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

ojo en el navegador de la Raspberry no en tu ordenador.