v3.9.0¶
v3.9.0 é uma versão principal. Adiciona o port nRF com o Arduino Nano 33 BLE Sense (câmara, módulo audio PDM, ulab, drivers de sensores congelados), traz os sensores térmicos FLIR Lepton e MLX90641 / MLX90621 e um módulo fir profundamente reformulado, ioctls de autofoco OV5640, e o novo tipo de streaming image.ImageIO. O módulo nn CMSIS-NN legado e as antigas classes ImageReader / ImageWriter foram removidos — leia as alterações incompatíveis abaixo.
Destaques¶
Arduino Nano 33 BLE Sense — novo port nRF52840 com câmara, um módulo
audioPDM,ulab, e drivers de sensores congelados.Térmico — suporte a FLIR Lepton, MLX90641, e MLX90621 com um módulo
firreformulado (paletas, espelhamento, escalonamento, radiometria, FFC).Autofoco OV5640 — novos ioctls
sensor.IOCTL_*_AUTO_FOCUS.image.ImageIO— um tipo unificado de stream de imagem (memória ou ficheiro; leitura/escrita/seek/tamanho/fechar) que substituiImageReader/ImageWriter.Incompatível: o módulo
nnCMSIS-NN eimage.ImageReader/image.ImageWriterforam removidos, e o comportamento defind_lines()/firfoi alterado — consulte as alterações incompatíveis.
Novas funcionalidades¶
Port nRF / Arduino Nano 33 BLE Sense — novo port nRF52840 e suporte à placa, com um novo módulo
audio(audio.init(),audio.start_streaming(),audio.stop_streaming()),ulabativado, e drivers de sensores congeladosapds9960/lps22h/lsm9ds1/hts221.image.ImageIO— um novo tipo de stream de imagem com suporte a streams em memória e em ficheiro, comread()/write()/seek()/size()/close(), mais exemplos de leitura/escrita/memória com ImageIO.FLIR Lepton — adicionado suporte a
FIR_LEPTONcomfir.radiometric(),fir.trigger_ffc(), efir.register_vsync_cb().Sensores térmicos — adicionado suporte ao MLX90641 (
FIR_MLX90641) e ao termopilha MLX90621 (drivers oficiais Melexis).Paletas / orientação do
fir— adicionadas as constantesfir.PALETTE_RAINBOW/PALETTE_IRONBOW/GRAYSCALE/RGB565, efir.read_ir()aceita agorahmirror/vflip/transpose.Autofoco 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 alterações e melhorias¶
Mudança para mensagens de erro comprimidas do MicroPython (strings de exceção mais curtas); o argumento
typedofir.init()deteta agora automaticamente via scan do barramento I2C quando omitido; a exceçãoxallocreporta agora o número de bytes pedidos; o UART 8 foi ativado no Portenta; os exemplos FIR foram consolidados emthermal_camera.py/thermal_overlay.py/thermal_overlay_lcd.py. Para caber na flash,image.get_similarity()e a pesquisa seletiva foram desativadas na compilação do OpenMV 4, e a biblioteca de imagens pode agora ser compilada sem sistema de ficheiros (para placas sem sistema de ficheiros).
Correções de erros¶
Câmara e sensores:
Corrigido o cálculo do PCLK do OV5640, adicionados handlers de IRQ I2C em falta (corrigindo bloqueios em transferências I2C), remodelada a leitura/escrita I2C do cambus para maior fiabilidade, tornado o barramento I2C do Lepton selecionável, movidos os pinos de recuperação do barramento cambus para a configuração por placa, nova tentativa no scan do cambus antes de falhar, e funcionamento do OpenMV PT (Lepton + câmara com I2C partilhado).
Térmico:
Corrigido o cálculo do valor máximo em
firget_ir()/draw_ir()eimage.get_similarity()(FLT_MIN→-FLT_MAX), tratamento de 12→16 bits no AMG8833, e precisão do MLX90621 (driver oficial Melexis).
Ecrã, áudio e sistema:
Movidas as transferências do LCD SPI do STM32 para callbacks SPI do HAL (fiabilidade do ecrã), corrigido
audio.init()no Nano 33 (oscilador HF + rácio PDM para o microfone funcionar), o estado do temporizador H7 com o novo HAL,gc_collectno nRF e inicialização/desinicialização antecipada da placa, e suprimida a impressão espúria da mensagem «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âmara, áudio PDM,
ulab, drivers de sensores congelados).Sensores térmicos FLIR Lepton, MLX90641, e MLX90621.
Autofoco OV5640 — OpenMV 2/3/4/4 Plus/PT/Portenta.
Portenta — UART 8 ativado.
Alterações incompatíveis na API¶
Alterações visíveis na API entre v3.8.0 e v3.9.0. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.
Cada alteração está marcada com o seu impacto:
maior — afeta a maioria dos scripts que usavam a funcionalidade; será necessário portar o código.
menor — API restrita; afeta apenas scripts que a utilizavam.
comportamento — mesma API, resultados diferentes; rever scripts ajustados.
As alterações estão agrupadas por impacto nessa ordem. Se pretende apenas portar o seu código, salte para a lista de verificação de migração no final. Cada hash de commit tem uma ligação para o seu diff no GitHub.
Módulo nn CMSIS-NN removido (maior)¶
O módulo nn CMSIS-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 (maior)¶
image.ImageReader / image.ImageWriter e os seus métodos next_frame() / add_frame() foram removidos e substituídos pelo novo tipo image.ImageIO, que suporta streams em memória e em ficheiro através de read() / write() / seek() / size() / close(). O código que utilizava as antigas classes de leitura/escrita deve ser portado para image.ImageIO (consulte os exemplos renomeados imageio_read.py / imageio_write.py).
Commits: 783a78754
Palavra-chave scale de fir.draw_ir() removida (menor)¶
fir.draw_ir() foi reescrito sobre o novo pipeline de desenho de imagens. A palavra-chave scale=(min, max) foi removida, e foram adicionados argumentos hint, x_scale, y_scale, roi, e de deslocamento posicional x/y. Scripts que passavam scale=(min, max) a fir.draw_ir() devem remover esse argumento e usar os novos.
Commits: 0a29103b1
Aproximação em find_lines() (comportamento)¶
image.find_lines() aproxima agora a magnitude do gradiente como (abs(gx) + abs(gy)) / 2 e ignora magnitudes abaixo de 126. Isto é mais rápido mas altera o conjunto de linhas detetadas e os valores do acumulador, pelo que deve rever e reajustar threshold / theta_margin / rho_margin.
Commits: 902ae3c98
fir.snapshot() reformulado (comportamento)¶
fir.snapshot() foi substancialmente reformulado 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/apenas pixformat foi alterado; porte os scripts FIR para a nova forma com palavras-chave (consulte os exemplos atualizados do escudo termopilha).
Commits: 53f2248b8
fir.init() lança exceção em caso de falha (comportamento)¶
fir.init() lança agora uma exceção (e desinicializa de forma limpa) quando o sensor térmico não é detetado, em vez de continuar silenciosamente. Envolva fir.init() num bloco try / except (ou certifique-se de que o sensor está ligado) onde anteriormente dependia de não lançar exceção.
Commits: 4b2f972f3
Lista de verificação de migração¶
Para uma migração limpa para v3.9.0, o trabalho típico é:
Porte a inferência de modelos
nnCMSIS-NN para o módulo TensorFlow Litetf(a remoção do nn).Substitua
image.ImageReader/image.ImageWriterporimage.ImageIO(a alteração do ImageIO).Remova a palavra-chave
scale=(min, max)defir.draw_ir()e use os novos argumentos (a alteração do draw_ir).Reajuste os parâmetros de
find_lines()face à métrica de magnitude aproximada (a alteração do find_lines).Porte os scripts FIR para a nova API de palavras-chave de
fir.snapshot()(a alteração do fir.snapshot) e trate a exceção defir.init()para um sensor em falta (a alteração do fir.init).
Todos os outros scripts funcionam sem alterações.