El nuevo Raspberry Pi Camera Module 3 ofrece una calidad de imagen excepcional y la posibilidad de elegir entre una lente estándar (75 grados) y una lente ancha (120 grados). Aún mejor, ahora tenemos enfoque automático. Tomar fotos con la Picamera2 es fácil, pero a veces solo queremos presionar un botón y tomar una foto, ¡y aparecer en la foto!
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 con una pequeña cantidad de código.
Contenido del sitio
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.
(Crédito de la imagen: Hardware de Tom)
2. Inserte el conector del cable 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.
(Crédito de la imagen: Hardware de Tom)
3. Cierre el bloqueo del conector y tire de él muy suavemente 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, verifica que tu cámara esté funcionando 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 del punto azul
Blue Dot es la creación de Martin O’Hanlon y proporciona una manera realmente fácil de controlar de forma remota una Raspberry Pi. El nombre «Blue Dot» significa 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 Blue Dot Python.
sudo pip3 install bluedot
4. Vaya al menú de Bluetooth, haga clic derecho y seleccione «Hacer reconocible».
(Crédito de la imagen: Hardware de Tom)
5. En su dispositivo Android, vaya a Configuración >> Dispositivos conectados y seleccione Emparejar nuevo dispositivo.
6. Seleccione «raspberrypi» y siga las instrucciones de emparejamiento. Si su Raspberry Pi tiene un nombre de host diferente, entonces «raspberrypi» no aparecerá, busque su nombre de host.
(Crédito de la imagen: Hardware de Tom)
Con nuestro dispositivo Android y Raspberry Pi ahora conectados, escribiremos un script de 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, cómic, 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á a que el usuario interactúe. Cuando esto sucede, el código salta 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. Esto suele ser «raspberrypi».
(Crédito de la imagen: Hardware de Tom)
9. Haga clic en el punto azul para activar la acción del código de Python. Debería ver un mensaje en el shell de Python.
(Crédito de la imagen: Hardware de Tom)
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
(Crédito de la imagen: Hardware de Tom)
El objetivo de este proyecto es crear un disparador de cámara con Blue Dot. Cuando se presiona el botón, se lanza una función en la Raspberry Pi que gestiona el disparo.
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 control 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 desde la señal, luego desde la biblioteca de tiempo. La pausa se utilizará para evitar que el código salga. El tiempo retrasará el código después de crear una ventana de vista previa, dándonos tiempo para enmarcar una toma.
from signal import pause import time
4. Crear un objeto, cómic, que usaremos para trabajar con la biblioteca.
bd = BlueDot()
5. Crea un objeto, picam2, lo que nos permitirá utilizar fácilmente la librería Picamera2.
picam2 = Picamera2()
6. Defina una función, take_picture() que se usará para tomar una foto. Las funciones funcionan llamando a su nombre, lo que desencadena la ejecución de todos los pasos de la función.
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. Definimos la posición usando las coordenadas X e Y, de lo contrario, el valor predeterminado es 0.0. Ajuste esto para satisfacer sus necesidades.
picam2.start_preview(Preview.QTGL, x=100, y=200, width=1280, height=720)
diez. Mostrar 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 función, use la función «when_pressed» de Blue Dot para reaccionar a la entrada del usuario ejecutando la función take_picture.
bd.when_pressed = take_picture
15. Use pausa para detener la salida del código.
pause()
dieciséis. Guarde el código como bluedot_camera.py y haga clic en ejecutar para ejecutar el código. Verá que el código está esperando a que el dispositivo Android se conecte.
17. En su dispositivo Android, punto azul abierto.
18 Seleccione el nombre de host de su Raspberry Pi. Esto suele ser «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 dado que el nombre del archivo es el mismo, se sobrescribirá cada vez.
Lista completa 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()