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 eimage.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().Imagen —
gamma_corr(),draw_ellipse(),draw_edges(), fusión alfa endraw_image()y muchas nuevas propiedades de blob.Nuevas bibliotecas — distancia ToF VL53L1X, controlador de motor TB6612, micro-linalg.
Incompatible: la API
cpufreqse rediseñó,sensor.set_framesize()ahora lanza una excepción al fallar,sensor.alloc_extra_fb()eliminó Bayer/JPEG y los argumentos posicionales deimage.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()consensor.PALETTE_RAINBOW/PALETTE_IRONBOW,image.to_rainbow()y scripts de ejemplo de Lepton (27-Lepton).Modo disparado —
IOCTL_SET_TRIGGERED_MODE/IOCTL_GET_TRIGGERED_MODEpara 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 endraw_image(), una palabra clavemask=enclear(), se volvieron a añadirmask_rectangle()/mask_circle()/mask_ellipse(), palabras clave de rotación / hmirror / vflip endraw_string()/draw_text(), una palabra clavetranspose(y los aliasassign/set) enreplace(),x_scale/y_scaleencopy()además decrop()/scale(), un constructorImage()a partir de dimensiones, el formato de píxelsensor.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 motortb6612(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 deset_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 deto_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 debinary()y quedraw_keypoints()acepte tuplas de keypoint.
Sistema:
Se corrigieron fugas por desequilibrio de mark/free de
fb_allocen los métodos deimage/fir/lcd/tv/nn, se hizo quepy_assertliberara 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 herramientacascade_convert.pyen 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:
Adapta el código de
cpufreqaset_frequency()con MHz enteros y aget_current_frequencies()/get_supported_frequencies()(el rediseño de cpufreq).Pasa
maskaimage.replace()como palabra clave (el cambio de replace).Asigna los framebuffers adicionales como
GRAYSCALE/RGB565en lugar de Bayer/JPEG (el cambio de alloc_extra_fb).Captura
ValueErroralrededor desensor.set_framesize()en lugar de comprobarFalse(el cambio de set_framesize).
Todos los demás scripts se ejecutan sin cambios.