# Cámara

# 8. Cámara

Los rover llevan más de una cámara:

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

[The Cameras on the Mars 2020 Perseverance Rover Nasa.gov](https://mars.nasa.gov/mars2020/spacecraft/rover/cameras/)

Nosotros.... una 🎥 😁 la [standard de la Raspberry](https://www.raspberrypi.org/products/camera-module-v2/):

![](https://libros.catedu.es/uploads/images/gallery/2022-03/embedded-image-rjkbd2ee.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 la imagen por el puerto HDMI, en este caso durante 10 segundos **Pero no sale por VNC ni por SSH**:

```Python
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, y no tiene instalado un monitor, luego lo tiene que hacer vía red.

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 ([https://webiopi.trouch.com/](https://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 es [https://motion-project.github.io/index.html](https://motion-project.github.io/index.html) .

# 8.2 Configuracion

Lo primero que tienes que hacer es activar la cámara y Remote GPIO

<p class="callout info">¿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**.</p>

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

Si estás utilizando la Raspberry pero no de forma gráfica con VNC sino textual con SSH el comando a utilizar es

```shell
sudo raspi-config
```

entra en la opción 5

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

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

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

# 8.3 Motion

Vamos a ver lo que sale por la cámara de forma remota :

[![image-1648026812597.gif](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648026812597.gif)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648026812597.gif)

[Imagen de Gifer](https://gifer.com/en/Cfg)

# MOTION

Esta librería open-source muy utilizado en sistemas de alarma con la Raspberry

(🤔🤔🤔🤔 hacer un sistema de videovigilancia📹 de mi casa 🏠a distancia 📡 y monitorizar 📺 por muy bajo coste... 🤔 que envíe una foto a mi email cuando detecte un movimiento) puedes verlo aquí cómo se hace: [https://sites.google.com/view/javierquintana/raspberry/alarma?authuser=0](https://sites.google.com/view/javierquintana/raspberry/alarma?authuser=0)

[![image-1648026877485.png](https://libros.catedu.es/uploads/images/gallery/2022-03/scaled-1680-/image-1648026877485.png)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648026877485.png)

[Parent detector](https://projects.raspberrypi.org/en/projects/parent-detector)

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) o en el mismo VNC de forma gráfica abre la ventana de comandos, y ejecutamos estas órdenes:

Instalamos MOTION :

```shell
sudo apt-get install motion
```

Editamos el fichero de configuración motion.conf con el editor nano

```shell
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

```shell
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

`<strong>sudo nano /etc/rc.local</strong>` y añadimos sudo motion al final (he puesto un comentario mi script optativo)

[![image-1648026975944.jpg](https://libros.catedu.es/uploads/images/gallery/2022-03/scaled-1680-/image-1648026975944.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648026975944.jpg)

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

```shell
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.

[![image-1648027047268.jpg](https://libros.catedu.es/uploads/images/gallery/2022-03/scaled-1680-/image-1648027047268.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648027047268.jpg)

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

[![image-1648027054061.jpg](https://libros.catedu.es/uploads/images/gallery/2022-03/scaled-1680-/image-1648027054061.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648027054061.jpg)

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

[![image-1648027070952.jpg](https://libros.catedu.es/uploads/images/gallery/2022-03/scaled-1680-/image-1648027070952.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648027070952.jpg)

[![image-1648027074434.gif](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648027074434.gif)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648027074434.gif)

[Imagen de Gifer](https://gifer.com/en/Cfg)

### Vale, pero .. ¿y cómo se quita un servicio de Remoteit?

Entramos en al página web en el device en cuestión

[![image-1648027096098.jpg](https://libros.catedu.es/uploads/images/gallery/2022-03/scaled-1680-/image-1648027096098.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648027096098.jpg)

Y copiamos el ID del servicio que queremos borrar:

[![image-1648027112867.jpg](https://libros.catedu.es/uploads/images/gallery/2022-03/scaled-1680-/image-1648027112867.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648027112867.jpg)

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

[![image-1648027124853.jpg](https://libros.catedu.es/uploads/images/gallery/2022-03/scaled-1680-/image-1648027124853.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648027124853.jpg)

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