El Raspberry Pi tiene muchos de los mejores accesorios y uno que seguramente aparecerá en esa lista es el nuevo Módulo de cámara 3. En nuestra revisión del Módulo de cámara 3 de Raspberry Pi, dijimos que nos encanta el enfoque automático rápido y las imágenes HDR y queremos compartir estas funciones con usted en este procedimiento. Si nunca antes ha usado una cámara Raspberry Pi, nuestra guía para principiantes de Picamera2 es una excelente guía para que su Pi tome excelentes fotografías. En este instructivo, exploraremos las muchas formas en que podemos usar el sistema de enfoque del Módulo de cámara 3 con Picamera2 y aprenderemos a tomar imágenes HDR con un script rápido y simple que automatiza el proceso. Si Python no es lo tuyo, el Módulo de cámara 3 también se puede controlar usando libcamera a través de la terminal.
Conociendo el enfoque automático
El enfoque automático tiene tres modos en los que funciona.Manual: Solicitar al usuario que especifique el control LensPosition para modificar el enfoque de la lente. Un valor de cero producirá un foco infinito. Se aceptan valores hasta 10 con 10 ajustando 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.Continuo: La cámara buscará un objetivo y volverá a enfocarlo cuando el algoritmo lo detecte.
Proyecto 1: Uso del enfoque continuo
(Crédito de la imagen: Tom’s Hardware) El enfoque continuo utiliza un algoritmo para buscar un objetivo en el flujo de imágenes. No importa si el objetivo está cerca (alrededor de 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 sujetar a la cámara, usamos un billete de un dólar.1. Desde el menú principal, abra Programación >> Thonny.2. Importar Picamera2.de picamera2 importar Picamera23. Importe la clase de controles de libcamera. Con esto podemos configurar la cámara para que se adapte a nuestros requisitos. Desde libcamera import controls4. 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 vemos la salida de camera.picam2.start(show_preview=True)6. Configure AfMode (modo de enfoque automático) para que sea continuo.picam2.set_controls({“AfMode”: controles.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 cambia el enfoque. Intente acercar el objeto a la lente, recuerde que el punto de enfoque más cercano está a 10 centímetros.
Listado completo de códigos
desde picamera2 importar Picamera2 desde libcamera importar controles picam2 = Picamera2() picam2.start(show_preview=True) picam2.set_controls({“AfMode”: controls.AfModeEnum.Continuous})
Proyecto 2: Establecer el enfoque manualmente
(Crédito de la imagen: Tom’s Hardware) 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 enfoque es relativamente sencillo; de hecho es tan fácil 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.py2. Cambia la última línea para usar LensPositionen este caso establezca el valor en 0,0 para un foco 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 lejanos, pero de cerca se ven borrosos.4. Cambie el valor de LensPosition a 0,5. Esto nos dará aproximadamente una distancia focal de 50 cm.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 50 cm.
Listado completo de códigos
desde picamera2 importar Picamera2 desde libcamera importar controles picam2 = Picamera2() picam2.start(show_preview=True) picam2.set_controls({“AfMode”: controles.AfModeEnum.Manual, “LensPosition”: 0.5})
Proyecto 3: enfoque rápido para múltiples imágenes
(Crédito de la imagen: Tom’s Hardware) Ya sea una cámara para pájaros, un día de deportes escolares o seguridad en el hogar, a veces necesitamos obtener una serie de imágenes nítidas. Por suerte, podemos configurar el Módulo de cámara 3 para que tome una serie de imágenes rápidas y configurar el enfoque automático a alta velocidad.1. Cree un nuevo archivo llamado AfFastFocus.py2. Importar Picamera2.de picamera2 importar Picamera23. Importe la clase de controles de libcamera. Con esto podemos configurar la cámara para que se adapte a nuestros requisitos. Desde libcamera import controls4. 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 vemos la salida de camera.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”: controles.AfModeEnum.Continuo, “AfSpeed”: controles.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()10. 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. Una vez que se toman tres fotos, la ventana de vista previa se cerrará.Imagen 1 de 3(Crédito de la imagen: Hardware de Tom)(Crédito de la imagen: Hardware de Tom)(Crédito de la imagen: Hardware de Tom)
Listado completo de códigos
desde picamera2 importar Picamera2 desde libcamera importar controles picam2 = Picamera2() picam2.start(show_preview=True) picam2.set_controls({“AfMode”: controles.AfModeEnum.Continuous, “AfSpeed”: controles.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
(Crédito de la imagen: Tom’s Hardware) Las imágenes HDR (alto rango dinámico) se pueden capturar fácilmente con libcamera. 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 luminosidad dinámica de las imágenes. Con HDR obtenemos una oscuridad más profunda e imágenes más brillantes. Esto funciona capturando múltiples imágenes de la misma escena, cada una con diferentes exposiciones. Estas imágenes se combinan luego en una sola imagen que abarca toda la gama. El módulo de cámara 3 puede capturar imágenes HDR, pero no con la resolución completa de 12 MP. En su lugar, obtenemos una imagen de 3 MP con una resolución de 2304 x 1296 píxeles. Para nuestra prueba, vamos a reutilizar el código de la 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 interacción del usuario. Esto significa que no olvidaremos activar y desactivar la configuración de HDR.1. Cree un nuevo archivo llamado HDRAfFastFocus.py2. Importar Picamera2.de picamera2 importar Picamera23. Importe la clase de controles de libcamera. Con esto podemos configurar la cámara para que se adapte a nuestros requisitos. Desde libcamera import controls4. Importar el módulo del sistema operativo. Esto permite que nuestro código interactúe con el sistema operativo subyacente, en este caso, Raspberry Pi OS (Linux).import os5. 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 es con V4L2, la interfaz del kernel entre la cámara y el sistema de video Linux. En este momento, no ofrece soporte listo para HDR con esta cámara, por lo que debemos ejecutar esta solución rápida para que esté disponible en Picamera2.7. Imprime un mensaje en Python Shell informándonos que HDR está activado.print(“Establecer HDR en ENCENDIDO”)8. Inicie una ventana de vista previa. La vista previa es donde vemos la salida de camera.picam2.start(show_preview=True)9. Establezca el modo de enfoque automático en Continuo y establece AfSpeed en Rápido.picam2.set_controls({“AfMode”: controles.AfModeEnum.Continuo, “AfSpeed”: controles.AfSpeedEnum.Fast})10. 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. Dándonos tres archivos en orden numérico. Duplicamos el retraso entre cada disparo para darle tiempo a la cámara para guardar la imagen anterior y luego establecer el enfoque para la siguiente imagen. Lo probamos con un retraso de 0,5 y nuestras tomas a veces estaban un poco 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á desactivado y luego ejecute el comando usando os.system.print (“Configuración de HDR en APAGADO”) 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. Una vez que se toman tres fotos, la ventana de vista previa se cerrará.Imagen 1 de 3(Crédito de la imagen: Hardware de Tom)(Crédito de la imagen: Hardware de Tom)(Crédito de la imagen: Hardware de Tom)
Listado completo de códigos
from picamera2 import Picamera2 from libcamera controles de importación import os picam2 = Picamera2() os.system(“v4l2-ctl –set-ctrl wide_dynamic_range=1 -d /dev/v4l-subdev0”) print(“Configurar HDR en ON”) picam2.start(show_preview=True) picam2.set_controls({“AfMode”: controles.AfModeEnum.Continuous, “AfSpeed”: controles.AfSpeedEnum.Fast}) picam2.start_and_capture_files(“HDRfastfocus{:d}.jpg”, num_files= 3, retardo=1) picam2.stop_preview() picam2.stop() print(“Apagar HDR”) os.system(“v4l2-ctl –set-ctrl wide_dynamic_range=0 -d /dev/v4l-subdev0” )