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 sensor —
set_auto_gain()/set_auto_exposure()/set_auto_whitebal()agora usam dB / microssegundos, com os correspondentesget_gain_db()/get_exposure_us()/get_rgb_gain_db().Correlação de fase —
find_displacement()reformulado com rotação / escala efind_rotscale()/linpolar()/logpolar().SSIM — similaridade estrutural
image.get_similarity().Framebuffers extras —
sensor.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 oz_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-chavegain_db_ceilingemset_auto_gain(), suporte ahmirror/vflipno MT9V034 esensor.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 adaptativosmean()/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_BSPpara 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 analisauart.inino boot para habilitar uma UART REPL.
Outras mudanças e melhorias¶
get_regression()ganhou as palavras-chavearea_threshold/pixels_thresholde 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 delogpolar/linpolareilluminvar()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_FBemsnapshot()(para quecopy_to_fbem uma resolução diferente, redimensionamento do FB e pooling de fluxo óptico voltem a funcionar), o timeout dogethostbynamedo WINC, o clear-status dopydfuno 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).
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 é:
Portar
set_auto_gain()paragain_db=+get_gain_db()e tratarValueError(a reformulação do ganho automático).Portar
set_auto_exposure()paraexposure_us=+get_exposure_us()(a reformulação da exposição automática).Atualizar
find_displacement()para o objeto de deslocamento e renomear as constantes de framesize de FFT (a reformulação de find_displacement).Portar
set_auto_whitebal()parargb_gain_db=+get_rgb_gain_db()(a reformulação do balanço de branco) e parar de verificar o retorno deset_hmirror()/set_vflip()(a mudança de mirror/flip).Passar um caminho de firmware para as ferramentas
fw_*do WINC (a mudança das ferramentas WINC).Passar uma
roide 28x28 parafind_number()(a mudança de find_number) e ajustar os cálculos de ângulo da AprilTag para o sinal invertido dez_rotation()(a mudança de z_rotation).
Todos os outros scripts rodam sem alterações.