v2.8.0

v2.8.0 es una versión enorme. Pone en marcha la OpenMV Cam H7 (STM32H7) con un codificador JPEG por hardware y ADC/DAC del H7, una enorme renovación de la API de image (grosor/relleno de dibujo, operaciones matemáticas/binarias, muchos filtros nuevos, umbralización de Otsu), hilos de MicroPython y el módulo de versión omv. Se fijó el orden de análisis de argumentos de Python y se eliminó image.mask_ellipse() — lee los cambios incompatibles a continuación.

Destacados

  • OpenMV Cam H7 — nueva placa STM32H7 con un codificador JPEG por hardware y ADC / DAC del H7.

  • Renovación de image — grosor de línea, rellenos de formas, draw_arrow() / draw_image(), operaciones matemáticas/binarias completas y muchos filtros nuevos.

  • Umbralización de Otsuhistogram.get_threshold() y un objeto Threshold.

  • Hilos — soporte de _thread de MicroPython.

  • Módulo omv — información de versión / placa.

  • Incompatible: el orden de los argumentos posicionales de Python ahora es estricto y se eliminó image.mask_ellipse() — consulta los cambios incompatibles.

Nuevas funciones

  • OpenMV Cam H7 — soporte para la placa STM32H7 con un codificador JPEG por hardware, ADC del H7 y DAC del H7.

  • Dibujo — se añadieron el thickness de línea, el fill de formas (rectángulo / círculo), el scale / kerning de texto, una palabra clave mono_space en draw_string(), image.draw_arrow() y image.draw_image() (dibujo de sprites / máscaras).

  • Operaciones matemáticas — se añadieron add(), sub(), mul(), div(), min(), max(), difference(), blend(), replace() (con hmirror / vflip / mask) y remove_shadows(); las operaciones básicas ahora aceptan un valor escalar/de color aplicado a todos los píxeles.

  • Binario / morfología — un nuevo tipo de imagen binaria y binary(); las operaciones de línea y erode() / dilate() aceptan máscaras; se añadieron open() / close() / top_hat() / black_hat().

  • Filtros — se añadieron cartoon, flood_fill, bilateral, laplacian, los alias blur / gaussian_blur y la ecualización de histograma adaptativa (histeq(adaptive=, clip_limit=, mask=)).

  • Estadísticasget_statistics() / get_histogram() aceptan una lista de umbrales de color e invert; se añadieron el histogram.get_threshold() de Otsu y un objeto Threshold.

  • CMSIS CNN — se añadió image.classify_object() con un ejemplo cnn.py (reemplazado por el módulo nn en la v3.0.0).

  • Hilos — se habilitó el módulo _thread de MicroPython.

  • Módulo omv — se añadió información de versión (version_string, arch, board_type, board_id); se habilitaron el bus I2C4 de machine y las funciones especiales matemáticas (erf, gamma, …); se añadieron ejemplos de motor-shield y muchos scripts de ejemplo nuevos.

Otros cambios y mejoras

  • El reloj externo del sensor del H7 se redujo a 48 MHz (mejor calidad de imagen, menor FPS); la calidad JPEG baja/alta ahora es configurable por placa (y ajustada para el H7); se añadió un gating de funciones imlib_config.h por placa (todas las funciones de imagen permanecen habilitadas en el firmware de fábrica); se actualizó el MicroPython incluido.

Correcciones de errores

Procesamiento de imágenes:

  • Se corrigieron image.save() sin extensión de archivo, el mapeo de gain_db / gain_db_ceiling para el OV2640 / OV7725 / OV9650 / MT9V034, la ganancia excesiva en sharpen(), el ruido en los bordes morfológicos, una división por cero en una operación de imagen y un fallo por desbordamiento de pila con un tamaño de kernel de filtro demasiado grande (ahora un error limpio).

Sistema:

  • Se protegió el búfer USB VCP con una sección atómica (corrupción serie, #313), se corrigieron la conectividad USB en Windows, el montaje del sistema de archivos de la memoria flash interna si falla la tarjeta SD, el valor PLLP de set_frequency() de cpufreq y un error de flasheo de firmware del gestor de arranque (bootloader).

Hardware y soporte de placas

  • OpenMV Cam H7 (STM32H7) — nueva placa con un codificador JPEG por hardware y ADC / DAC del H7.

  • machine — se habilitó el bus I2C4.

Cambios incompatibles en la API

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

Ambos cambios incompatibles son minor y solo afectan a los scripts que usaban la función relevante. Cada hash de commit enlaza a su diff en GitHub.

El orden de los argumentos posicionales de Python ahora es estricto (minor)

El análisis de argumentos en los módulos C de Python (image / sensor / fir / gif / lcd / mjpeg) ahora lee los argumentos posicionales antes que las palabras clave y fija el orden posicional. Combinado con las nuevas palabras clave en los métodos de dibujo (draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() que ganaron thickness / fill / scale / size), el código que pasaba parámetros fuera de orden de forma posicional — o que pasaba un color posicional después de uno de los nuevos argumentos — debe usar argumentos por palabra clave o el orden posicional documentado.

Commits: e0e112468, fc74e70c3

image.mask_ellipse() eliminado (minor)

Se eliminó image.mask_ellipse(). Los scripts que lo llamaban deben eliminar la llamada o usar una ROI / imagen de máscara explícita en su lugar.

Commits: d7159fba3

Lista de comprobación de migración

Pasa los argumentos por palabra clave (o en el orden posicional documentado), especialmente color en los métodos de dibujo (el cambio de orden de argumentos), y elimina las llamadas a image.mask_ellipse() (la eliminación de mask_ellipse). Todos los demás scripts se ejecutan sin cambios.