v3.0.0

v3.0.0 es la versión principal v2 → v3. Introduce la OpenMV Cam M7 (STM32F7) y el nuevo módulo de red neuronal CMSIS-NN nn (que sustituye a los antiguos métodos preprogramados find_number() / classify_object()), añade el soporte de los sensores MT9V034 de obturador global y FLIR Lepton, los tamaños de fotograma sensor.WVGA y actualiza el núcleo a MicroPython 1.9.4. Varios comportamientos de image / sensor / WiFi cambiaron; consulta los cambios incompatibles más abajo.

Aspectos destacados

  • OpenMV Cam M7: nueva placa STM32F7.

  • Módulo nn: inferencia CMSIS-NN: nn.load(), Net.forward(), Net.search(), con un conversor de modelos y ejemplos.

  • Nuevos sensores: MT9V034 de obturador global (activado por FSIN) y FLIR Lepton.

  • Actualización del núcleo a MicroPython 1.9.4.

  • Incompatible: se eliminaron los métodos preprogramados image.find_number() / image.classify_object(), sensor.sleep() ahora lanza una excepción, los sockets WINC devuelven recuentos de bytes reales, image.binary() devuelve una imagen nueva y find_apriltags() está limitado a 64K píxeles; consulta los cambios incompatibles.

Nuevas funciones

  • nn: un nuevo módulo de red neuronal CMSIS-NN: nn.load(path), Net.forward(img, roi=, softmax=, dry_run=) (devuelve floats de 0.0 a 1.0), Net.search() para detección multiescala/posición y Net.test(), además de un conversor de modelos CMSIS-NN (nn_convert.py / nn_quantizer.py), modelos CIFAR-10 / LeNet / smile incluidos y scripts de ejemplo de NN / NN-search.

  • Sensores: soporte del MT9V034 de obturador global (captura activada por FSIN) en la OpenMV 4, un controlador FLIR Lepton actualizado con captura Lepton y los nuevos tamaños de fotograma sensor.WVGA (720x480) / sensor.WVGA2 (752x480).

  • Imagen: image.find_circles() incorporó las palabras clave r_min / r_max / r_step (Hough más rápido), find_keypoints() y el find_features() de Haar ahora aceptan imágenes RGB, e image.compress() / la codificación JPEG ahora admiten imágenes binarias (bitmap).

  • Arranque: boot.py ahora se ejecuta antes de la inicialización del USB para poder sustituir el modo USB (por ejemplo, HID).

  • Ejemplos: se añadieron ejemplos de AprilTag de baja/alta resolución, un ejemplo de LIDAR-Lite V3 por I2C y herramientas para conjuntos de datos (augment_images.py / make_patches.py).

Otros cambios y mejoras

  • Se actualizó el MicroPython incluido a 1.9.4 (con una reversión de parse/compile/exec de pyexec y una corrección de PendSV); mensajes de error de falta de memoria de fb_alloc / xalloc más claros; se suprimió el ruido de printf de nn durante la carga de la red; se reorganizó el repositorio (ejemplos → scripts/, herramientas → tools/, cascadas Haar → ml/). El módulo nn no está disponible en la OpenMV 2 (memoria flash insuficiente).

Correcciones de errores

Imagen:

  • Se corrigió fast_atan2f para x≤0 (anteriormente siempre 0; vuelve a comprobar los ángulos de manchas (blobs) / líneas / puntos clave), el manejo de memoria de find_apriltags() (contenido descartado y un realloc incorrecto en caso de falta de memoria), los punteros de fila por bpp de binario/bitmap (resultados binarios corruptos), find_edges(EDGE_CANNY) con una ROI, la macro TO_GS_PIXEL (integral / morph), el streaming de bitmap/JPEG para fotogramas en escala de grises (bpp==0), el pop_front de la lista de puntos clave/manchas (blobs) y los resultados de match_descriptor.

Sistema y cámara:

  • Se corrigieron los números de interfaz/endpoint de USB HID, el cambio dinámico de la frecuencia XCLK en tiempo de ejecución, que Net.forward() devolviera el número correcto de salidas y un fallo grave al interrumpir el análisis del script.

Soporte de hardware y placas

  • OpenMV Cam M7 (STM32F7): nueva placa.

  • Sensor MT9V034 de obturador global (OpenMV 4, activado por FSIN).

  • FLIR Lepton: controlador actualizado con soporte de captura.

Cambios incompatibles en la API

Cambios incompatibles en la API visibles para el usuario entre v2.9.0 y v3.0.0. Alcance: módulos C de Python en modules/ y bibliotecas de Python en scripts/libraries/.

Cada cambio está etiquetado según su impacto:

  • mayor: afecta a la mayoría de los scripts que usaban la función; tendrás que adaptar el código.

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

  • comportamiento: misma API, resultados diferentes; vuelve a comprobar 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 para la migración al final. Cada hash de commit enlaza con su diff en GitHub.

Se eliminaron image.find_number() / image.classify_object() (mayor)

Los métodos preprogramados image.find_number() (LeNet) e image.classify_object() (CMSIS CNN) se eliminaron en favor del nuevo módulo nn. Sustitúyelos por net = nn.load('/model.network'); out = net.forward(img).

Commits: d151f7e38

sensor.sleep() / sensor.reset() lanzan una excepción en caso de fallo (menor)

sensor.sleep() y sensor.reset() ahora lanzan una excepción en caso de fallo en lugar de devolver True / False. El código que comprobaba el valor booleano devuelto por sensor.sleep() debe envolver la llamada en try / except en su lugar.

Commits: 7d16d008f

Los sockets WINC devuelven el recuento de bytes real (comportamiento)

Los métodos send / recv / sendto / recvfrom de los sockets del WINC1500 anteriormente devolvían siempre 0; ahora devuelven el número real de bytes transferidos. El código que asumía un valor de retorno de 0 (o que hacía un bucle o se bloqueaba en él) debe gestionar los recuentos reales.

Commits: a07fb2f60

image.binary() devuelve una imagen nueva (comportamiento)

image.binary() incorporó las palabras clave to_bitmap / copy y ahora devuelve un nuevo objeto de imagen en lugar de devolver/modificar la imagen de origen in situ. El código que dependía de que binary() modificara la imagen original debe usar el objeto devuelto (y pasar copy=True para un comportamiento que no sea in situ).

Commits: 8a44f0cd9

find_apriltags() limitado a 64K píxeles (comportamiento)

image.find_apriltags() ahora lanza una excepción si la imagen (o la ROI) supera los 64K píxeles y devuelve una lista vacía para imágenes menores de 4x4. Reduce las imágenes grandes (usa un framesize más pequeño o pasa una roi explícita) antes de llamar a find_apriltags().

Commits: bd77afbc0

Lista de comprobación para la migración

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

  1. Sustituir image.find_number() / image.classify_object() por el módulo nn (la migración a nn).

  2. Envolver sensor.sleep() / sensor.reset() en try / except en lugar de comprobar un valor de retorno booleano (el cambio de sensor.sleep).

  3. Gestionar los recuentos de bytes reales de send / recv de los sockets WINC (el cambio de los sockets WINC).

  4. Usar la imagen devuelta por image.binary() en lugar de esperar una modificación in situ (el cambio de binary).

  5. Reducir las imágenes antes de find_apriltags() para mantenerse por debajo de los 64K píxeles (el límite de find_apriltags).

Todos los demás scripts se ejecutan sin cambios.