Cuando Mover el sistema operativo Raspberry Pi estar basado en Debian Buster, para ojo de buey, la transición no fue la más suave. Durante muchos años, Raspberry Pi OS utilizó tres herramientas para acceder a la cámara oficial de Raspberry Pi. Las dos primeras eran raspistill / raspivid, que ofrecían control y acceso a la cámara a través de la terminal Linux.
Era una forma poderosa y flexible de trabajar con la cámara, ambos podían producir efectos de video y transmitir video sin trabajo extra. La otra forma fue un proyecto creado por la comunidad llamado PiCamera. Creado originalmente por Dave Jones, Piccámara ha pasado de ser un proyecto comunitario a una herramienta esencial. Picamera ofrecía una forma puramente Python de interactuar con la cámara y, al estar basado en Python, también significaba que podíamos mezclar y combinar la cámara en nuestros proyectos.
Con el cambio a Bullseye, vimos que Picamera se rompió tristemente. Raspberry Pi LTD incluso ha ido tan lejos como para ofrecer un 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 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 era parte de la mejores accesorios de frambuesa pi casi tanto tiempo como el Pi ha estado con nosotros. Casi todos los modelos de Raspberry Pi tienen conector de cámara (CSI) (excepto el primer modelo de Raspberry Pi Zero), lo que significa que la cámara se convirtió rápidamente en el accesorio esencial para tu Pi. Lo sigue siendo. cámara oficial de la sede ofreciendo 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.
3. Inserte el cable con la pestaña azul hacia el puerto USB/Ethernet.
4. Deslice suavemente las pestañas hacia abajo para bloquear el cable en su lugar.
5. Asegurar/montar la cámara para que no se vuelque y toque la Pi o su GPIO. Un método es usar plastilina/blu tack.
Instalación del software Picamera2
1. Inicie el Pi.
2. abrir una terminal y actualizar el software instalado.
sudo apt update
sudo apt upgrade -y
3. Instale el módulo Picamera2 Python3. Para las últimas versiones del sistema operativo Raspberry Pi (desde septiembre de 2022), está preinstalado, pero este comando también actualizará su versión a la última versión.
sudo apt install -y python3-picamera2
Toma una foto con Picamera2
Tomar una foto con Picamera2 es la tarea más básica que puede realizar con el módulo. Por diseño, fue creado para ser simple de usar, pero debajo de la simplicidad se esconde un módulo complejo que podemos modificar según nuestras necesidades.
En este proyecto, capturaremos una imagen usando una vista previa para enmarcar la toma.
1. Abre Tonny. Puedes encontrarlo en el menú principal.
2. En un archivo nuevo, importe el módulo Picamera2, así como 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 usa para controlar cuánto tiempo permanecerá en la pantalla la imagen de vista previa.
from picamera2 import Picamera2, Preview
import time
3. 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 establecer la resolución de la imagen fija (principal) en 1920 x 1080 y una imagen de "baja resolución" 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.
camera_config = picam2.create_still_configuration(main={"size": (1920, 1080)}, lores={"size": (640, 480)}, display="lores")
5. Cargue la configuración.
picam2.configure(camera_config)
6. Iniciar ventana de vista previa y luego encienda la cámara.
picam2.start_preview(Preview.QTGL)
picam2.start()
siete. Pausa el código durante dos segundos.
time.sleep(2)
8. capturar una imagen y guárdelo como test.jpg.
picam2.capture_file("test.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 enmarcar su toma. Si un retraso de dos segundos es demasiado corto, cambie el retraso para adaptarlo a sus necesidades.
diez. Abra el administrador de archivos del sistema y haga doble clic en test.jpg para mostrar la imagen.
Lista completa de códigos.
from picamera2 import Picamera2, Preview
import time
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
La grabación de video HD es algo que ahora damos por sentado. Lo mismo ocurre con la Raspberry Pi gracias a muchos modelos de cámaras oficiales (y no oficiales). Con Picamera2 podemos grabar videos a diferentes resoluciones usando diferentes codificadores.
En este proyecto, mostraremos cómo grabar una transmisión de video simple de 1080P, mientras realizamos una vista previa de la transmisión 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.
from picamera2.encoders import H264Encoder
3. Importe el módulo Picamera2, así como la clase de vista previa. A continuación, importe el módulo de tiempo.
from picamera2 import Picamera2, Preview
import time
4. 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 de "baja resolución" 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)
siete. Configure la tasa de bits del codificador H264.
encoder = H264Encoder(bitrate=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(encoder, output)
diez. Use un tiempo de espera para grabar diez segundos de video. El comando de guardar anterior no es una línea de código de bloqueo. Mediante el uso de 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 Mira el video.Puede acceder a él en el administrador de archivos localizando test.h264. Y haga doble clic en el archivo de video para reproducirlo en VLC.
Lista completa 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)
encoder = H264Encoder(bitrate=10000000)
output = "test.h264"
picam2.start_preview(Preview.QTGL)
picam2.start_recording(encoder, output)
time.sleep(10)
picam2.stop_recording()
picam2.stop_preview()
Use 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 gastar bromas a familiares no deseados. 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 simple activada por gatillo. 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.
1. abierto thony y crear un nuevo archivo. Puedes encontrar a Thonny en el menú principal.
2. Importe el módulo Picamera2, así como la clase de vista previa. próximo importar el módulo de tiempo.
from picamera2 import Picamera2, Preview
import time
3. 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. La señal se usa para evitar que el código de Python salga.
from datetime import datetime
from gpiozero import Button
from signal import pause
4. 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, un botón, y use el objeto para almacenar el pin GPIO al que está conectado nuestro botón.
button = Button(17)
6. Crea un nuevo objeto, camera_config y utilícelo para establecer la resolución de la imagen fija (principal) en 1920 x 1080 y una imagen de "baja resolución" 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.
camera_config = picam2.create_still_configuration(main={"size": (1920, 1080)}, lores={"size": (640, 480)}, display="lores")
siete. Cargue la configuración.
picam2.configure(camera_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(Preview.QTGL)
diez. Crear objeto, marca de tiempo, y utilícelo para almacenar la hora y la fecha del evento desencadenante.
timestamp = datetime.now().isoformat()
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' % timestamp)
13. Finalmente en función detener la vista previa, y detener la cámara.
picam2.stop_preview()
picam2.stop()
14 Use 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". Para terminar use pause() para evitar que el código termine.
button.when_pressed = capture
pause()
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 tomar una imagen.
17 Abra el administrador de archivos del sistema y haga doble clic en la imagen para ver.
Lista completa 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={"size": (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()
Deja una respuesta