El nuevo Raspberry Pi Camera Module 3 ofrece una calidad de imagen excepcional y una opción entre lentes estándar (75 grados) y anchas (120 grados). Lo mejor de todo es que ahora tenemos enfoque automático. Toma de fotografías con la Picamera2 es fácil, pero a veces solo queremos presionar un botón y tomar una foto, ¡y aparecer en la toma!
En este proyecto usaremos Blue Dot, un módulo de Python y una aplicación de Android para crear un disparador de cámara controlado por Bluetooth. Gracias a la biblioteca fácil de usar de Blue Dot y la estructura detallada de Picamera2, capturaremos fotos de 1080p a través de una pequeña cantidad de código.
Para este proyecto necesitarás
- Una Raspberry Pi 3 o 4
- Una cámara Raspberry Pi
- Un dispositivo Android
Instalación del módulo de cámara Raspberry Pi
1. Abra el puerto de la cámara levantando suavemente el cierre de plástico hacia arriba.
2. Inserte el conector de cinta con la pestaña azul hacia los puertos USB/Ethernet. Los usuarios de Raspberry Pi Zero deberán usar un adaptador y conectar la cámara al puerto en el lado derecho de la placa.
3. Cierra el candado del conector. y déle un tirón muy suave para asegurarse de que esté en su lugar.
4. Encienda la Raspberry Pi en el escritorio. Abra una terminal e instale las últimas actualizaciones de Picamera.
sudo apt update && sudo apt upgrade -y
5. Desde el terminal, comprueba que tu cámara funciona correctamente. El comando libcamera es útil para verificar rápidamente que nuestra cámara está conectada y funciona como se esperaba.
libcamera-hello
Instalación de punto azul
Blue Dot es la creación de Martin O’Hanlon y proporciona un medio verdaderamente simple para controlar de forma remota una Raspberry Pi. El nombre “Blue Dot” representa el gran punto azul que domina la pantalla del dispositivo Android. Vamos a usar Blue Dot como un gran botón azul para activar la cámara y tomar una foto.
1. En su dispositivo Android, abra Google Play Store y busque Blue Dot. Alternativamente siga este enlace.
2. Instale Blue Dot en su dispositivo Android.
3. En tu Raspberry Pi, abra una terminal e instale la biblioteca Python de Blue Dot.
sudo pip3 install bluedot
4. Vaya al menú de Bluetooth, haga clic derecho y seleccione «Hacer reconocible».
5. En su dispositivo Android, vaya a Configuración >> Dispositivos conectados y seleccione Emparejar nuevo dispositivo.
6. Selecciona “raspberrypi” y sigue las instrucciones de emparejamiento. Si su Raspberry Pi tiene un nombre de host diferente, entonces «raspberrypi» no aparecerá, busque su nombre de host.
Con nuestro dispositivo Android y Raspberry Pi ahora conectados, escribiremos un script Python rápido para verificar que Blue Dot pueda comunicarse entre los dos dispositivos.
1. abierto thonyque se encuentra en el menú principal en Programación.
2. Cree un nuevo archivo e importe la biblioteca Blue Dot Python.
from bluedot import BlueDot
3. Crear un objeto, bd, que usaremos para trabajar con la biblioteca.
sudo pip3 install bluedot
4. Espere a que el usuario presione el botón azul. Esta línea de Python es un bloqueador. Esperará hasta que el usuario interactúe. Cuando eso sucede, el código pasa a la siguiente línea.
bd.wait_for_press()
5. Imprime un mensaje en el shell de Python.
print("You pressed the blue dot!")
6. Guarde el código como bd-test.py y haga clic en Ejecutar. El código esperará una conexión desde nuestro dispositivo Android.
7. En su dispositivo Android, abra Blue Dot.
8. Seleccione el nombre de host de su Raspberry Pi. Por lo general, esto es «raspberrypi».
9. Haga clic en el punto azul para activar el código de Python en acción. Debería ver un mensaje en el shell de Python.
Lista completa de códigos de prueba
from bluedot import BlueDot
bd = BlueDot()
bd.wait_for_press()
print("You pressed the blue dot!")
Crear un disparador de cámara con punto azul
El objetivo de este proyecto es crear un disparador de cámara con Blue Dot. Cuando se presiona el botón, se inicia una función en la Raspberry Pi que se encarga de tomar una fotografía.
1. Cree un nuevo archivo e importe la biblioteca Blue Dot Python.
from bluedot import BlueDot
2. Importe Picamera2 y libcamera. La clase de vista previa se utiliza para generar ventanas de vista previa, útiles para encuadrar una toma. La clase de controles de libcamera nos permite usar el enfoque automático con el nuevo Módulo de cámara 3.
from picamera2 import Picamera2, Preview
from libcamera import controls
3. Importe la función de pausa de la señal y luego la biblioteca de tiempo. Se usará la pausa para detener la salida del código. El tiempo retrasará el código después de que se cree una ventana de vista previa, lo que nos dará tiempo para enmarcar una toma.
from signal import pause
import time
4. Crear un objeto, bd, que usaremos para trabajar con la biblioteca.
bd = BlueDot()
5. Crea un objeto, picam2, que nos permitirá utilizar fácilmente la biblioteca Picamera2.
picam2 = Picamera2()
6. Defina una función, take_picture() que se usará para tomar una foto. Las funciones funcionan llamando a su nombre, esto activa la función para ejecutar todos los pasos dentro de ella.
7. Cree una configuración para que la cámara tome imágenes fijas. Esto establece el tamaño de la imagen en 1080p, mientras que las ventanas de vista previa serán de 720p.
camera_config = picam2.create_still_configuration(main="size": (1920, 1080), lores="size": (1280, 720), display="lores")
8. Configure Picamera2 para usar la nueva configuración.
picam2.configure(camera_config)
9. Inicie una ventana de vista previa con una resolución de 720p. Establecemos la posición usando las coordenadas X e Y, de lo contrario, el valor predeterminado es 0,0. Modifique esto para satisfacer sus necesidades.
picam2.start_preview(Preview.QTGL, x=100, y=200, width=1280, height=720)
10 Mostrar la ventana de vista previa.
picam2.start(show_preview=True)
11 Configure la cámara para usar el enfoque automático continuo. Tenga en cuenta que esto solo funciona con el módulo de cámara 3.
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous)
12 Haga una pausa de dos segundos antes de capturar la imagen en un archivo llamado picam1.jpg.
time.sleep(2)
picam2.capture_file("picam1.jpg")
13 Cierre la ventana de vista previa y luego detenga Picamera2.
picam2.stop_preview()
picam2.stop()
14. Fuera de la función, use la función «cuando_presionado» de Blue Dot para reaccionar a la entrada del usuario ejecutando la función tomar_foto.
bd.when_pressed = take_picture
15. Use pausa para evitar que el código salga.
pause()
dieciséis. Guarde el código como bluedot_camera.py y haga clic en Ejecutar para iniciar el código. Verás que el código espera a que el dispositivo Android se conecte.
17. En su dispositivo Android, abrir punto azul.
18 Seleccione el nombre de host de su Raspberry Pi. Por lo general, esto es «raspberrypi».
19 Haga clic en el punto azul para activar la cámara. Verá aparecer la ventana de vista previa y luego, dos segundos después, se guardará una imagen en la tarjeta micro SD. Las pulsaciones repetidas crearán una nueva imagen, pero como el nombre del archivo es el mismo, se sobrescribirá cada vez.
Listado completo de códigos
from bluedot import BlueDot
from picamera2 import Picamera2, Preview
from libcamera import controls
from signal import pause
import time
bd = BlueDot()
picam2 = Picamera2()
def take_picture():
camera_config = picam2.create_still_configuration(main="size": (1920, 1080), lores="size": (1280, 720), display="lores")
picam2.configure(camera_config)
picam2.start_preview(Preview.QTGL, x=100, y=200, width=1280, height=720)
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous)
time.sleep(2)
picam2.capture_file("picam1.jpg")
picam2.stop_preview()
picam2.stop()
bd.when_pressed = take_picture
pause()