====== Configuración de Cámara Raspberry ======
Una de las aplicaciones más utilizadas en Raspberry es el uso de cámaras, para utilizar Tensorflow y darle la capacidad de detectar objetos. Ahora que la Raspberry Pi es lo suficientemente rápida para realizar el aprendizaje automático, agregar estas funciones en proyectos es más sencillo.
Esta guía le mostrará los pasos para aprender a conectar el módulo de cámara Raspberry Pi, tome fotografías, grabe videos y aplique efectos de imagen.
Es importante conocer bien el módulo de cámara antes de comenzar a crear nuestras aplicaciones.
Sin mas que decir comencemos.
===== 1.Materiales =====
Existen múltiples opciones pero en esta guía te daré dos opciones para que elijas la que te agrade más, por parte de Raspberry Pi existen dos módulos de cámara hablaré de ellos más adelante.
* Laptop
* Raspberry Pi 4
* Fuente de alimentación (De preferencia adquirir junto con tu Raspberry la fuente oficial para no tener ningún problema, si es que no tienes mucha experiencia [[https://www.raspberrypi.org/products/type-c-power-supply/|USB-C Power Supply]]
* Smartphone con función Mobile Hotspot
* Tarjeta Micro SD
* [[https://www.adafruit.com/product/4561|Raspberry Pi High Quality Camera]] (es la que usare en esta guía, pero puedes utilizar la [[https://www.adafruit.com/product/3099|Raspberry Pi Camera Board v2]] es la versión anterior y mas económica.)
* [[https://www.adafruit.com/product/4563|6mm 3MP Wide Angle Lens for Raspberry Pi HQ Camera - 3MP]] (el modulo HQ camera, nos permite utilizar lentes, este elemento es opcional en caso de utilizar la segunda opción de cámara.
* [[https://www.adafruit.com/product/2087|Flex Cable for Raspberry Pi Camera]] (suele venir incluido en la compra de los módulos Raspberry Pi Camera).
* Trípode de cámara (**Nota: solo en caso de usar el módulo HQ.** la ventaja del módulo HQ es que cuenta con una montura para trípodes con standard 1/4”-20, que es con el que cuentan la mayoría de los trípodes actuales, te dejo un link de una opción de compra en [[https://www.amazon.com.mx/Ubeesize-tel%C3%A9fono-ajustable-distancia-Universal/dp/B06Y2VP3C7/ref=sr_1_3?__mk_es_MX=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=%C2%BC%22-20+tripod&qid=1620010127&refinements=p_36%3A9841539011&rnid=9754432011&s=electronics&sr=1-3|Amazon]])
Opcional:
* [[https://learn.adafruit.com/raspberry-pi-hq-camera-case/3d printing|Raspberry Pi HQ Camera Case]] (En caso de que cuentes con una impresora 3D o de hacer impresiones 3D te dejo un link para que puedas imprimir una carcasa en forma de cámara, mas adelante te dejo la imagen de como se vería).
* Si utilizas el Case, necesitarás tornillos a la medida [[https://www.adafruit.com/product/3299|M2.5]], necesitaremos de 12mm y 8mm de largo, aunque para aprovechar puedes comprar algunos de 10mm y 5mm pueden ser útiles para otros proyectos, los puedes conseguir en Amazon o tiendas especializadas en electrónica.
{{:guias:guias:camaraguia:20210502_132013.jpg|20210502_132013.jpg}}
En caso hicieras uso del modelo 3D aquí tienes una imagen de cómo se vería, esta increíble no lo crees?
{{ guias:guias:camaraguia:raspberry_pi_hero-camera.jpg }}
Ahora hablaremos de los dos modulos que mencione.
==== 1.1 HQ Camera module ====
Este módulo es el más reciente accesorio de cámara Raspberry Pi. Ofrece una resolución más alta (12 megapíxeles, en comparación con la anterior de 8 megapíxeles) y sensibilidad (aproximadamente un 50% más de área por píxel para rendimiento mejorado en condiciones de poca luz) que el módulo de cámara v2 existente, y está diseñado para funcionar con lentes intercambiables en montura C y CS. Se pueden utilizar otros lentes utilizando adaptadores.
Los lentes de 6 mm con montura CS y [[https://www.adafruit.com/product/4562|16 mm]] con montura C son ejemplos de todos los compatibles que existen.
La cámara de alta calidad ofrece una alternativa al módulo de cámara v2.
Para aplicaciones industriales y de consumo, incluidas cámaras de seguridad, que requieren los más altos niveles de fidelidad visual y/o integración con óptica especializada. Es compatible con todos los modelos de Raspberry Pi, la última versión de software.
{{ guias:guias:camaraguia:hq.png }}
{{ guias:guias:camaraguia:6mm.png }}
==== 1.2 Raspberry Pi Camera Board v2 (8 Mp) ====
Este módulo de cámara de 8 Mp es capaz de capturar video de 1080 px e imágenes, se puede conectar a todos los modelos de Raspberry Pi. Listo para conectar y usar, muy adecuado para fotografiar por lapsos, grabar video o para usarlo en aplicaciones de seguridad y en detección de movimientos. Sólo hay que conectar el cable incluido al puerto CSI de la Raspberry Pi.
El módulo es pequeño mide 25 mm x 23 mm x 9 mm y tiene una peso de 3 gr, haciéndola perfecta para aplicaciones móviles u otras en donde el peso es un factor muy importante.
El sensor tiene una resolución de 8 megapíxeles y tiene un lente de enfoque. En cuanto a las imágenes, la cámara es capaz de tomar imágenes estáticas hasta de 3280 x 2464 pixeles y videos de 1830p30.
{{ guias:guias:camaraguia:sin_titulo.png }}
===== 2.Configuración de la cámara =====
==== 2.1 Conexión física ====
Todos los modelos actuales de Raspberry Pi tienen un puerto para conectar el módulo de la cámara.
{{ guias:guias:camaraguia:pi4-camera-port.png }}
**Nota: Si desea utilizar una Raspberry Pi Zero, necesita un [[https://www.adafruit.com/product/3157|cable]] del módulo de la cámara que se ajuste al puerto del módulo de la cámara más pequeño de la Raspberry Pi Zero.**
Conecte el módulo de la cámara
**Asegúrese de que su Raspberry Pi esté apagada.**
- Localice el puerto del módulo de la cámara
- Tire suavemente hacia arriba de los bordes del clip de plástico del puerto
- Inserte el cable plano del módulo de la cámara (**Nota: asegúrese de que el cable esté en la dirección correcta. El lado azul del cable va mirando hacia el conector jack y de los puertos USB**)
- Vuelva a colocar el clip de plástico en su lugar.
{{ guias:guias:camaraguia:connect-camera.gif }}
{{ guias:guias:camaraguia:ribon.png }}
La forma mas simple de conectar el modulo HQ en mi caso se vería de la siguiente forma:
{{ guias:guias:camaraguia:20210502_140006.jpg }}
Yo opté por solamente utilizar el soporte de la cámara con la Raspberry por lo que te mostraré un poco de cómo utilice los tornillos y el resultado final.
{{ guias:guias:camaraguia:20210502_134233.jpg }}
{{ guias:guias:camaraguia:20210506_110038.jpg }}
{{ guias:guias:camaraguia:20210506_110052.jpg }}
Ahora solo faltaría conectar el lente que en esta ocasión utilicé el de 6mm, puedes saltarte esta parte y pasar a la parte 2.2 si es que utilizaste la opción V2 de 8 Mp.
{{ guias:guias:camaraguia:diseno_sin_titulo.png }}
Tenemos que quitar la tapa anti-polvo para el lente de 6mm y el adaptador C-CS entonces nos quedaría de la siguiente forma:
{{ guias:guias:camaraguia:hq.png }}
Los lentes vienen con dos tapas una del lado del lente y otra por la entrada que conecta al modulo.
=== 2.1.1 Colocación del lente ===
La lente de 6 mm tiene montura CS, por lo que no necesita el anillo adaptador C-CS. No se enfocará correctamente si el adaptador está instalado, así que, si es necesario, retírelo.
Luego, gire la lente en el sentido de las agujas del reloj hasta el final para dejarlo conectactado con el anillo de ajuste del enfoque posterior. **No debe apretarse con mucha fuerza por que puedes dañar el lente o el modulo, solamente que quede firme.**
{{ guias:guias:camaraguia:gira.png }}
=== 2.1.2 Ajuste de enfoque anillo posterior y tornillo de bloqueo ===
El anillo de ajuste del enfoque posterior debe estar atornillado completamente para la distancia focal posterior más corta posible. Utilice el tornillo de bloqueo del enfoque posterior para asegúrarse de que no se mueva de esta posición al ajustar la apertura o el enfoque (Al comprar el modulo HQ incluye un atornillador de la medida exacta para poder manipular el tornillo de bloqueo).
{{ guias:guias:camaraguia:atornilla.png }}
Ya listo e instalado nuestro lente se verá de la siguiente forma.
{{ guias:guias:camaraguia:20210502_143918.jpg }}
Una vez ya instalado el lente y conectado el módulo a nuestra Raspberry podemos seguir con la configuración al encender e ingresar por VNC.
==== 2.2 Configuración de Raspberry Pi por VNC. ====
- Enciende tu Raspberry Pi.
- Ingresa por VNC desde tu ordenador a tu Raspberry.
- Vaya al menú principal y abra **Raspberry Pi Configuration**.
{{ guias:guias:camaraguia:pi-configuration-menu.png }}
Seleccione la pestaña **Interfaces** y asegúrese de que la cámara esté habilitada (**enabled**).
{{ guias:guias:camaraguia:1cameraenable.png }}
Reinicia tu Raspberry Pi.
{{ guias:guias:camaraguia:3.png }}
Una vez reiniciada, pasaremos a hacer unos cambios en VNC dentro del escritorio de Raspberry, al ejecutar algunos comandos nos mostrará la vista previa de lo que va a capturar en VNC no es posible a menos de que hagamos estos cambios. Lo primero es dirigirnos al icono de VNC y dar clic.
{{ guias:guias:camaraguia:terminal.png }}
Nos abrirá la siguiente ventana, donde encontraremos en la parte derecha un recuadro daremos clic.
{{ guias:guias:camaraguia:vnc1.png }}
Daremos clic en "Options".
{{ guias:guias:camaraguia:options.png }}
Nos iremos a la pestaña "Troubleshooting".
{{ guias:guias:camaraguia:2021-05-02-152414_1024x768_scrot.png }}
Daremos clic en la casilla "Enable direct capture mode" y después daremos clic en Apply . Esto nos permitirá ver la vista previa de lo que está capturando nuestro modulo cámara. Se irá a pantalla negra unos segundos y cuando recupere la imagen estará listo, no es necesario pero puedes reiniciar la Raspberry para comenzar con el siguiente paso.
{{ guias:guias:camaraguia:2021-05-02-152426_1024x768_scrot.png }}
Por el momento la cámara está desenfocada así que necesitamos ejecutar un comando para poder tener acceso a la vista. Así que vamos a abrir la terminal de Raspberry.
{{ guias:guias:camaraguia:4terminal.png }}
raspistill es una herramienta de comandos para capturar imágenes de la cámara. Para verificar que la cámara está instalada correctamente y usar la cámara sólo como un visor, sin guardar una foto, ingresa este comando:
raspistill -t 0
Nos dará de seguro una imagen borrosa en el caso del modulo HQ para el módulo V2 no tendrá mayor problema.
{{ guias:guias:camaraguia:6.png }}
Ahora veremos los pasos para enfocar el modulo con su lente.
{{guias:guias:camaraguia:yes.png}}
=== 2.2.1 Apertura ===
Para arreglar esto hay que ajustar la apertura, mantenga la cámara con el objetivo en dirección opuesta a usted. Gire el anillo del medio mientras sostiene el anillo exterior, más alejado de la cámara, estable. Turno en el sentido de las agujas del reloj para cerrar la apertura y reducir brillo de la imagen. Gire en sentido antihorario para abrir la apertura. Una vez que estés feliz con la luz nivel, apriete el tornillo en el lateral de la lente para bloquear la apertura.
{{ guias:guias:camaraguia:aprtura.png }}
=== 2.2.2 Enfoque ===
Primero, bloquee el anillo de enfoque interno, etiquetado
"NEAR FAR", en posición apretando su tornillo. Ahora sostenga la cámara con la lente de espaldas a ti. Sostenga los dos exteriores anillos de la lente y gírese en el sentido de las agujas del reloj hasta que la imagen esté enfocada, tomará cuatro o cinco vueltas enteras. Para ajustar el enfoque, gire los dos anillos exteriores en el sentido de las agujas del reloj para enfocar un objeto cercano. Gire en sentido antihorario para centrarse en un objeto distante.Lo mas seguro es que necesitarás ajustar la apertura nuevamente después de esto cada que quites y pongas el lente.
{{ guias:guias:camaraguia:enfoque.png }}
Después de enfocar, tendremos que cerrar la ventana, tal vez no podamos por que la imagen es muy grande y no aparece el icono de cerrar, en ese caso tendremos que acceder por SSH y usar el comando:
sudo reboot
Para poder acceder de nuevo por VNC.
=== 2.2.3 Prueba imagen.jpg ===
Ahora deberías ver una imagen clara y podrás tomar una fotografía de prueba ingresando el comando:
raspistill -o test.jpg
Cuando presione ENTER, aparecerá una imagen de vista previa en vivo, y después de un período predeterminado de cinco segundos, la cámara capturará una única imagen fija. Esto se guardará en su carpeta de inicio y llamado test.jpg.
{{ guias:guias:camaraguia:2021-05-02-162452_1024x768_scrot.png }}
Así se ve la imagen que tomé con este comando:
{{ guias:guias:camaraguia:test.jpg }}
=== 2.2.4 Prueba video ===
Para grabar videos, raspivid es lo que necesitas. Pruébalo con este comando de Terminal:
-t 10000 es el tiempo que va a estar grabando video, 10000 milisegundos serían 10 segundos de grabación, .h264 es el formato de video para reproducir en vlc, reproductor que incluye el Raspberry Pi OS, en caso de que quieras cambiar el formato por MP4 que es un formato más común y amigable para edición, al final te dejare algunos comandos y ligas para esto.
raspivid -t 10000 -o testvideo.h264
{{ guias:guias:camaraguia:2021-05-06-111139_1024x768_scrot.png }}
Podremos ver la vista previa del archivo y después en la carpeta de Raspberry Pi encontraremos el archivo para poder reproducirlo.
{{ guias:guias:camaraguia:2021-05-06-111916_1024x768_scrot.png }}
===== 3.Controlar el módulo de la cámara con código Python =====
==== 3.1 Vista previa ====
La biblioteca Python ***picamera*** le permite controlar su módulo de cámara y crear proyectos increíbles.
Abra un editor de Python 3, como Thonny Python IDE o aprovechando el tutorial anterior [[https://github.com/fullmakeralchemist/gitvscode|VS Code en Raspberry Pi]] podemos usar el VS Code, crearemos una carpeta en el escritorio llamada camera o cámara, daremos clic derecho para abrir las opciones, seleccionaremos "Open current folder in terminal", para abrir directamente el folder y la terminal, también puedes hacer esto en la terminal con el comando cd para ubicarnos en la carpeta camera.
Una vez ubicados en dentro de la terminal en la carpeta utilizaremos el comando:
code .
Con esto nos abrirá directamente VS Code en la carpeta que vamos a trabajar
{{ guias:guias:camaraguia:2021-05-06-112129_1024x768_scrot.png }}
Abra un archivo nuevo y guárdelo como camera.py.
**Nota: es importante que nunca guarde el archivo como picamera.py**
En VS code podemos encontrar el icono de crear nuevo archivo.
{{ guias:guias:camaraguia:2021-05-06-112835_1024x768_scrot2.png }}
Ahora daremos clic en "CTRL + S" para guardar y nos aparecerá la siguiente ventana. Ingresamos el nombre de nuestro archivo para poder ingresar el código.
{{ guias:guias:camaraguia:2021-05-06-112636_1024x768_scrot.png }}
Antes de ingresar el código debemos asegurarnos de tener instalada la herramienta de Python para VS Code. Verifique con la imagen que tiene instalada la que utilizaremos.
{{ guias:guias:camaraguia:2021-05-06-112745_1024x768_scrot.png }}
Ingrese el siguiente código que nos permitirá hacer la misma función de darnos una imagen previa para verificar que nuestro lente está enfocado si ya hiciste este paso y no has desconectado la cámara puedes omitir este paso y pasar al siguiente código:
from picamera import PiCamera #importa paquete
from time import sleep
camera = PiCamera() #Primero, importamos la clase PiCamera del módulo picamera.
#Usaremos esa clase para tener acceso a la cámara física.
camera.start_preview() #método para iniciar la visualización de la entrada de la cámara.
sleep(5) #tiempo que esta abierta la visualización
camera.stop_preview() #método para cerrar la visualización de la entrada de la cámara.
{{ guias:guias:camaraguia:2021-05-06-112645_1024x768_scrot.png }}
Usamos “CRTL + S” para guardar y ahora abriremos una terminal en VS Code para este proyecto.
{{ guias:guias:camaraguia:2021-05-06-112652_1024x768_scrot.png }}
Ahora podremos ver la terminal en la parte inferior y solo necesitamos correr las líneas de código con el botón que tiene el VS Code en la parte superior derecha (También puedes hacer esto desde la terminal de la forma tradicional y utilizar el comando: //sudo python3 camera.py//)
{{ guias:guias:camaraguia:2021-05-06-112828_1024x768_scrot.png }}
Podrás ver en la parte inferior la ejecución del comando.
{{ guias:guias:camaraguia:2021-05-06-112845_1024x768_scrot.png }}
Al ejecutarse abrira una ventana muy grande que cerrara a los 5 segundos como tenemos definido en //sleep(5)//, tenemos que definir un tiempo si no se mantendra abierta la ventana como en `raspistill -t 0` entonces tendriamos que usar el SSH para ingresar el comando `sudo reboot` para ingresar nuevamente y seguir con el siguiente codigo.
==== 3.2 Fotografia ====
Ahora para tomar algunas fotografías puede crear un segundo archivo en mi caso lo llame cameratake.py, modifique su código para agregar una línea camera.capture ():
**Nota: es importante usar un sleep de al menos dos segundos antes de capturar una imagen, porque esto le da tiempo al sensor de la cámara para detectar los niveles de luz.**
Ejecutar con el botón de VS Code.
{{ guias:guias:camaraguia:2021-05-06-113114_1024x768_scrot.png }}
Debería ver la vista previa de la cámara abierta durante cinco segundos y luego se debe capturar una imagen fija. Mientras se toma la imagen, puede ver la vista previa ajustarse brevemente a una resolución diferente.
Su nueva imagen debe guardarse en el escritorio.
{{ guias:guias:camaraguia:2021-05-06-113130_1024x768_scrot.png }}
==== 3.3 Video ====
¡Ahora graba un video!
Modifique su código para eliminar capture() y en su lugar agregue start_recording() y stop_recording(). Su código debería verse así ahora:
{{ guias:guias:camaraguia:2021-05-06-113254_1024x768_scrot.png }}
Ejecute el código.
Su Raspberry Pi debería abrir una vista previa, grabar 5 segundos de video y luego cerrar la vista previa.
{{ guias:guias:camaraguia:2021-05-06-113306_1024x768_scrot.png }}
===== 4.Extras =====
==== 4.1 Formato de video MP4 ====
Raspberry Pi captura video como un formato de video H264 sin procesar. Muchos reproductores multimedia se negarán a reproducirlo, o lo reproducirá a una velocidad incorrecta, a menos que esté "envuelto" en un formato contenedor adecuado como MP4. La forma más fácil de obtener un archivo MP4 con el comando raspivid es usando MP4Box.
Instale MP4Box con este comando:
sudo apt install -y gpac
Capture su video sin procesar con raspivid y envuélvalo en un contenedor MP4 como este:
Alternativamente, envuelva el formato MP4 alrededor de su salida raspivid existente, con:
MP4Box -add video.h264 video.mp4
Con esto llegamos al fin de esta guía, puedes aprovechar la [[https://github.com/fullmakeralchemist/gitvscode|guía de Git y VS Code]] para subir estos códigos a tu Github, para revisar mas sobre el formato MP4 en Raspberry visita [[https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspivid.md|raspivid]].
Sí quieres saber mas sobre Raspberry Pi y el uso de la cámara visita [[https://projects.raspberrypi.org/en/projects/getting-started-with-picamera/6|Camera Raspberry Pi]].
Visita mi repositorio en Github.