v1.2.0

v1.2.0 es una versión fundamental y muy grande que desarrolla la mayor parte de la clásica API de imagen de OpenMV: los métodos de dibujo, las operaciones binarias / de morfología, los descriptores de puntos clave (FAST / FREAK / LBP), las conversiones de color y image.statistics, la E/S de archivos BMP / PPM / JPEG, los módulos lcd, mjpeg, gif y el módulo térmico mlx, la cámara OV7725 y numerosos controles de sensor. Parte del comportamiento básico de sensor cambió — lee los cambios incompatibles más abajo.

Aspectos destacados

  • API de dibujodraw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints().

  • Binarias / morfologíabinary(), invert(), and/or/xor/..., erode() / dilate() / morph(), negate() / difference().

  • Puntos clave — descriptores FAST / FREAK / LBP con match_descriptor() / save_descriptor() / load_descriptor().

  • Nuevos móduloslcd, mjpeg, gif (color) y el módulo térmico mlx.

  • Soporte para la cámara OV7725; image.statistics; E/S de archivos BMP/PPM/JPEG.

  • Incompatible: el comportamiento de sensor.reset(), sensor.snapshot() y sensor.set_pixformat() cambió — consulta los cambios incompatibles.

Nuevas características

  • Dibujo — se añadieron image.draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() con argumentos de palabra clave (color, grosor, …).

  • Binarias / morfología — se añadieron image.binary(), invert(), and() / nand() / or() / nor() / xor() / xnor(), erode() / dilate() / morph(), negate() / difference(), pixels(), centroid(), orientation_radians() / orientation_degrees() y width() / height() / format().

  • Puntos clave / descriptores — extracción de puntos clave FAST mediante find_keypoints(), un match_descriptor() unificado y save_descriptor() / load_descriptor() para FREAK / LBP, además de una cascada Haar/LBP para rostros de perfil.

  • Color / estadísticasimage.statistics y funciones de conversión de color (rgb_to_lab / lab_to_rgb / rgb_to_grayscale / grayscale_to_rgb).

  • E/S de archivos — carga y guardado de BMP / PPM (P2/P3/P5/P6) / JPEG (incluyendo JPEG en escala de grises y submuestreo de croma 4:2:0 / 4:2:2).

  • Módulos — nuevos módulos lcd (escudo LCD), mjpeg (grabación de vídeo), gif en color (con Gif.loop()) y el módulo de cámara térmica mlx, cada uno con scripts de ejemplo.

  • Sensor — se añadieron sensor.get_id() (+ constantes PID OV9650/OV2640/OV7725), sensor.set_special_effect() (constantes SDE_*), sensor.set_image_filter() (FILTER_BW / FILTER_SKIN), el tamaño de fotograma HQVGA e image.set_pixel(x, y, …).

  • WiFi — se añadieron el controlador WiFi ATWINC1500 y los cimientos del BSP para OpenMV 1/2, además de un ejemplo BLE.

Otros cambios y mejoras

  • El framebuffer ahora se comprime en JPEG antes de transmitirse a OpenMV IDE (menor ancho de banda); la compresión JPEG se realiza in situ; el zoom H/V de la OV7725 permite escalado arbitrario; detección de rostros Haar mejorada (más rápida) que se ejecuta a QVGA.

Correcciones de errores

Imagen:

  • Se corrigieron el cálculo de la imagen integral, la corrupción del filtro median(), el cálculo del centroide, los filtros de piel RGB / blanco y negro sobre entrada RGB y una lectura/escritura de BMP/PPM en escala de grises más rápida.

Sensor y sistema:

  • Se corrigieron los temporizadores de pyb.Servo (Servo ahora funciona), la resolución HQVGA, la fiabilidad de la inicialización de la tarjeta SD, la reinicialización del almacenamiento tras un reinicio por software y la reejecución del REPL cuando no hay ningún script presente.

Hardware y soporte de placas

  • Sensor de cámara OV7725.

  • Escudo LCD (módulo lcd), cámara térmica mlx y cimientos del WiFi ATWINC1500.

Cambios incompatibles en la API

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

Los tres cambios incompatibles son cambios de comportamiento en funciones básicas de sensor (misma API, comportamiento distinto) — vuelve a revisar los scripts afectados. Cada hash de commit enlaza con su diff en GitHub. (La inmensa mayoría de esta versión es API nueva desarrollada dentro del rango v1.1→v1.2 y, por tanto, es aditiva, no incompatible.)

sensor.reset() ya no aplica una configuración por defecto (comportamiento)

sensor.reset() ya no aplica una configuración por defecto integrada (pixformat / framesize / framerate / ganancia / contraste / brillo / saturación). Los scripts que dependían de que reset() dejara una configuración por defecto utilizable ahora deben llamar explícitamente a sensor.set_pixformat() y sensor.set_framesize() (y a cualquier otro ajuste) después de reset().

Commits: d1e782df3

sensor.snapshot() lanza una excepción al agotarse el tiempo (comportamiento)

sensor.snapshot() ahora lanza RuntimeError("Sensor Timeout!!") cuando el sensor agota su tiempo de espera, en lugar de quedarse colgado indefinidamente. Envuelve snapshot() en try / except RuntimeError si necesitas tolerar los tiempos de espera.

Commits: e3f41d674

sensor.set_pixformat() lanza una excepción ante un formato no soportado (comportamiento)

sensor.set_pixformat() ahora lanza una excepción cuando se le pasa un formato de píxel no soportado, en lugar de devolver False. El código que comprobaba el valor de retorno False ahora debe capturar la excepción.

Commits: e0c5822c2

Lista de verificación de migración

Para una migración limpia a v1.2.0 el trabajo habitual es:

  1. Establece explícitamente sensor.set_pixformat() / sensor.set_framesize() después de sensor.reset() (el cambio de reset).

  2. Envuelve sensor.snapshot() en try / except RuntimeError si necesitas tolerar los tiempos de espera del sensor (el cambio de snapshot).

  3. Captura la excepción de sensor.set_pixformat() en lugar de comprobar si devuelve False (el cambio de set_pixformat).

Todos los demás scripts se ejecutan sin cambios.