v2.7.0

A v2.7.0 moderniza a API de ganho automático / exposição automática / balanço de branco do sensor para unidades físicas (dB / microssegundos), reformula a correlação de fase find_displacement() (adicionando rotação/escala) e adiciona get_similarity() (SSIM), chrominvar() / illuminvar(), framebuffers extras e uma biblioteca MQTT. É uma grande versão incompatível — leia as mudanças incompatíveis abaixo.

Destaques

  • API moderna do sensorset_auto_gain() / set_auto_exposure() / set_auto_whitebal() agora usam dB / microssegundos, com os correspondentes get_gain_db() / get_exposure_us() / get_rgb_gain_db().

  • Correlação de fasefind_displacement() reformulado com rotação / escala e find_rotscale() / linpolar() / logpolar().

  • SSIM — similaridade estrutural image.get_similarity().

  • Framebuffers extrassensor.alloc_extra_fb() / dealloc_extra_fb().

  • MQTT — uma nova biblioteca MQTT.

  • Incompatível: a API de ganho/exposição/balanço de branco do sensor, find_displacement() / framesizes de FFT, find_number(), as ferramentas de firmware WINC e o z_rotation() da AprilTag mudaram — veja as mudanças incompatíveis.

Novos recursos

  • Sensor — adicionados sensor.get_gain_db(), sensor.get_exposure_us(), sensor.get_rgb_gain_db(), uma palavra-chave gain_db_ceiling em set_auto_gain(), suporte a hmirror / vflip no MT9V034 e sensor.alloc_extra_fb() / sensor.dealloc_extra_fb() para framebuffers extras na RAM.

  • Image — adicionados remove_shadows(), min() / max() (diferenciação de quadros), get_similarity() (SSIM) com um exemplo de similaridade estrutural, chrominvar() / illuminvar(), find_rotscale(), linpolar() / logpolar(), palavras-chave threshold / offset / invert nos filtros adaptativos mean() / mode() / median() / midpoint(), len() / indexação no objeto de keypoints e um acessor .match() no objeto de correspondência de keypoints.

  • Bibliotecas / rede — adicionada uma biblioteca MQTT (com um exemplo de MQTT por WiFi) e um modo network.WINC.MODE_BSP para programar o firmware WINC pela UART de debug.

  • Exemplos — adicionados scripts de exemplo de baixo consumo deep_sleep.py / stop_mode.py, fluxo óptico avançado e linear/log-polar; o firmware agora analisa uart.ini no boot para habilitar uma UART REPL.

Outras mudanças e melhorias

  • get_regression() ganhou as palavras-chave area_threshold / pixels_threshold e uma regressão robusta mais rápida (para seguimento de linha / corrida); get_pixel() agora suporta imagens Bayer; adicionada a base para o STM32H7 (cabeçalhos CMSIS / HAL / bootloader — a placa H7 ainda não é utilizável); atualizado o firmware WINC1500 incluído (19.4.4 / 19.5.2).

Correções de bugs

Imagem:

  • Corrigiu o bug de acesso fora dos limites na busca em diamante de find_template(), a corrupção de logpolar / linpolar e illuminvar() ficando descontrolado em valores de cor próximos de zero.

Sensor e sistema:

  • Corrigiu bugs de controle de ganho automático, restaurou o tamanho do MAIN_FB em snapshot() (para que copy_to_fb em uma resolução diferente, redimensionamento do FB e pooling de fluxo óptico voltem a funcionar), o timeout do gethostbyname do WINC, o clear-status do pydfu no bootloader H7 e os modos de baixo consumo stop/standby.

Hardware e suporte a placas

  • STM32H7 — base (CMSIS / HAL / bootloader); a placa OpenMV H7 ainda não é utilizável nesta versão.

  • WINC1500 — firmware incluído atualizado.

Mudanças incompatíveis de API

Quebras de API visíveis ao usuário entre a v2.6.0 e a v2.7.0. Escopo: módulos C de Python em modules/ e bibliotecas Python em scripts/libraries/.

Cada mudança é marcada com seu impacto:

  • major — afeta a maioria dos scripts que usavam o recurso; você precisará portar o código.

  • minor — API restrita; afeta apenas scripts que a usavam.

  • behavior — mesma API, resultados diferentes; reverifique scripts ajustados.

As mudanças estão agrupadas por impacto nessa ordem. Se você só quer portar seu código, vá direto para a lista de verificação de migração no final. Cada hash de commit aponta para seu diff no GitHub.

