Cuando el sistema operativo Raspberry Pi pasó de estar basado en Debian Buster a Bullseye, la transición no fue fácil. Durante muchos años, el sistema operativo Raspberry Pi usó tres herramientas para acceder a la cámara oficial de Raspberry Pi. Los dos primeros eran raspistill/raspivid, que ofrecían control y acceso a la cámara a través de la terminal Linux. Era un medio poderoso y flexible para trabajar con la cámara, ambos podían producir efectos de video y transmitir video sin trabajo adicional. El otro medio fue un proyecto creado por la comunidad llamado PiCamera. Creada originalmente por Dave Jones, Picamera pasó de ser un proyecto comunitario a convertirse en una herramienta esencial. Picamera ofrecía un medio puramente de Python para interactuar con la cámara y, al estar basado en Python, también significaba que podíamos mezclar la cámara en nuestros proyectos. Raspberry Pi LTD incluso llegó a ofrecer una versión “heredada” de Buster con Picamera y actualizaciones de seguridad. Esta fue una medida provisional mientras sus desarrolladores trabajaban en Picamera2. Con el lanzamiento de septiembre de 2022 de Raspberry Pi OS, ahora tenemos un módulo Picamera2 en funcionamiento que podemos usar en nuestros proyectos. En este tutorial, aprenderemos a usar la API bastante espléndida de Picamera2. [pdf] para capturar imágenes, grabar video y trabajar con GPIO para reaccionar a la entrada como un medio para capturar una imagen.
Para los proyectos que necesitarás
Conexión de su cámara Raspberry Pi
La cámara Raspberry Pi ha sido parte de los mejores accesorios de Raspberry Pi durante casi todo el tiempo que lleva Pi con nosotros. Casi todos los modelos de Raspberry Pi tienen un conector de cámara (CSI) (con la excepción del primer modelo de Raspberry Pi Zero) y esto significó que la cámara se convirtió rápidamente en el accesorio imprescindible para su Pi. Lo mismo sigue siendo cierto, gracias a la cámara oficial HQ que ofrece una calidad de imagen mucho mejor y una serie de lentes intercambiables. Conectar cualquier cámara oficial a la Raspberry Pi es fácil de hacer, solo sigue estos pasos.(Crédito de la imagen: Hardware de Tom)3. Inserte el cable con la pestaña azul mirando hacia el puerto USB/Ethernet.(Crédito de la imagen: Hardware de Tom)4. Deslice suavemente las pestañas hacia abajo para bloquear el cable en su lugar.5. Asegure/monte la cámara para que no se vuelque y toque la Pi o su GPIO. Un método es usar plastilina o blu tack.
Instalación del software Picamera2
1. Arranque el Pi.2. abrir una terminal y actualizar el software instalado.sudo apt actualizar sudo apt actualizar -y3. Instale el módulo Picamera2 Python3. Para las últimas versiones del sistema operativo Raspberry Pi (septiembre de 2022 en adelante), viene preinstalado, pero este comando también actualizará su versión a la última versión. Sudo apt install -y python3-picamera2
Tomar una fotografía con Picamera2
(Crédito de la imagen: Tom’s Hardware)Tomar una fotografía con Picamera2 es la tarea más básica que puede realizar con el módulo. Por diseño, se ha creado para que sea fácil de usar, pero debajo de la simplicidad hay un módulo complejo que podemos modificar para adaptarlo a nuestras necesidades. En este proyecto, capturaremos una imagen, utilizando una vista previa para enmarcar la toma.1. Abre Tonny. Puede encontrarlo en el menú principal.2. En un nuevo archivo, importe el módulo Picamera2, junto con la clase de vista previa. En una nueva línea, importe el módulo de tiempo. El módulo Picamera2 nos proporcionará el control de la cámara y el tiempo se utiliza para controlar cuánto tiempo permanecerá en pantalla la imagen de vista previa. from picamera2 import Picamera2, Preview import time3. Crea un objeto, picam2, que se utiliza para hacer referencia al módulo Picamera2 y controlar la cámara.picam2 = Picamera2()4. Crea un nuevo objeto, camera_config y utilícelo para configurar la resolución de la imagen fija (principal) en 1920 x 1080 y una imagen de “resolución baja” con un tamaño de 640 x 480. Esta imagen de baja resolución se usa como imagen de vista previa al encuadrar una toma. “lores”)5. Cargue la configuración.picam2.configure(cámara_config)6. Iniciar la ventana de vista previa y luego encienda la cámara.picam2.start_preview(Preview.QTGL) picam2.start()7. Pausa el código durante dos segundos.tiempo.dormir(2)8. capturar una imagen y guárdelo como test.jpg.picam2.capture_file(“prueba.jpg”)9. Guarde el código como camera-test.py y haga clic en Ejecutar para comenzar. Aparecerá una ventana de vista previa, utilícela para encuadrar su toma. Si dos segundos es un retraso demasiado corto, cambie el retraso para satisfacer sus necesidades.10. Abra el Administrador de archivos del sistema y haga doble clic en test.jpg para ver la imagen.
Listado completo de códigos
from picamera2 import Picamera2, Vista previa del tiempo de importación picam2 = Picamera2() camera_config = picam2.create_still_configuration(main={“size”: (1920, 1080)}, lores={“size”: (640, 480)}, display=” lores”) picam2.configure(camera_config) picam2.start_preview(Preview.QTGL) picam2.start() time.sleep(2) picam2.capture_file(“test.jpg”)
Grabar un video con Picamera2
(Crédito de la imagen: Tom’s Hardware) La grabación de video HD es algo que ahora damos por sentado. Lo mismo ocurre con Raspberry Pi gracias a numerosos modelos de cámaras oficiales (y no oficiales). Con Picamera2 podemos grabar video en varias resoluciones usando diferentes codificadores. En este proyecto, mostraremos cómo grabar una secuencia de video simple de 1080P, mientras obtenemos una vista previa de la secuencia en una ventana de menor resolución.1. abierto thony y crear un nuevo archivo. Puedes encontrar a Thonny en el menú principal.2. Importe el codificador H264 desde el módulo Picamera2.de picamera2.encoders importar H264Encoder3. Importe el módulo Picamera2, junto con la clase de vista previa. A continuación, importe el módulo de tiempo.desde picamera2 importar Picamera2, Vista previa tiempo de importación4. Crea un objeto, picam2, que se utiliza para hacer referencia al módulo Picamera2 y controlar la cámara.picam2 = Picamera2()5. Crea un nuevo objeto, video_config y utilícelo para establecer la resolución de la imagen fija (principal) en 1920 x 1080. y una imagen “lowres” con un tamaño de 640 x 480. Esta imagen de baja resolución se utiliza como imagen de vista previa al encuadrar una toma.video_config = picam2.create_video_configuration(main={“size”: (1920, 1080)}, lores={“size”: (640, 480)}, display= “lores”)6. Cargue la configuración.picam2.configure(video_config)7. Configure la tasa de bits del codificador H264.codificador = Codificador H264 (tasa de bits = 10000000) 8. Establezca el archivo de salida en test.h264. Esto creará un archivo que contiene el video.output = “test.h264″9. Inicie la ventana de vista previa, luego comience a grabar usando la configuración del codificador y guarde el video en el archivo de salida.picam2.start_preview(Preview.QTGL) picam2.start_recording(codificador, salida)10. Use un sueño para grabar diez segundos de video. El comando de grabación anterior no es una línea de código de bloqueo. Usando un comando de suspensión, evitamos que la grabación se detenga después de una fracción de segundo.time.sleep(10)11. Detenga la grabación de la cámara y cierre la ventana de vista previa.picam2.stop_recording() picam2.stop_preview()12. Guarde el código como video-test.py y haga clic en Ejecutar para comenzar. Aparecerá la ventana de vista previa y tendrá diez segundos para grabar un video.13. Ver el vídeo.Puede llegar allí en el Administrador de archivos localizando test.h264. Y haciendo doble clic en el archivo de video para reproducirlo en VLC.
Listado completo de códigos
from picamera2.encoders import H264Encoder from picamera2 import Picamera2, Preview import time picam2 = Picamera2() video_config = picam2.create_video_configuration(main={“size”: (1920, 1080)}, lores={“size”: (640, 480 )}, display=”lores”) picam2.configure(video_config) codificador = H264Encoder(bitrate=10000000) salida = “test.h264” picam2.start_preview(Preview.QTGL) picam2.start_recording(codificador, salida) time.sleep( 10) picam2.stop_recording() picam2.stop_preview()
Usando un disparador para tomar una foto en Raspberry Pi
Los disparadores de cámara son un proyecto clásico de Raspberry Pi. Se utilizan para capturar imágenes/videos de animales, intrusos o para hacer bromas a miembros de la familia que no están dispuestos a hacerlo. Un disparador puede ser un sensor como un sensor de movimiento infrarrojo pasivo (PIR), un sensor ultrasónico o, en nuestro caso, un simple botón pulsador. En este proyecto, crearemos una cámara trampa activada por disparador simple. Presionamos el botón, enmarcamos la toma usando la ventana de vista previa y el archivo se guarda automáticamente en nuestra Pi usando la hora y la fecha actuales como nombre de archivo. El cableado para este proyecto es simple. El botón está conectado a GPIO17 y GND a través de una placa de prueba y dos cables hembra a macho.(Crédito de la imagen: Hardware de Tom)1. abierto thony y crear un nuevo archivo. Puedes encontrar a Thonny en el menú principal. 2. Importe el módulo Picamera2, junto con la clase de vista previa. próximo importar el módulo de tiempo.desde picamera2 import Picamera2, Preview import time3. Importe los módulos datetime, GPIO Zero y Signal. Datetime se usa para generar una marca de tiempo para nuestros nombres de archivo de imagen. GPIO Zero se utiliza para una interfaz de botón simple. Signal se usa para evitar que el código de Python salga. from datetime import datetime from gpiozero import Button from signal import pause4. Crea un objeto, picam2, que se utiliza para hacer referencia al módulo Picamera2 y controlar la cámara.picam2 = Picamera2()5. Crear un objeto, botón, y use el objeto para almacenar el pin GPIO al que está conectado nuestro botón.botón = Botón(17)6. Crea un nuevo objeto, camera_config y utilícelo para configurar la resolución de la imagen fija (principal) en 1920 x 1080 y una imagen de “resolución baja” con un tamaño de 640 x 480. Esta imagen de baja resolución se usa como imagen de vista previa al encuadrar una toma. “lore”)7. Cargue la configuración.picam2.configure(cámara_config)8. Crea una función, capture(), para almacenar una serie de comandos que se ejecutará cuando se presione el gatillo. El código dentro de la función se sangra automáticamente para mostrar que pertenece a la función.def capture():9. Inicie una ventana de vista previa. Esto nos permitirá enmarcar nuestra imagen. picam2.start_preview(Vista previa.QTGL)10. Crear un objeto, marca de tiempo, y utilícelo para almacenar la hora y la fecha del evento desencadenante. marca de tiempo = fechahora.ahora().isoformato()11. Encienda la cámara, luego haga una pausa de dos segundos para dar tiempo a encuadrar la imagen. picam2.start() time.sleep(2)12. Configure el archivo de captura, en última instancia, el archivo de imagen, para usar la marca de tiempo actual como nombre de archivo. picam2.capture_file(‘/home/pi/%s.jpg’ % marca de tiempo)13. Finalmente en la función detener la vista previa, y detener la cámara. picam2.stop_preview() picam2.stop()14. Utilice la clase de botón de GPIO Zero para reaccionar a la pulsación de un botón llamando a nuestra función de “captura”. Finalmente use pause() para evitar que el código termine.button.when_pressed = capturar pausa()15. Guarde el código como trigger-test.py y haga clic en Ejecutar para iniciar el código.dieciséis. presiona el botón para iniciar la cámara y para tomar una imagen.17. Abra el Administrador de archivos del sistema y haga doble clic en la imagen para ver.
Listado completo de códigos
from picamera2 import Picamera2, Preview import time from datetime import datetime from gpiozero import Button from signal import pause picam2 = Picamera2() button = Button(17) camera_config = picam2.create_still_configuration(main={“size”: (1920, 1080)} , lores={“tamaño”: (640, 480)}, display=”lores”) picam2.configure(camera_config) def capture(): picam2.start_preview(Preview.QTGL) timestamp = datetime.now().isoformat( ) picam2.start() time.sleep(2) picam2.capture_file(‘/home/pi/%s.jpg’ % timestamp) picam2.stop_preview() picam2.stop() button.when_pressed = capture pause()