Una versión preliminar de la biblioteca Picamera2

Estamos muy contentos de anunciar el primer lanzamiento de vista previa de la biblioteca Picamera2 Python, el reemplazo de la biblioteca Picamera obsoleta durante el lanzamiento de Bullseye en noviembre.

Una Raspberry Pi 4 con la cámara Raspberry Pi HQ.

Si ha usado alguna de las cámaras Raspberry Pi, probablemente esté familiarizado con Picamera, una excelente biblioteca de Python diseñada para proporcionar un fácil acceso a las capacidades de imágenes en Raspberry Pi. Pero también es posible que sepa que, con nuestro cambio reciente a API de Linux más abiertas y estándar, la biblioteca Picamera, construida sobre una pila de cámaras patentada de Broadcom, no será compatible en el futuro.

La biblioteca original de Picamera era un software de terceros, desarrollado por Dave Jones y no trabajado por nosotros aquí en Raspberry Pi. Sin embargo, la biblioteca demostró ser inmensamente popular entre nuestros usuarios, por lo que nos hemos comprometido a proporcionar un reemplazo. Con el nombre imaginativo de Picamera2, la nueva biblioteca está siendo desarrollada internamente aquí en Cambridge por Raspberry Pi y eventualmente será un paquete con soporte oficial.

Así que hoy estamos anunciando una primera versión preliminar de Picamera2.

Una de las nuevas aplicaciones de ejemplo de Picamera2 que se ejecutan en el escritorio Bullseye.

¿Qué queremos decir con una versión preliminar?

Por lanzamiento de vista previa, nos referimos a algo que es en gran medida un trabajo en progreso. Ya tiene bastante funcionalidad que puede probar, pero todavía faltan algunas cosas importantes y, en algunos casos, cosas que no funcionan tan bien como nos gustaría. También es muy probable, de hecho bastante seguro, que varios aspectos de la funcionalidad y de las API públicas cambien antes de que lancemos la biblioteca de manera más general.

Entre las funciones admitidas en la versión de hoy:

  • Puede configurar e iniciar la cámara y recibir múltiples secuencias de imágenes.
  • Picamera2 admite ventanas de vista previa, ya sea independientes o integradas en aplicaciones Qt.
  • Puede consultar y configurar los parámetros de la cámara.
  • Puede capturar imágenes fijas de resolución completa como archivos JPEG o PNG.
  • O puede capturarlos como matrices numpy para alimentar aplicaciones de análisis de imágenes.

Sin embargo, hay una característica que falta bastante obvia, y es que todavía estamos trabajando en la grabación de video usando el codificador hardware h.264 de Raspberry Pi. Si desea grabar video de Python usando Picamera2, eso es algo que no puede hacer hoy, y probablemente aún faltan “unas semanas”.

Si está interesado en echar un vistazo a lo que es un lanzamiento muy temprano de la nueva biblioteca Picamera2, nos interesaría saber cómo la gente lo hace, y si hay alguna funcionalidad útil que hemos pasado por alto, o que podría ser más fácil de usar.

¿Qué puedo hacer con él?

¡La mejor explicación podría ser solo mostrar algunos fragmentos de código! El primer ejemplo inicia una ventana de vista previa y luego realiza una captura JPEG de resolución completa:

from qt_gl_preview import * from picamera2 import * import time  picam2 = Picamera2() preview = QtGlPreview(picam2)  preview_config = picam2.preview_configuration() capture_config = picam2.still_configuration() picam2.configure(preview_config)  picam2.start() time.sleep(2)  picam2.switch_mode_and_capture_file(capture_config, "capture.jpg")

En el siguiente ejemplo, capturamos imágenes de vista previa y las pasamos a OpenCV para ver si puede detectar algún rostro en la imagen usando una cascada de Haar.

¡Nuestro propio Alasdair Allan con un cuadro verde dibujado alrededor de su cabeza!

Luego dibuja cuadros de detección alrededor de las caras que encuentra y nuevamente muestra la imagen en una ventana de vista previa:

#!/usr/bin/python3  import cv2  from null_preview import * from picamera2 import *  # Grab images as numpy arrays and leave everything else to OpenCV.  face_detector = cv2.CascadeClassifier("/usr/local/lib/python3.9/dist-packages/cv2/data/haarcascade_frontalface_default.xml") cv2.startWindowThread()  picam2 = Picamera2() preview = NullPreview(picam2) picam2.configure(picam2.preview_configuration(main={"size": (640, 480)})) picam2.start()  while True:     im = picam2.capture_array()      grey = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)     faces = face_detector.detectMultiScale(grey, 1.1, 5)      for (x, y, w, h) in faces:         cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255, 0))      cv2.imshow("Camera", im)

Más allá de estos dos, hemos creado más de veinte pequeños scripts de ejemplo para actuar como un tutorial informal y para ayudar a la gente a explorar qué funcionalidad está disponible en esta versión preliminar. A su debido tiempo, y una vez que se estabilice el ritmo al que están cambiando las cosas, trabajaremos para ampliar esta información y agregar más documentación formal y tutoriales.

¿Cómo lo pruebo?

Puede encontrar la versión preliminar de Picamera2 en Github, y el repositorio README.md brinda instrucciones de instalación completas.

Sin embargo, la instalación no es para los débiles de corazón. Como Picamera2 se basa en los propios enlaces de Python de libcamera que se encuentran actualmente en una fase de prototipo, por el momento la instalación implica verificar una versión especial de la biblioteca libcamera seleccionada por Raspberry Pi y compilarla manualmente.

No hay forma de instalar la versión preliminar de Picamera2 mediante un administrador de paquetes o mediante otros mecanismos. Por ahora, tendrás que construirlo desde la fuente. Si no te sientes cómodo haciendo eso, probablemente sea mejor que esperes una versión más estable.

Sin embargo, si echa un vistazo a la vista previa, una vez que haya tenido la oportunidad de mirar el código de ejemplo y tal vez jugar con la biblioteca usted mismo, apreciaríamos mucho escuchar cualquier sugerencia útil. Estaré atento a esta página y a las discusiones en el foro de la cámara para poder intentar responder cualquier pregunta que pueda tener sobre el lanzamiento de hoy.