v2.4.0¶
v2.4.0 reescribe find_lines() como un detector basado en la transformada de Hough, añade find_line_segments(), decodificación de matrices de datos con find_datamatrices(), sensor.set_vsync_output(), lectura/escritura de porciones de imagen y muchos nuevos tamaños de fotograma escalados para mayor FPS. find_lines(), match_descriptor() y skip_frames() cambiaron: lee los cambios que rompen la compatibilidad más abajo.
Aspectos destacados¶
find_lines()— reescrito como un detector de líneas basado en la transformada de Hough que devuelve objetos de línea (ahora funciona en RGB565, no solo en escala de grises).find_line_segments()— detecta segmentos de línea finitos.find_datamatrices()— decodificación de matrices de datos.sensor.set_vsync_output()— controla VSYNC en un pin de E/S para la sincronización de la cámara.Más tamaños de fotograma — muchas resoluciones escaladas adicionales para mayor FPS.
Cambio que rompe la compatibilidad:
find_lines(),match_descriptor()yskip_frames()cambiaron; consulta los cambios que rompen la compatibilidad.
Nuevas funcionalidades¶
image.find_line_segments()— encuentra segmentos de línea no infinitos; los objetos de línea ganaron un descriptor de acceso.length().image.find_datamatrices()— decodificación de matrices de datos, con scripts de ejemplo.sensor.set_vsync_output(pin)— emite la señal VSYNC en un pin GPIO para la sincronización de la cámara (OpenMV 2 / OpenMV 3).Porciones de imagen — la indexación de imagen / el protocolo de búfer ahora admite la lectura y escritura de porciones de los datos de la imagen.
Se añadieron muchas combinaciones adicionales de resolución / tamaño de fotograma escaladas para admitir mayores tasas de fotogramas;
clock.fps()ahora reinicia sus acumuladores cada 2 s para que los FPS reportados sigan la tasa reciente.
Otros cambios y mejoras¶
El OV7725 se enventana a QVGA cuando la resolución es ≤ VGA (menos fotogramas descartados a altas tasas de captura) y su PLL se configuró a 6× con un reloj externo reducido (OpenMV 2 48 MHz, OpenMV 3 54 MHz), alterando la temporización de los fotogramas del sensor.
Correcciones de errores¶
Imagen:
Se corrigió el error de tamaño de búfer de
compress_for_ide()(marcador de inicio/fin), la decodificación de QR (más correcciones aguas arriba de la indexación del mapa de bits de celdas de quirc y de los límites del patrón de alineación).
Sensor y conectividad:
Se redujo el reloj del sensor de la OpenMV 2 para que funcionara con el PLL de sensor más alto (init/sincronización de la cámara) y se hizo que
socket.recvfrom()de WINC devolviera el tamaño realmente recibido (lanzando un error ante un tamaño no positivo en lugar de devolver un valor obsoleto).
Hardware y compatibilidad de placas¶
Salida VSYNC en un pin GPIO (OpenMV 2 / OpenMV 3) que respalda
sensor.set_vsync_output().OpenMV 3 — se habilitó el UART1 de
pyb.UART.
Cambios de API que rompen la compatibilidad¶
Rupturas de API visibles para el usuario entre v2.3.0 y v2.4.0. Alcance: módulos C de Python en modules/ y bibliotecas de Python en scripts/libraries/.
Cada cambio está etiquetado con su impacto:
mayor — afecta a la mayoría de los scripts que usaban la funcionalidad; tendrás que adaptar tu código.
menor — API restringida; solo afecta a los scripts que la usaban.
comportamiento — misma API, resultados diferentes; vuelve a revisar los scripts ajustados.
Los cambios se agrupan por impacto en ese orden. Si solo quieres adaptar tu código, salta a la lista de verificación de migración al final. Cada hash de commit enlaza a su diff en GitHub.
find_lines() reescrito como detector de Hough (mayor)¶
image.find_lines() se reescribió como un detector basado en la transformada de Hough. Ya no devuelve una lista de tuplas (x1, y1, x2, y2): devuelve objetos de línea (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) y ahora también funciona en RGB565 (no solo en escala de grises). El argumento threshold cambió de un valor flotante de 0.0 a 1.0 a una suma entera de magnitud de borde, line.magnitude ahora es un entero y se añadieron nuevas palabras clave theta_margin / rho_margin. Adapta el código de desempaquetado de tuplas a los objetos de línea y vuelve a ajustar threshold.
match_descriptor() devuelve un objeto de coincidencia (menor)¶
image.match_descriptor() (ORB) ahora devuelve un objeto kptmatch con descriptores de acceso .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() en lugar de una tupla simple de 8 elementos. El objeto sigue siendo indexable/troceable, por lo que la indexación posicional sigue funcionando, pero el código que hacía isinstance(result, tuple) (o usaba métodos de tupla) debe usar los nuevos descriptores de acceso.
Commits: e960546b6
sensor.skip_frames() ahora se basa en el tiempo (comportamiento)¶
sensor.skip_frames() se rediseñó para aceptar una palabra clave time= (predeterminado ~300 ms) y ahora se basa en el tiempo de forma predeterminada en lugar de ejecutar un número fijo de fotogramas, deteniéndose antes una vez que transcurre el tiempo. Los scripts que dependían de un número exacto de fotogramas deben pasar un recuento explícito y/o establecer time= en consecuencia.
Commits: a039b5d1c
Lista de verificación de migración¶
Para una adaptación limpia a v2.4.0, el trabajo habitual es:
Adapta el desempaquetado de tuplas de
find_lines()a los objetos de línea y vuelve a ajustar elthresholdentero (la reescritura de find_lines).Usa los descriptores de acceso de
kptmatchen lugar de tratar los resultados dematch_descriptor()como una tupla (el cambio de match_descriptor).Pasa un recuento explícito y/o
time=asensor.skip_frames()si dependías de un número fijo de fotogramas (el cambio de skip_frames).
Todos los demás scripts se ejecutan sin cambios.