v3.3.0

v3.3.0 es una versión enorme. Añade compatibilidad completa con la cámara térmica FLIR Lepton mediante una nueva interfaz sensor.ioctl() y paletas de color, un módulo de salida de vídeo por SPI tv, modo disparado con obturador global, un gran conjunto de nuevos métodos de dibujo/análisis de image (gamma_corr(), draw_ellipse(), draw_edges(), muchas propiedades de blob) y nuevas bibliotecas de ToF / motor / linalg. La API cpufreq se rediseñó y sensor.set_framesize() ahora lanza una excepción — lee los cambios incompatibles más abajo.

Aspectos destacados

  • FLIR Lepton — compatibilidad completa con cámara térmica mediante la nueva interfaz sensor.ioctl(), paletas de color e image.to_rainbow().

  • Módulo tv — salida de vídeo por SPI TV / compuesto.

  • Modo disparado con obturador global — captura disparada del MT9V034 mediante sensor.ioctl().

  • Imagengamma_corr(), draw_ellipse(), draw_edges(), fusión alfa en draw_image() y muchas nuevas propiedades de blob.

  • Nuevas bibliotecas — distancia ToF VL53L1X, controlador de motor TB6612, micro-linalg.

  • Incompatible: la API cpufreq se rediseñó, sensor.set_framesize() ahora lanza una excepción al fallar, sensor.alloc_extra_fb() eliminó Bayer/JPEG y los argumentos posicionales de image.replace() se desplazaron — consulta los cambios incompatibles.

Nuevas características

  • FLIR Lepton — se añadió sensor.ioctl() para el control específico del sensor y un conjunto completo de ioctls de Lepton (radiometría, refresco/resolución, ejecución de comandos, establecer/obtener atributos, temperatura del FPA/AUX en °C, modo/rango de medición, ancho/alto), sensor.set_color_palette() / sensor.get_color_palette() con sensor.PALETTE_RAINBOW / PALETTE_IRONBOW, image.to_rainbow() y scripts de ejemplo de Lepton (27-Lepton).

  • Modo disparadoIOCTL_SET_TRIGGERED_MODE / IOCTL_GET_TRIGGERED_MODE para la captura disparada con obturador global del MT9V034, con ejemplos de alta tasa de fotogramas y de modo disparado.

  • Módulo tv — se añadieron enlaces de salida de vídeo por SPI TV / compuesto.

  • Imagen — se añadieron image.gamma_corr(), image.draw_ellipse(), image.draw_edges(), fusión alfa en draw_image(), una palabra clave mask= en clear(), se volvieron a añadir mask_rectangle() / mask_circle() / mask_ellipse(), palabras clave de rotación / hmirror / vflip en draw_string() / draw_text(), una palabra clave transpose (y los alias assign / set) en replace(), x_scale / y_scale en copy() además de crop() / scale(), un constructor Image() a partir de dimensiones, el formato de píxel sensor.BINARY, funciones exportadas de conversión de espacios de color y muchas nuevas propiedades de blob (corners, perimeter, roundness, elongation, extent, compactness, solidity, convexity, enclosing_circle, enclosed_ellipse, rotación).

  • Bibliotecas — se añadieron el controlador del sensor de distancia ToF vl53l1x, el controlador de motor tb6612 (con ejemplos de motor DC y de motor paso a paso para el Motor-Shield) y una biblioteca micro-linalg (ulinalg / umatrix).

  • Se actualizó FatFS a FF13C (compatible con exFAT).

Otros cambios y mejoras

  • Se mejoró la calidad JPEG predeterminada (punto medio entre bajo y alto en lugar de un valor codificado de forma fija); las operaciones de imagen en el sitio ya no requieren repetir la imagen como primer argumento; draw_string() acepta valores de escala no enteros.

Corrección de errores

Cámara y sensores:

  • Se corrigió el bloqueo al iniciar la Lepton 3.5 (tiempo de espera + recuperación) y la fiabilidad del reinicio, set_framesize() antes de set_pixformat() en el MT9V034 (el orden de las llamadas ya no importa), WVGA del MT9V034 en el STM32H7, el rango de autoexposición del MT9V034 y las actualizaciones de los registros sombra, y el error del ADC del H7.

