v3.9.0¶
A v3.9.0 é uma versão importante. Ela adiciona o port nRF com o Arduino Nano 33 BLE Sense (câmera, módulo audio PDM, ulab, drivers de sensores congelados), traz os sensores térmicos FLIR Lepton mais MLX90641 / MLX90621 e um módulo fir fortemente reformulado, ioctls de autofoco do OV5640 e o novo tipo de streaming image.ImageIO. O antigo módulo CMSIS-NN nn e as antigas classes ImageReader / ImageWriter foram removidos — leia as mudanças incompatíveis abaixo.
Destaques¶
Arduino Nano 33 BLE Sense — novo port nRF52840 com câmera, um módulo
audioPDM,ulabe drivers de sensores congelados.Térmico — suporte a FLIR Lepton, MLX90641 e MLX90621 com um módulo
firreformulado (paletas, espelhamento, escalonamento, radiometria, FFC).Autofoco do OV5640 — novos ioctls
sensor.IOCTL_*_AUTO_FOCUS.image.ImageIO— um tipo unificado de stream de imagem (memória ou arquivo; read/write/seek/size/close) substituindoImageReader/ImageWriter.Incompatível: o módulo CMSIS-NN
nneimage.ImageReader/image.ImageWriterforam removidos, e o comportamento defind_lines()/firmudou — veja as mudanças incompatíveis.
Novos recursos¶
Port nRF / Arduino Nano 33 BLE Sense — novo port e suporte de placa nRF52840, com um novo módulo
audio(audio.init(),audio.start_streaming(),audio.stop_streaming()),ulabhabilitado e drivers de sensoresapds9960/lps22h/lsm9ds1/hts221congelados.image.ImageIO— um novo tipo de stream de imagem que suporta tanto streams de memória quanto de arquivo comread()/write()/seek()/size()/close(), além de exemplos de leitura/escrita/memória do ImageIO.FLIR Lepton — adicionado suporte a
FIR_LEPTONcomfir.radiometric(),fir.trigger_ffc()efir.register_vsync_cb().Sensores térmicos — adicionado suporte a termopilha MLX90641 (
FIR_MLX90641) e MLX90621 (drivers oficiais da Melexis).Paletas / orientação do
fir— adicionadas as constantesfir.PALETTE_RAINBOW/PALETTE_IRONBOW/GRAYSCALE/RGB565, efir.read_ir()agora aceitahmirror/vflip/transpose.Autofoco do OV5640 — adicionados
sensor.IOCTL_TRIGGER_AUTO_FOCUS/IOCTL_PAUSE_AUTO_FOCUS/IOCTL_RESET_AUTO_FOCUS/IOCTL_WAIT_ON_AUTO_FOCUS(OpenMV 2/3/4/4 Plus/PT/Portenta).Reorganizados os exemplos do Arduino em diretórios por placa.
Outras mudanças e melhorias¶
Mudança para mensagens de erro comprimidas do MicroPython (strings de exceção mais curtas); o argumento
typedefir.init()agora é detectado automaticamente por meio de uma varredura do barramento I2C quando omitido; a exceçãoxallocagora informa o número de bytes solicitados; o UART 8 foi habilitado no Portenta; os exemplos de FIR foram consolidados emthermal_camera.py/thermal_overlay.py/thermal_overlay_lcd.py. Para caber na flash,image.get_similarity()e a busca seletiva foram desabilitados no build do OpenMV 4, e a biblioteca de imagem agora pode ser compilada sem um sistema de arquivos (para placas sem sistema de arquivos).
Correções de bugs¶
Câmera e sensores:
Corrigido o cálculo do PCLK do OV5640, adicionados handlers de IRQ I2C ausentes (corrigindo travamentos em transferências I2C), reformulada a leitura/escrita I2C do cambus para maior confiabilidade, tornado selecionável o barramento I2C do Lepton, movidos os pinos de recuperação do barramento cambus para configuração por placa, nova tentativa da varredura do cambus uma vez antes de falhar e o OpenMV PT (Lepton + câmera compartilhando o I2C) passou a funcionar.
Térmico:
Corrigido o cálculo do valor máximo em
firget_ir()/draw_ir()eimage.get_similarity()(FLT_MIN→-FLT_MAX), o tratamento de 12→16 bits do AMG8833 e a precisão do MLX90621 (driver oficial da Melexis).
Display, áudio e sistema:
Movidas as transferências do LCD SPI do STM32 para callbacks SPI da HAL (confiabilidade do display), corrigidos o
audio.init()do Nano 33 (oscilador HF + razão PDM para que o microfone funcione), o estado do timer do H7 com a nova HAL, ogc_collectdo nRF e a inicialização/desinicialização inicial da placa, e interrompida a impressão da mensagem espúria “uh oh, no preference for overlapping detection” durantefind_apriltags()/find_rects().
Hardware e suporte a placas¶
Arduino Nano 33 BLE Sense — nova placa nRF52840 (câmera, áudio PDM,
ulab, drivers de sensores congelados).Sensores térmicos FLIR Lepton, MLX90641 e MLX90621.
Autofoco do OV5640 — OpenMV 2/3/4/4 Plus/PT/Portenta.
Portenta — UART 8 habilitado.
Mudanças incompatíveis na API¶
Quebras de API visíveis ao usuário entre a v3.8.0 e a v3.9.0. Escopo: módulos C do Python em modules/ e bibliotecas Python em scripts/libraries/.
Cada mudança é marcada com seu impacto:
major — afeta a maioria dos scripts que usaram o recurso; você precisará portar o código.
minor — API restrita; afeta apenas scripts que a usaram.
behavior — mesma API, resultados diferentes; reavalie scripts ajustados.
As mudanças são agrupadas por impacto nessa ordem. Se você só quer portar seu código, vá direto para o checklist de migração no final. Cada hash de commit possui um link para o seu diff no GitHub.
Módulo CMSIS-NN nn removido (major)¶
O módulo CMSIS-NN nn foi removido, incluindo nn.load(), net.forward(), net.search() e o auxiliar nn_class. A inferência de modelos passa para o módulo TensorFlow Lite (tf). Scripts que carregavam modelos .network com nn devem ser portados para tf com um modelo TensorFlow Lite.
Commits: fbc767b36
ImageReader / ImageWriter substituídos por image.ImageIO (major)¶
image.ImageReader / image.ImageWriter e seus métodos next_frame() / add_frame() foram removidos e substituídos pelo novo tipo image.ImageIO, que suporta tanto streams de memória quanto de arquivo via read() / write() / seek() / size() / close(). Código que usa as antigas classes reader/writer deve ser portado para image.ImageIO (veja os exemplos renomeados imageio_read.py / imageio_write.py).
Commits: 783a78754
Palavra-chave scale de fir.draw_ir() removida (minor)¶
fir.draw_ir() foi reescrita sobre o novo pipeline de desenho de imagem. A palavra-chave scale=(min, max) foi removida, e foram adicionados hint, x_scale, y_scale, roi e argumentos posicionais de deslocamento x/y. Scripts que passavam scale=(min, max) para fir.draw_ir() devem removê-la e usar os novos argumentos.
Commits: 0a29103b1
Aproximação de find_lines() (behavior)¶
image.find_lines() agora aproxima a magnitude do gradiente como (abs(gx) + abs(gy)) / 2 e ignora magnitudes abaixo de 126. Isso é mais rápido, mas altera o conjunto de linhas detectadas e os valores do acumulador, então reavalie e reajuste threshold / theta_margin / rho_margin.
Commits: 902ae3c98
fir.snapshot() reformulada (behavior)¶
fir.snapshot() foi substancialmente reformulada com uma nova API de palavras-chave (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), e os exemplos incluídos foram reescritos. O comportamento anterior posicional/somente-pixformat mudou; porte os scripts FIR para a nova forma de palavras-chave (veja os exemplos atualizados do shield termopilha).
Commits: 53f2248b8
fir.init() lança exceção em falha (behavior)¶
fir.init() agora lança uma exceção (e desinicializa de forma limpa) quando o sensor térmico não é detectado, em vez de continuar silenciosamente. Envolva fir.init() em try / except (ou garanta que o sensor esteja conectado) onde você antes dependia de ela não lançar exceção.
Commits: 4b2f972f3
Checklist de migração¶
Para um port limpo para a v3.9.0, o trabalho típico é:
Porte a inferência de modelos CMSIS-NN
nnpara o módulo TensorFlow Litetf(a remoção do nn).Substitua
image.ImageReader/image.ImageWriterporimage.ImageIO(a mudança do ImageIO).Remova a palavra-chave
scale=(min, max)defir.draw_ir()e use os novos argumentos (a mudança do draw_ir).Reajuste os parâmetros de
find_lines()contra a métrica de magnitude aproximada (a mudança do find_lines).Porte os scripts FIR para a nova API de palavras-chave de
fir.snapshot()(a mudança do fir.snapshot) e tratefir.init()lançando exceção em um sensor ausente (a mudança do fir.init).
Todos os outros scripts funcionam sem alterações.