v4.8.0¶
A v4.8.0 é uma versão de lançamento com recursos importantes. Em destaque: um novíssimo módulo de câmera csi baseado em classes com suporte a múltiplas câmeras, a placa OpenMV N6 (STM32N6) com uma NPU Neural-ART, um backend de inferência via NPU, o modo de eventos RAW da câmera de eventos GenX320, um novo módulo crc, uma biblioteca de pós-processamento de ML reorganizada e o MicroPython 1.26. Ela também remove algumas APIs legadas — o módulo buzzer e o controle da FLIR Lepton do módulo fir — então leia as mudanças incompatíveis abaixo.
Destaques¶
Novo módulo de câmera
csi. Uma APIcsi.CSIbaseada em classes com suporte a múltiplas câmeras simultâneas, apresentada ao lado do módulo legadosensor.OpenMV N6. A placa STM32N6, com uma NPU Neural-ART, triple buffering, Soft-CSI e um módulo ToF.
Inferência via NPU. Um backend ST Neural-ART (STAI) para inferência de modelos acelerada por hardware.
Modo de eventos GenX320. Saída de eventos RAW mais
draw_event_histogram()para renderização de câmera de eventos.Pós-processamento de ML reorganizado — subpacotes por fornecedor (
ml.postprocessing.ultralytics,mediapipe,edgeimpulse,darknet) com novos detectores BlazeFace / BlazePalm / de pontos de referência de mãos e rostos.Novo módulo
crc— CRC-16 / CRC-32 acelerado por hardware.MicroPython atualizado para 1.26.0.
Incompatível: o módulo
buzzere o controle da Lepton do módulofirforam removidos (a Lepton agora é uma câmera comum). Veja a mudança do fir/Lepton e a remoção do buzzer.
Novos recursos¶
O novo módulo de câmera
csi— um objetocsi.CSIbaseado em classes com múltiplas câmeras simultâneas (até três na N6), snapshot não bloqueante, tamanhos de quadro(w, h)personalizados e umprint()/ repr informativo. Ele é apresentado ao lado do módulo legadosensor(não é um substituto direto).crc—crc.crc16()ecrc.crc32(), acelerados por hardware com um fallback em software, na OpenMV N6 e AE3.image.Image.draw_image()ganhou uma palavra-chavetransform=(uma matrizndarrayde floats 2-D para transformações afins/de perspectiva, acelerada por GPU em STM32 e Alif); a mesma transformação está disponível na conversão de imagens.draw_event_histogram()— renderiza histogramas de câmera de eventos.Modo de eventos RAW da GenX320 —
csi.IOCTL_GENX320_SET_MODEcomcsi.GENX320_MODE_HISTO/csi.GENX320_MODE_EVENT,csi.IOCTL_GENX320_READ_EVENTS,csi.IOCTL_GENX320_CALIBRATE, constantes de tipo de evento e novos scripts de exemplo.ML — um backend de inferência via NPU ST Neural-ART (STAI);
ml.Modelganhou uma palavra-chavepostprocess=(o pós-processador agora roda automaticamente dentro depredict()mesmo sem um callback);ml.postprocessingfoi reorganizado em subpacotes por fornecedor —ml.postprocessing.ultralytics(YoloV5,YoloV8),ml.postprocessing.darknet(YoloV2,YoloLC),ml.postprocessing.edgeimpulse(Fomo) eml.postprocessing.mediapipe(BlazeFace,BlazePalm,HandLandmarks,FaceLandmarks) — os antigos nomes em snake_case permanecem como aliases;ml.utils.draw_keypoints()eml.utils.draw_skeleton()foram adicionados; os modelos ROMFS empacotados cresceram (BlazeFace, YOLO-LC, YOLOv8n, pontos de referência de palma/mão/rosto).audio— entrada de microfone digital MDF na STM32N6.Display — um driver OLED SSD1351 e exemplo; controladores
SPIDisplaypodem sobrescrever seus comandos de init; o construtor do display SPI ganhou as palavras-chavehmirror/vflip.Profiler no dispositivo — contadores de ciclos/eventos SysTick + PMU Armv8.1-M com instrumentação em nível de função, legíveis pelo link de depuração (
pyopenmvganhou suporte a profiling e a símbolos ELF).Suporte a novos sensores — PixArt PS5520; FLIR BOSON na OpenMV H7 Plus; detecção automática da GenX320.
Outras mudanças e melhorias¶
MicroPython atualizado para 1.26.0.
Inicialização da câmera — o clock do sensor foi desacoplado do estado da CSI, a detecção da câmera na inicialização é mais rápida (a configuração mais comum é testada primeiro) e o clock padrão da OV7725 da OpenMV 3 foi corrigido.
Qualidade de imagem — a correção de gama do ISP em software (Alif e STM32) e a correção de pixels defeituosos (STM32) estão ativadas por padrão; os sensores PAG7936 e PS5520 ganharam controles de balanço de branco automático.
Desempenho —
image.Image.to_ndarray()é acelerado com SIMD Helium e o pós-processador FOMO foi vetorizado com ulab.Driver da FLIR Lepton reescrito para receber quadros de forma assíncrona em segundo plano — rotação/
transposeagora funciona, o desenho faz upscale bilinear e o reset é mais rápido.Throughput de captura — a CSI do i.MX RT1062 agora usa offload total via DMA, e a STM32 N6 tem um
draw_image()por GPU em hardware.
Correções de bugs¶
Câmera e sensores:
Corrigidos os modos RGB565 / GRAYSCALE / BAYER / YUV422 nos sensores STM32, o PAJ6100 na OpenMV H7 / H7 Plus, o RGB565 QVGA da OpenMV 2 e a configuração mono / RGB-YUV da CSI da N6; a câmera de teste em software agora reseta de forma determinística.
O balanço de branco automático não deixa mais a imagem verde em taxas de quadros baixas ou variáveis (uma média móvel de 250 ms substitui a amostra a cada 100 quadros), e o flicker de luminância do PS5520 foi corrigido.
Processamento de imagem:
Corrigido um defeito de renderização de desenho de linha;
image.Image.flush()agora libera o buffer JPEG da imagem em que foi chamado;Normalizationagora aplica média/desvio padrão a entradas float; a alocação de imagem a partir de arquivo foi corrigida.
Captura da câmera:
Corrigida a corrupção grave de imagem em transferências não-JPEG (a interrupção de quadro agora é habilitada apenas no modo JPEG), o suporte ao modo JPEG-3 e travamentos de tamanho de linha do DMA e de buffer pequeno no STM32; a sincronização VOSPI / Lepton é mais confiável, notadamente na N6.
Diversos:
omv.board_id()retorna o UID correto no RT1060;YoloV2não trava mais quando construído sem âncoras explícitas.
Suporte a hardware e placas¶
OpenMV N6 — STM32N6 com uma NPU Neural-ART, triple buffering, saída SPI LCD/TV, Soft-CSI, o módulo
tofe modelos ROMFS empacotados.Arduino GIGA — saída de display MIPI DSI.
Novos sensores — PixArt PS5520; FLIR BOSON na OpenMV H7 Plus; detecção automática da GenX320.
OpenMV Pure Thermal — a FLIR Lepton agora é um sensor de câmera comum (secundário).
Alif AE3 — correção de gama do ISP em software, o módulo
crce correções de SPI.
Mudanças incompatíveis de API¶
Quebras de API visíveis ao usuário entre a v4.7.0 e a v4.8.0. Escopo: C-modules do Python em modules/ e bibliotecas Python em scripts/libraries/.
Cada mudança é marcada com seu impacto:
major — a maioria dos scripts que a usaram precisa de edições.
minor — API restrita; afeta apenas scripts que a usaram.
behavior — mesma API, resultados diferentes; revise scripts ajustados.
tooling — afeta apenas ferramentas de host / compilação a partir do código-fonte.
As mudanças são agrupadas por impacto nessa ordem — major primeiro, depois minor, behavior e tooling. Se você só quer portar seu código, vá direto para a checklist de migração no final para uma lista condensada de tarefas. Cada hash de commit leva ao seu diff no GitHub.
FLIR Lepton saiu do módulo fir (major)¶
A FLIR Lepton agora é controlada como um sensor de câmera comum em vez de pelo módulo fir. O controle da Lepton foi removido do fir: o tipo FIR_LEPTON e os métodos radiometric(), register_vsync_cb(), register_frame_cb(), get_frame_available() e trigger_ffc() não existem mais. Capture a Lepton como qualquer outra câmera (ela aparece como um sensor secundário na OpenMV Pure Thermal); o exemplo da Pure Thermal foi reescrito para a nova API. Os sensores fir que não são Lepton (Grid-EYE, MLX, AMG8833) permanecem inalterados.
Módulo buzzer removido (minor)¶
O módulo buzzer foi removido das portas STM32 e i.MX RT. Acione o buzzer com machine.PWM em vez dele; foi adicionado um exemplo de buzzer da Pure Thermal usando PWM.
omv.disable_fb() removido (minor)¶
A função omv.disable_fb() foi removida; o streaming do frame buffer agora é controlado pela API da câmera. Os scripts de desktop RPC legados que dependiam dela também foram removidos.
csi é novo — sua API ainda não está congelada (minor)¶
O módulo csi é apresentado na v4.8.0 e sua API evoluiu durante o lançamento: csi.fb() foi removido, e csi.CSI.snapshot() (image=...) agora exige uma imagem mutável e desenha/escala o quadro capturado nela em vez de fazer uma cópia profunda bruta. Os primeiros adotantes do novo módulo devem retestar; a API legada sensor não é afetada.
Modo de stream do image.ImageIO e close() (minor)¶
image.ImageIO — o argumento mode agora aceita apenas 'r' / 'w' em minúsculas (maiúsculas são rejeitadas com uma mensagem de erro atualizada), e abrir com 'w' sempre trunca/recria o arquivo em vez de preservar um stream existente. ImageIO.close() agora é idempotente (fechar um stream já fechado não levanta mais exceção) e retorna None em vez do objeto de stream.
Valor de retorno de BlazeFace / BlazePalm (minor)¶
Os pós-processadores BlazeFace e BlazePalm (novos nesta versão) agora retornam uma única lista de caixas delimitadoras em vez da lista completa por classe — os chamadores indexam o resultado diretamente em vez de [0].
Commit: 75e16b573
O callback de pós-processamento de ML recebe tensores brutos (behavior)¶
Um callback de pós-processamento de predict() de ml.Model agora recebe as referências de tensor de saída brutas (quantizadas) em vez de ndarrays float já convertidos — isso evita o esgotamento de memória em modelos grandes. Se nenhum callback for fornecido, o ndarray float ainda é retornado. Callbacks personalizados devem desquantizar os tensores por conta própria (os pós-processadores embutidos já fazem isso).
Commit: 84e6ee650
Clock da câmera desacoplado do estado da CSI (behavior)¶
O clock do sensor agora é independente do estado da CSI. set_clock / set_frequency só reconfigura o clock quando a frequência solicitada difere por mais de uma tolerância, e get_clk_frequency recebe um booleano para retornar a frequência exata (em vez da nominal). O clock padrão é 24 MHz na OpenMV N6 e AE3, então nenhum set_clock() explícito é necessário na inicialização. Scripts que alternavam o clock para capturas sensíveis a tempo devem rever suas premissas.
Commits: 2040a0a00, 09c0052df, 66ade9aea, 7e0a251bc, e6f43f3ca
Protocolo de depuração USB e alvos de firmware (tooling)¶
Nada disso afeta os scripts MicroPython. Comandos USBDBG obsoletos (SCRIPT_SAVE, TEMPLATE_SAVE, DESCRIPTOR_SAVE, ATTR_READ, ATTR_WRITE, TX_INPUT, SET_TIME) foram removidos e comandos não suportados de IDEs mais antigas agora são descartados em vez de travar placas TinyUSB na conexão; o alvo de firmware UVC legado do STM32 foi removido. Ferramentas de host antigas devem ser atualizadas; veja o histórico do repositório de firmware para detalhes.
Checklist de migração¶
Para uma portabilidade limpa para a v4.8.0, o trabalho típico é:
Se você usou a FLIR Lepton pelo
fir, mude para capturá-la como um sensor de câmera (a mudança do fir/Lepton).Substitua qualquer uso de
buzzerpormachine.PWM(a remoção do buzzer).Remova as chamadas a
omv.disable_fb()(a remoção do omv.disable_fb()).Para
image.ImageIO: use'r'/'w'em minúsculas e espere que'w'trunque (a mudança do ImageIO).Para callbacks personalizados de pós-processamento de ML: desquantize você mesmo as referências de tensor bruto, ou confie no caminho float padrão (a mudança do callback).
Revise qualquer script que acionava o clock do sensor para capturas sensíveis a tempo (a mudança do clock).