Él pastel de frambuesa Tiene mucho de mejores accesorios y el que seguramente aparecerá en esta lista es el nuevo Módulo de cámara 3. En nuestra revisión del módulo de cámara Raspberry Pi 3dijimos que nos encantan las imágenes HDR y el enfoque automático rápido, y queremos compartir esas características con usted en esta práctica guía.
Si nunca antes ha usado una cámara Raspberry Pi, nuestra Guía para principiantes de Picamera2 es una excelente introducción para lograr que su Pi tome excelentes fotos. En esta guía, exploraremos las muchas formas de usar el sistema de enfoque Camera Module 3 con Picamera2 y aprenderemos a tomar imágenes HDR con un script rápido y fácil que automatiza el proceso. Si Python no es lo tuyo, Camera Module 3 también se puede controlar usando libcamera a través de la terminal.
- Conociendo el enfoque automático
- Proyecto 1: Uso del enfoque continuo
- Lista completa de códigos.
- Proyecto 2: ajuste de enfoque manual
- Lista completa de códigos.
- Proyecto 3: Enfoque rápido para múltiples imágenes
- Lista completa de códigos.
- Capturar una imagen HDR con Picamera2
- Lista completa de códigos.
Conociendo el enfoque automático
El enfoque automático tiene tres modos en los que funciona.
- Manual: Solicite al usuario que especifique el control LensPosition para cambiar el enfoque de la lente. Un valor de cero producirá un enfoque infinito. Se aceptan valores hasta 10, poniendo el 10 el foco a 1/10 de metro (10CM).
- Auto: El enfoque automático típico que utiliza AfTrigger para iniciar un ciclo de enfoque automático.
- Continuado: La cámara buscará un objetivo y volverá a enfocar el objetivo cuando el algoritmo lo detecte.
Proyecto 1: Uso del enfoque continuo
Tracking Focus utiliza un algoritmo para buscar un objetivo en el flujo de imágenes. No importa si el objetivo está cerca (unos 10 cm) o lejos, el algoritmo encontrará el objetivo y lo bloqueará. Pero, ¿cómo lo usamos? Hagamos una prueba rápida. Usaremos un modo de enfoque continuo para buscar el mejor enfoque posible en nuestro objetivo. Sería útil tener un objeto que puedas sostener frente a la cámara, usamos un billete de un dólar.
1. Desde el menú principal, abre Programación >> Thonny.
2. Importar Picamera2.
from picamera2 import Picamera2
3. Importe la clase de controles de libcamera. Con esto podremos configurar la cámara según nuestras necesidades.
from libcamera import controls
4. Crear un objeto, picam2 que usaremos como enlace entre el código y nuestra cámara.
picam2 = Picamera2()
5. Inicie una ventana de vista previa. La vista previa es donde se ve la salida de la cámara.
picam2.start(show_preview=True)
6. Establezca AfMode (modo de enfoque automático) en continuo.
picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous})
7. Guarde el código como AFtest.py.
8. Haga clic en Ejecutar para iniciar el código. Aparecerá una ventana de vista previa. Mueva un objeto, elegimos un billete de un dólar, alrededor del marco y observe cómo se mueve el foco. Intenta acercar el objeto a la lente, recuerda que el punto focal más cercano está a 10 centímetros de distancia.
Lista completa de códigos.
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous})
Proyecto 2: ajuste de enfoque manual
A veces, un enfoque fijo es lo que necesitamos para obtener esa gran toma. Después de todo, no queremos capturar un desorden borroso. Fijar el foco es relativamente simple; de hecho, es tan simple que podemos reutilizar la mayor parte del código del ejemplo anterior.
1. Usar Guardar como en el ejemplo anterior to cree un nuevo archivo llamado ManualFocusTest.py
2. Cambia la última línea para usar LensPositionen este caso, establezca el valor en 0,0 para un enfoque infinito.
picam2.set_controls({"AfMode": controls.AfModeEnum.Manual, "LensPosition": 0.0})
3. Ejecute el código. Observe cómo el enfoque es nítido para los objetos distantes, pero de cerca se ven borrosos.
4. Cambie el valor de LensPosition a 0,5. Esto nos dará aproximadamente una distancia focal de 50cm.
5. Guarde y ejecute el código. Mover un objeto hacia y desde la cámara. Observe cómo el enfoque se vuelve nítido alrededor de los 50 cm.
Lista completa de códigos.
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls({"AfMode": controls.AfModeEnum.Manual, "LensPosition": 0.5})
Proyecto 3: Enfoque rápido para múltiples imágenes
Ya sea una cámara para pájaros, un día de deportes en la escuela o seguridad en el hogar, a veces necesitamos obtener una serie de imágenes nítidas. Afortunadamente, podemos configurar el módulo de cámara 3 para tomar una serie de imágenes rápidas y configurar el enfoque automático de alta velocidad.
1. Cree un nuevo archivo llamado AfFastFocus.py
2. Importar Picamera2.
from picamera2 import Picamera2
3. Importe la clase de controles de libcamera. Con esto podremos configurar la cámara según nuestras necesidades.
from libcamera import controls
4. Crear un objeto, picam2 que usaremos como enlace entre el código y nuestra cámara.
picam2 = Picamera2()
5. Inicie una ventana de vista previa. La vista previa es donde se ve la salida de la cámara.
picam2.start(show_preview=True)
6. Configure el modo de enfoque automático en Continuo y configure AfSpeed en Rápido.
picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast})
7. Configure la cámara para capturar tres archivos, con un retraso de medio segundo entre cada disparo. El nombre de archivo "fastfocus.jpg" agregará 0, luego 1 y 2 a cada archivo. Dándonos tres archivos en orden numérico.
picam2.start_and_capture_files("fastfocus{:d}.jpg", num_files=3, delay=0.5)
8. Cierra la ventana de vista previa.
picam2.stop_preview()
9. Cierre la conexión de la cámara.
picam2.stop()
diez. Guarde y ejecute el código. Sostenga un objeto a tres distancias diferentes de la cámara y observe cómo cambia el enfoque, la ventana de vista previa se congela cuando la cámara toma una foto y luego se libera para la siguiente toma. Después de tomar tres fotos, se cierra la ventana de vista previa.
Lista completa de códigos.
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast})
picam2.start_and_capture_files("fastfocus-test{:d}.jpg", num_files=3, delay=0.5)
picam2.stop_preview()
picam2.stop()
Capturar una imagen HDR con Picamera2
Las imágenes HDR (alto rango dinámico) se pueden capturar fácilmente con cámara libre. Solo necesitamos pasar el argumento –hdr cuando ejecutamos el comando. Pero para Picamera2, necesitamos ejecutar un comando de terminal antes de ejecutar nuestro código Python.
HDR aumenta el rango de brillo dinámico de las imágenes. Con HDR obtenemos una oscuridad más profunda e imágenes más brillantes. Funciona capturando múltiples imágenes de la misma escena, cada una con diferentes exposiciones. Estas imágenes luego se combinan en una sola imagen que abarca toda la gama. Camera Module 3 puede capturar imágenes HDR, pero no con la resolución completa de 12 MP. En cambio, obtenemos una imagen de 3MP con una resolución de 2304 x 1296 píxeles.
Para nuestra prueba reutilizaremos el código de AfFastFocus.py proyecto, para capturar una serie de imágenes HDR. También usaremos la biblioteca del sistema operativo de Python para ejecutar un comando de terminal que activará y desactivará la configuración HDR sin la interacción del usuario. Esto quiere decir que no nos olvidaremos de activar y desactivar los ajustes HDR.
1. Cree un nuevo archivo llamado HDRAfFastFocus.py
2. Importar Picamera2.
from picamera2 import Picamera2
3. Importe la clase de controles de libcamera. Con esto podremos configurar la cámara según nuestras necesidades.
from libcamera import controls
4. Importar módulo de sistema operativo. Esto permite que nuestro código interactúe con el sistema operativo subyacente, en este caso, Raspberry Pi OS (Linux).
import os
5. Crear un objeto, picam2 que usaremos como enlace entre el código y nuestra cámara.
picam2 = Picamera2()
6. Use la función del sistema del módulo os para configurar la cámara para usar HDR. Picamera2 admite HDR, pero no directamente en el módulo. El problema se refiere a V4L2, la interfaz del kernel entre la cámara y el sistema de video Linux. Actualmente no ofrece soporte HDR listo para usar con esta cámara, por lo que debemos ejecutar esta solución rápida para que esté disponible en Picamera2.
7. Imprimir un mensaje en Python Shell informándonos que HDR está habilitado.
print("Setting HDR to ON")
8. Inicie una ventana de vista previa. La vista previa es donde se ve la salida de la cámara.
picam2.start(show_preview=True)
9. Establezca el modo de enfoque automático en Continuo y configure AfSpeed en Rápido.
picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast})
diez. Configure la cámara para capturar tres archivos, con un retraso de un segundo entre cada toma. El nombre de archivo "HDRfastfocus.jpg agregará 0, luego 1 y 2 a cada archivo. Nos da tres archivos en orden numérico. Estamos duplicando el retraso entre cada disparo para darle tiempo a la cámara para grabar el cuadro anterior y luego ajustar el enfoque para el siguiente cuadro. Lo probamos con un retraso de 0.5 y nuestras tomas a veces eran demasiado borrosas.
picam2.start_and_capture_files("HDRfastfocus{:d}.jpg", num_files=3, delay=1)
11 Cierra la ventana de vista previa.
picam2.stop_preview()
12 Cierre la conexión de la cámara.
picam2.stop()
13 Imprimir un mensaje para el usuario que HDR ahora está deshabilitado, luego ejecute el comando usando os.system.
print("Setting HDR to OFF")
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=0 -d /dev/v4l-subdev0")
14 Guarde y ejecute el código. Sostenga un objeto a tres distancias diferentes de la cámara y observe cómo cambia el enfoque, la ventana de vista previa se congela cuando la cámara toma una foto y luego se libera para la siguiente toma. Después de tomar tres fotos, se cierra la ventana de vista previa.
Lista completa de códigos.
from picamera2 import Picamera2
from libcamera import controls
import os
picam2 = Picamera2()
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=1 -d /dev/v4l-subdev0")
print("Setting HDR to ON")
picam2.start(show_preview=True)
picam2.set_controls({"AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast})
picam2.start_and_capture_files("HDRfastfocus{:d}.jpg", num_files=3, delay=1)
picam2.stop_preview()
picam2.stop()
print("Setting HDR to OFF")
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=0 -d /dev/v4l-subdev0")
Deja una respuesta