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.