v2.1.0¶
v2.1.0 es una versión masiva de modernización de la API. Reemplaza el descriptor de puntos clave FREAK por ORB, rediseña find_blobs() / histogramas / estadísticas en APIs basadas en objetos, renombra las funciones de exposición/ganancia/balance de blancos automáticos del sensor, añade detección de códigos QR y corrección de lente para el OV7725, y pone en marcha la placa inicial OpenMV Cam M7. Muchas APIs cambiaron — lee los cambios incompatibles a continuación.
Aspectos destacados¶
Puntos clave ORB — el descriptor FREAK se reemplazó por ORB (
find_keypoints()/match_descriptor()rediseñados).APIs de objetos —
find_blobs(),get_histogram(),get_statistics()ahora devuelven objetos con accesores con nombre.Códigos QR — se añadió la detección
image.find_qrcodes().OpenMV Cam M7 — compatibilidad inicial de placa.
Sensor —
set_auto_whitebal()/set_auto_gain()/set_auto_exposure()(renombradas) yset_lens_correction().Incompatible: las APIs de puntos clave/descriptor, mancha (blob)/histograma/estadísticas, funciones automáticas del sensor y varias otras cambiaron — consulta los cambios incompatibles.
Nuevas características¶
OpenMV Cam M7 — se añadió la compatibilidad inicial de la placa OpenMV 3 (M7).
Códigos QR — se añadió
image.find_qrcodes()con un ejemploqrcodes.py.Puntos clave ORB — nuevo sistema de descriptor ORB:
find_keypoints()con un argumentocorner_detector(CORNER_FAST/CORNER_AGAST),max_keypoints/scale_factor;match_descriptor()con una palabra clavefilter_outliersy una estimación de rotación; guardado/carga de puntos clave.APIs de objetos —
image.get_histogram()/get_statistics()/get_percentile()devuelven objetos de histograma/estadísticas;find_blobs()devuelve objetos de mancha (blob) (rect()/cx()/cy()/code()/area()/pixels()) conarea_threshold/pixels_threshold/merge/margin/invertyx_stride/y_stride.Sensor — se añadió
sensor.set_lens_correction(enable, radi, coef)para el sombreado de lente del OV7725,sensor.set_windowing()ahora también acepta una tupla(w, h)(autocentrada), yimage.Image(..., copy_to_fb=True)/load_image(copy_to_fb=True).Se añadieron scripts de ejemplo de seguimiento de color, SPI/I2C-esclavo de Arduino, puntos clave e histograma/estadísticas.
Otros cambios y mejoras¶
El IDE ahora puede interrumpir un
main.pyen ejecución;find_blobs()/find_qrcodes()/get_statistics()más rápidos; ORB usa una distancia de Hamming por popcount; la corrección de lente usa menos RAM; una reglaudevde Linux evita que ModemManager se apodere del puerto serie.
Correcciones de errores¶
Cámara e imagen:
Se corrigió la limpieza/invalidación de caché DMA del M7 (fotogramas corruptos), una línea extra espuria al final de cada fotograma, los límites de desbordamiento del búfer de fotogramas (frame buffer) JPEG, la liberación del búfer de fotogramas (frame buffer) ante un fallo de
compress(), la precisión / ROI / manejo de conjunto vacío de ORB, y la geometría deload_image(copy_to_fb=True).
Sistema:
Se corrigió la compatibilidad del ADC del F7, el nombre de un registro del OV7725, la temporización del gestor de arranque (bootloader)/USB, se usó WFI mientras se espera por capturas, y se hizo no bloqueante el ejemplo de transmisión MJPEG con tiempos de espera por cliente.
Hardware y compatibilidad de placas¶
OpenMV Cam M7 (OpenMV 3) — compatibilidad inicial de placa.
OV7725 — compatibilidad de corrección de lente (sombreado).
Cambios incompatibles en la API¶
Rupturas de la API visibles para el usuario entre v2.0.0 y v2.1.0. Alcance: módulos C de Python en modules/ y bibliotecas de Python en scripts/libraries/.
Cada cambio está etiquetado con su impacto:
major — afecta a la mayoría de los scripts que usaban la característica; necesitarás portar el código.
minor — API limitada; solo afecta a los scripts que la usaban.
behavior — misma API, resultados diferentes; vuelve a revisar los scripts ajustados.
Los cambios están agrupados por impacto en ese orden. Si solo quieres portar tu código, ve directamente a la lista de verificación de migración al final. Cada hash de commit enlaza a su diff en GitHub.
FREAK reemplazado por ORB; API de descriptor rediseñada (major)¶
El descriptor de puntos clave FREAK se eliminó y se reemplazó por ORB: image.FREAK ya no existe (usa image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() ya no toman un argumento inicial de tipo de descriptor (se infiere del objeto), match_descriptor() ahora devuelve una tupla de 8 elementos (cx, cy, x, y, w, h, match_count, rotation) (el último elemento es un recuento en bruto, no un porcentaje), y draw_keypoints() requiere un objeto de puntos clave en lugar de una lista (x, y, angle) en bruto. find_keypoints() ganó corner_detector / max_keypoints / scale_factor con valores predeterminados cambiados.
Renombrado de funciones automáticas del sensor (major)¶
sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() se renombraron a sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (los nombres antiguos se eliminaron). Cada una ganó una palabra clave opcional value= para establecer un valor manual en lugar de automático.
Commits: 1b22a2961
Histograma / estadísticas rediseñados como APIs de objetos (major)¶
La superficie de histograma/estadísticas se rediseñó en image.get_histogram() / get_statistics() / get_percentile() basados en objetos que devuelven objetos de histograma/estadísticas. Los antiguos resultados planos de histograma/estadísticas y los métodos bin_count / l_bin_count / a_bin_count / b_bin_count se eliminaron (usa len(histogram.bins()), etc.).
scale de find_features() renombrado (major)¶
image.find_features() (Haar) renombró su palabra clave scale= a scale_factor=. Actualiza las llamadas find_features(cascade, scale=...) a scale_factor=....
Commits: 96e4f770c
find_blobs() devuelve objetos; find_markers() eliminado (minor)¶
image.find_blobs() ahora devuelve objetos de mancha (blob) con accesores con nombre (el acceso por índice sigue funcionando por compatibilidad hacia atrás), y image.find_markers() se eliminó — usa find_blobs(..., merge=True, margin=...) en su lugar. La función de retorno (callback) avanzada de filtro de manchas (blob) de color ya no es compatible.
Commits: af15ec6eb
img.copy_to_fb() reemplazado (minor)¶
El método img.copy_to_fb() se reemplazó por una palabra clave copy_to_fb= en image.Image / load_image(). Usa image.Image(path, copy_to_fb=True) para cargar imágenes grandes directamente en el búfer de fotogramas (frame buffer).
Commits: 1645ab94b
compress() rechaza calidades fuera de rango (behavior)¶
image.compress() / compressed() ahora generan un error cuando quality está fuera de 1–100 en lugar de recortar silenciosamente. Recorta quality a 1–100 antes de llamar. Por separado, el búfer JPEG del OpenMV 3 se redujo de 64 KB a 23000 bytes, por lo que los fotogramas grandes ahora pueden generar falta de memoria — reduce la calidad JPEG o el tamaño de fotograma.
El zoom de lens_corr() ahora es funcional (behavior)¶
image.lens_corr() ahora aplica realmente su argumento zoom (antes se analizaba pero era inefectivo), por lo que la salida difiere para los scripts que pasaban un zoom no predeterminado. Vuelve a revisar el ajuste de lens_corr().
Commits: d6b49adef
Lista de verificación de migración¶
Para una migración limpia a v2.1.0, el trabajo típico es:
Reemplaza
image.FREAKporimage.ORB, elimina el argumento de tipo de descriptor y actualiza el desempaquetado de tupla dematch_descriptor()/draw_keypoints()al objeto de puntos clave (el rediseño de ORB).Renombra
sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()a las formasset_auto_*(el renombrado de funciones automáticas).Mueve el código de histograma/estadísticas a los métodos de objeto (el rediseño de histograma/estadísticas).
Renombra
scale=defind_features()ascale_factor=(el renombrado de find_features).Usa los accesores del objeto de mancha (blob) y reemplaza
find_markers()porfind_blobs(merge=True, ...)(el cambio de find_blobs); reemplazaimg.copy_to_fb()por la palabra clavecopy_to_fb=(el cambio de copy_to_fb).Recorta la calidad de
compress()a 1–100 y vuelve a revisar los tamaños JPEG en el OpenMV 3 (el cambio de compress); reajusta el zoom delens_corr()(el cambio de lens_corr).
Todos los demás scripts funcionan sin cambios.