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 dibujo —
draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints().Binarias / morfología —
binary(),invert(),and/or/xor/...,erode()/dilate()/morph(),negate()/difference().Puntos clave — descriptores FAST / FREAK / LBP con
match_descriptor()/save_descriptor()/load_descriptor().Nuevos módulos —
lcd,mjpeg,gif(color) y el módulo térmicomlx.Soporte para la cámara OV7725;
image.statistics; E/S de archivos BMP/PPM/JPEG.Incompatible: el comportamiento de
sensor.reset(),sensor.snapshot()ysensor.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()ywidth()/height()/format().Puntos clave / descriptores — extracción de puntos clave FAST mediante
find_keypoints(), unmatch_descriptor()unificado ysave_descriptor()/load_descriptor()para FREAK / LBP, además de una cascada Haar/LBP para rostros de perfil.Color / estadísticas —
image.statisticsy 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),gifen color (conGif.loop()) y el módulo de cámara térmicamlx, 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 fotogramaHQVGAeimage.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érmicamlxy 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:
Establece explícitamente
sensor.set_pixformat()/sensor.set_framesize()después desensor.reset()(el cambio de reset).Envuelve
sensor.snapshot()entry/except RuntimeErrorsi necesitas tolerar los tiempos de espera del sensor (el cambio de snapshot).Captura la excepción de
sensor.set_pixformat()en lugar de comprobar si devuelveFalse(el cambio de set_pixformat).
Todos los demás scripts se ejecutan sin cambios.