v2.7.0

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 acrescenta get_similarity() (SSIM), chrominvar() / illuminvar(), buffers de fotograma extra e uma biblioteca MQTT. É uma versão com muitas alterações incompatíveis — consulte as alterações incompatíveis abaixo.

Destaques

  • API de sensor modernaset_auto_gain() / set_auto_exposure() / set_auto_whitebal() utilizam agora 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().

  • Buffers de fotograma extrasensor.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() / tamanhos de fotograma FFT, find_number(), as ferramentas de firmware WINC e z_rotation() dos AprilTags foram todos alterados — consulte as alterações incompatíveis.

Novas funcionalidades

  • 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 hmirror / vflip no MT9V034 e sensor.alloc_extra_fb() / sensor.dealloc_extra_fb() para buffers de fotograma extra em RAM.

  • Imagem — adicionados remove_shadows(), min() / max() (diferenciação de fotogramas), 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 pontos-chave e um acessor .match() no objeto de correspondência de pontos-chave.

  • Bibliotecas / rede — adicionada uma biblioteca MQTT (com um exemplo de MQTT WiFi) e um modo network.WINC.MODE_BSP para programar firmware WINC via o UART de depuração.

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

Outras alterações e melhorias

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

Correções de erros

Processamento de imagem:

  • Corrigido o erro de acesso fora dos limites na pesquisa em diamante de find_template(), a corrupção de logpolar / linpolar e o comportamento errático de illuminvar() com valores de cor próximos de zero.

Sensor e sistema:

  • Corrigidos erros no controlo de ganho automático, restaurado o tamanho de MAIN_FB em snapshot() (para que copy_to_fb com uma resolução diferente, redimensionamento do FB e pooling de fluxo ótico funcionem novamente), o tempo limite de gethostbyname do WINC, o pydfu clear-status no bootloader do H7 e os modos de suspensão/espera de baixo consumo.

Hardware e suporte de placas

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

  • WINC1500 — firmware integrado atualizado.

Alterações incompatíveis de API

Alterações de API visíveis ao utilizador entre v2.6.0 e v2.7.0. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.

Cada alteração está etiquetada com o seu impacto:

  • major — afeta a maioria dos scripts que utilizavam a funcionalidade; será necessário portar código.

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

  • behavior — mesma API, resultados diferentes; verifique novamente os scripts ajustados.

As alterações estão agrupadas por impacto nessa ordem. Se quiser apenas portar o seu código, salte para a lista de verificação de migração no final. Cada hash de commit está ligado ao seu diff no GitHub.

sensor.set_auto_gain() reformulado para dB (major)

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

Commits: b906c5f19

sensor.set_auto_exposure() reformulado para microssegundos (major)

sensor.set_auto_exposure() já não aceita a palavra-chave inteira value= e já não retorna 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 gerado em caso de falha.

Commits: 7be0a7a18

find_displacement() / tamanhos de fotograma FFT reformulados (major)

A correlação de fase foi reformulada. image.find_displacement() retorna agora um objeto de deslocamento (com x_translation() / y_translation() — anteriormente x_offset / y_offset — mais rotation() / scale() e novas palavras-chave logpolar / fix_rotation_scale); o objeto de rot-escala separado foi removido e find_rotscale() adicionado. As constantes de tamanho de fotograma FFT foram renomeadas/removidas: sensor.B40x30 foi removido completamente, e sensor.B64x32 / B64x64 foram renomeados para maiúsculas sensor.B64X32 / B64X64 (com novos B128X64 / B128X128).

Commits: c78f91b42, 213396d09

sensor.set_auto_whitebal() reformulado para dB (minor)

sensor.set_auto_whitebal() substituiu a palavra-chave inteira value=[r, g, b] por rgb_gain_db=[r, g, b] (dB float) e retorna agora None (gerando 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() retornam agora None e geram ValueError em caso de falha em vez de retornar um estado True / False. Remova qualquer código que ramifique com base no valor de retorno destes.

Commits: aeb023804

As ferramentas de firmware WINC requerem um caminho de ficheiro (minor)

As ferramentas de firmware de network.WINC foram alteradas: wlan.fw_dump() / wlan.fw_update() requerem agora um argumento obrigatório de caminho para o ficheiro de firmware e o WINC é aberto num modo de programação (network.WINC(mode=...)). Atualize as chamadas sem argumento para passar um caminho (por exemplo, wlan.fw_update("/winc_19_5_2.bin")).

Commits: fcc3b0b9c

image.find_number() requer um ROI de 28x28 (behavior)

image.find_number() (LeNet) requer agora um ROI exatamente de 28x28 que caiba dentro da imagem e gera um erro caso contrário (em vez de executar num ROI arbitrário/imagem completa). Passe um roi=(x, y, 28, 28) explícito.

Commits: 4d09a13f3

Sinal de z_rotation() do AprilTag invertido (behavior)

O z_rotation() do AprilTag (e o rotation() relacionado) utiliza agora uma convenção de coordenadas com mão direita, pelo que o ângulo retornado é negado em relação às versões anteriores. Os scripts que dependem do sinal antigo devem inverter o valor ou ajustar os seus cálculos de ângulo.

Commits: 7673aaf74

Lista de verificação de migração

Para uma migração limpa para 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 tamanho de fotograma 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 valor de retorno de set_hmirror() / set_vflip() (a alteração de espelho/inversão).

  5. Passar um caminho de firmware para as ferramentas WINC fw_* (a alteração das ferramentas WINC).

  6. Passar um roi de 28x28 para find_number() (a alteração de find_number) e ajustar o cálculo do ângulo AprilTag para o sinal invertido de z_rotation() (a alteração de z_rotation).

Todos os outros scripts funcionam sem alterações.