Imagen:

  • Se corrigió un acceso de memoria no válido en find_apriltags(), copy() al copiar una imagen escalada al framebuffer principal, la asignación de framebuffer de to_grayscale() / to_rgb565(), len() del objeto keypoint, el manejo de los límites de MCU de JPEG, el análisis de la lista de umbrales de binary() y que draw_keypoints() acepte tuplas de keypoint.

Sistema:

  • Se corrigieron fugas por desequilibrio de mark/free de fb_alloc en los métodos de image / fir / lcd / tv / nn, se hizo que py_assert liberara la memoria del framebuffer en las excepciones capturadas (#417), se borró el indicador de desbordamiento (ORE) del UART para que los desbordamientos ya no atasquen las lecturas del UART, se corrigió el gestor de IRQ del RTC y se corrigió la herramienta cascade_convert.py en Windows.

Hardware y compatibilidad de placas

  • Cámara térmica FLIR Lepton.

  • TV shield — salida de vídeo por SPI TV / compuesto.

  • Obturador global (MT9V034) modo disparado.

Cambios incompatibles en la API

Rupturas de la API visibles para el usuario entre v3.2.0 y v3.3.0. Alcance: módulos C de Python en modules/ y bibliotecas de Python en scripts/libraries/.

Cada cambio está etiquetado con su impacto:

  • mayor — afecta a la mayoría de los scripts que usaban la característica; tendrás que adaptar el código.

  • menor — API reducida; solo afecta a los scripts que la usaban.

  • comportamiento — misma API, resultados distintos; vuelve a revisar los scripts ajustados.

Los cambios se agrupan por impacto en ese orden. Si solo quieres adaptar tu código, salta a la lista de comprobación de migración al final. Cada hash de commit enlaza con su diff en GitHub.

API cpufreq rediseñada (mayor)

El módulo cpufreq se rediseñó para dar compatibilidad con el H7. Se eliminaron las constantes cpufreq.CPUFREQ_120MHZ / 144 / 168 / 192 / 216MHZ y cpufreq.get_frequency(). cpufreq.set_frequency() ahora toma un entero simple en MHz (p. ej. cpufreq.set_frequency(120)), y se añadieron cpufreq.get_current_frequencies() / cpufreq.get_supported_frequencies().

Commits: 6babf84a1

Los argumentos posicionales de image.replace() se desplazaron (menor)

image.replace() ganó un argumento transpose, desplazando el argumento posicional mask de la posición 4 a la posición 5. El código que pasaba mask de forma posicional (p. ej. img.replace(src, hmirror, vflip, mask)) debe cambiar a la forma con palabra clave img.replace(src, mask=mask).

Commits: dbe7bf059

sensor.alloc_extra_fb() ya no acepta Bayer/JPEG (menor)

sensor.alloc_extra_fb() ya no acepta sensor.BAYER ni sensor.JPEG (ahora también admite sensor.BINARY). El código que asignaba framebuffers adicionales en formato Bayer o JPEG debe usar GRAYSCALE / RGB565 (o asignar el búfer de otra forma).

Commits: f9e6b3fe0

sensor.set_framesize() lanza una excepción al fallar (comportamiento)

sensor.set_framesize() ahora lanza un ValueError cuando el tamaño de fotograma no es compatible, en lugar de devolver False. El código que comprobaba el valor de retorno False debe capturar la excepción ValueError en su lugar.

Commits: b0442633e

Lista de comprobación de migración

Para una adaptación limpia a v3.3.0, el trabajo habitual es:

  1. Adapta el código de cpufreq a set_frequency() con MHz enteros y a get_current_frequencies() / get_supported_frequencies() (el rediseño de cpufreq).

  2. Pasa mask a image.replace() como palabra clave (el cambio de replace).

  3. Asigna los framebuffers adicionales como GRAYSCALE / RGB565 en lugar de Bayer/JPEG (el cambio de alloc_extra_fb).

  4. Captura ValueError alrededor de sensor.set_framesize() en lugar de comprobar False (el cambio de set_framesize).

Todos los demás scripts se ejecutan sin cambios.