sensor.set_auto_gain() reformulado para dB (major)

sensor.set_auto_gain() não aceita mais a palavra-chave inteira value= e não retorna mais True / False. Use sensor.set_auto_gain(False, gain_db=...) (um valor float em dB), leia-o de volta com o novo sensor.get_gain_db() e envolva a chamada em try / except, já que a falha agora lança ValueError.

Commits: b906c5f19

sensor.set_auto_exposure() reformulado para microssegundos (major)

sensor.set_auto_exposure() não aceita mais a palavra-chave inteira value= e não retorna mais True / False. Use sensor.set_auto_exposure(False, exposure_us=...), leia-o de volta com o novo sensor.get_exposure_us() e trate o ValueError lançado em caso de falha.

Commits: 7be0a7a18

find_displacement() / framesizes de FFT reformulados (major)

A correlação de fase foi reformulada. image.find_displacement() agora retorna um objeto de deslocamento (com x_translation() / y_translation() — antes x_offset / y_offset — além de rotation() / scale() e as novas palavras-chave logpolar / fix_rotation_scale); o objeto rot-scale separado foi removido e find_rotscale() foi adicionado. As constantes de framesize de FFT foram renomeadas/removidas: sensor.B40x30 foi removida totalmente, e sensor.B64x32 / B64x64 foram renomeadas para maiúsculas sensor.B64X32 / B64X64 (com as novas B128X64 / B128X128).

Commits: c78f91b42, 213396d09

sensor.set_auto_whitebal() reformulado para dB (minor)

sensor.set_auto_whitebal() substituiu sua palavra-chave inteira value=[r, g, b] por rgb_gain_db=[r, g, b] (float em dB) e agora retorna None (lançando ValueError em caso de falha) em vez de True / False. Use o novo sensor.get_rgb_gain_db() para ler os ganhos de volta.

Commits: 30ecbdc4f

set_hmirror() / set_vflip() retornam None (minor)

sensor.set_hmirror() e sensor.set_vflip() agora retornam None e lançam ValueError em caso de falha em vez de retornar um status True / False. Remova qualquer código que se ramifique com base no valor de retorno deles.

Commits: aeb023804

Ferramentas de firmware WINC exigem um caminho de arquivo (minor)

As ferramentas de firmware da network.WINC mudaram: wlan.fw_dump() / wlan.fw_update() agora recebem um argumento obrigatório com o caminho do arquivo de firmware e o WINC é aberto em um modo de programação (network.WINC(mode=...)). Atualize as chamadas sem argumentos para passar um caminho (por exemplo, wlan.fw_update("/winc_19_5_2.bin")).

Commits: fcc3b0b9c

image.find_number() exige uma ROI de 28x28 (behavior)

image.find_number() (LeNet) agora exige uma ROI de exatamente 28x28 que caiba dentro da imagem e lança um erro caso contrário (em vez de rodar sobre uma ROI arbitrária/da imagem inteira). Passe um roi=(x, y, 28, 28) explícito.

Commits: 4d09a13f3

Sinal de z_rotation() da AprilTag invertido (behavior)

O z_rotation() da AprilTag (e o rotation() relacionado) agora usa uma convenção de coordenadas dextrógira, então o ângulo retornado é negado em relação às versões anteriores. Scripts que dependem do sinal antigo devem inverter o valor ou ajustar seus cálculos de ângulo.

Commits: 7673aaf74

Lista de verificação de migração

Para um port limpo para a v2.7.0, o trabalho típico é:

  1. Portar set_auto_gain() para gain_db= + get_gain_db() e tratar ValueError (a reformulação do ganho automático).

  2. Portar set_auto_exposure() para exposure_us= + get_exposure_us() (a reformulação da exposição automática).

  3. Atualizar find_displacement() para o objeto de deslocamento e renomear as constantes de framesize de FFT (a reformulação de find_displacement).

  4. Portar set_auto_whitebal() para rgb_gain_db= + get_rgb_gain_db() (a reformulação do balanço de branco) e parar de verificar o retorno de set_hmirror() / set_vflip() (a mudança de mirror/flip).

  5. Passar um caminho de firmware para as ferramentas fw_* do WINC (a mudança das ferramentas WINC).

  6. Passar uma roi de 28x28 para find_number() (a mudança de find_number) e ajustar os cálculos de ângulo da AprilTag para o sinal invertido de z_rotation() (a mudança de z_rotation).

Todos os outros scripts rodam sem alterações.