v4.6.0

v4.6.0 é um grande lançamento de recursos. Em destaque: o módulo da câmera foi renomeado de sensor para csi (com um alias sensor retrocompatível), um novo módulo ml.postprocessing, suporte ao sensor de eventos Prophesee GenX320, ao PAG7936 e às câmeras térmicas FLIR Boson, um novo bootloader DFU baseado em TinyUSB, aceleração por GPU Nema e MicroPython 1.24. Ele também altera o intervalo de alpha no desenho, então leia as mudanças incompatíveis abaixo.

Destaques

  • sensor agora também é csi — o módulo da câmera foi renomeado para csi; sensor permanece como um alias retrocompatível (ainda não é necessária nenhuma alteração de código).

  • Novo módulo ml.postprocessingfomo_postprocess, yolo_v2_postprocess, yolo_v5_postprocess.

  • Novos sensores — câmera de eventos Prophesee GenX320, PAG7936 e térmica FLIR Boson 320/640.

  • Novo bootloader DFU — um bootloader DFU padrão baseado em TinyUSB substitui o bootloader CDC legado em todas as placas.

  • GPU Nema — gráficos 2D/vetoriais acelerados no STM32.

  • MicroPython atualizado para 1.24.0.

  • Incompatível: o intervalo de alpha no desenho mudou de 0–256 para 0–255 (veja a mudança no intervalo de alpha).

Novos recursos

  • ml.postprocessing — um novo módulo que decodifica a saída do modelo: um decodificador FOMO (fomo_postprocess, find_blobs + NMS, threshold configurável) e yolo_v2_postprocess / yolo_v5_postprocess (com threshold, anchors, nms_threshold, nms_sigma).

  • Visualização de câmera de eventos — novos métodos Image.to_evt_dark() / Image.to_evt_light() e paletas de cores PALETTE_EVT_DARK / PALETTE_EVT_LIGHT.

  • Visualização de profundidade — novo método Image.to_depth() e uma paleta de cores PALETTE_DEPTH (placas com ToF).

  • Introspecção do sensor — novo ioctl IOCTL_GET_RGB_STATS que retorna uma tupla de estatísticas de canal (R, Gb, Gr, B).

  • Predefinições de bias do GenX320 — novo ioctl IOCTL_GENX320_SET_BIASES com as predefinições GENX320_BIASES_DEFAULT / LOW_LIGHT / ACTIVE_MARKER / LOW_NOISE / HIGH_SPEED.

  • omv.debug_mode() — uma nova função para consultar se a interface USB de depuração está ativa.

  • GPU Nema — integração do driver NemaGFX/NemaVG do Cortex-M55 no STM32, com cut-through de GPU in-place para draw_image.

  • PAG7936 — adicionados saída de barras de cor, exposição automática / ganho automático, modo de suspensão e modo MIPI.

Outras mudanças e melhorias

  • MicroPython atualizado para 1.24.0; ulab atualizado para 6.7.3 (adiciona keepdims).

  • Script de boot comum — STM32 / i.MX RT / RP2 agora compartilham um _boot.py que cria automaticamente o sistema de arquivos flash/SD com um main.py e README.txt padrão e libera variáveis globais temporárias de inicialização.

  • Base para o STM32N6 — suporte básico ao STM32N6, um driver XSPI, um driver MPU comum e assinatura de firmware/bootloader no STM32.

  • VM com computed-goto — habilitada no STM32 e nRF para acelerar o interpretador.

Correções de bugs

Câmera e sensores:

  • Corrigido o cálculo de PCLK/exposição do OV5640 (duas lanes MIPI, tabela de divisores corrigida).

  • A variante Bayer-CFA do MT9V0xx agora aceita RGB565/BAYER/GRAYSCALE e gera dados Bayer brutos corretos em vez de gerar erro.

  • Habilitada a correção de sombreamento de lente do PAG7936 e corrigido o deslocamento de imagem em HD; set_framerate() agora é limitado por resolução.

  • Corrigida a captura térmica da FLIR Lepton no i.MX RT1060 (corrigido o CPOL/CPHA do VoSPI), e os snapshots da Lepton agora retornam códigos de erro específicos.

  • Corrigido o arredondamento de frequência do GenX320.

Processamento de imagem:

  • Corrigida a corrupção de memória em to_ndarray() em imagens em escala de cinza.

  • Corrigida a predição de limites do debayer na conversão Bayer→RGB/escala de cinza.

  • Corrigido o transpose de draw_image() em placas sem SDRAM (buffer em blocos).

  • Corrigido o tratamento de argumentos booleanos em Image.binary() e na flag load_to_fb de ml.Model.

Sistema:

  • Corrigida a configuração de pinos somente RX / somente TX do SPI no STM32 e i.MX RT.

  • Movidos os buffers DMA da Ethernet do Portenta H7 para a SRAM3 para que a Ethernet funcione.

  • Corrigido um caractere perdido na saída de texto do canal de depuração via USB; arredondados para cima os tamanhos de alocação dinâmica de ML para evitar buffers de modelo subdimensionados.

Suporte a hardware e placas

  • Sensor de visão baseado em eventos Prophesee GenX320 (STM32F7 + i.MX RT1060).

  • Sensor PAG7936 (com modo MIPI).

  • Câmeras térmicas FLIR Boson 320/640 (driver IDD 4).

  • Aceleração por GPU Nema no STM32.

  • Base de bootloader/XSPI do STM32N6.

  • VL53L5CX — adicionado suporte ao pino de habilitação de energia.

Mudanças incompatíveis na API

Incompatibilidades de API visíveis ao usuário entre v4.5.9 e v4.6.0. Escopo: módulos C de Python em modules/ e bibliotecas Python em scripts/libraries/.

Cada mudança é marcada com seu impacto:

  • major — a maioria dos scripts que a usavam precisa de ajustes.

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

  • behavior — mesma API, resultados diferentes; reverifique scripts ajustados.

  • tooling — afeta apenas o processo de flash / ferramentas de host / disponibilidade de placas.

As mudanças são agrupadas por impacto nessa ordem. Se você quer apenas portar seu código, vá direto para a checklist de migração no final. Cada hash de commit liga ao seu diff no GitHub. Observação: a renomeação do módulo sensorcsi neste lançamento não é incompatível — sensor ainda funciona como alias.

O intervalo de alpha no desenho agora é 0–255 (major)

O argumento alpha de draw_image() e de toda sobreposição que o aceita (FIR, ToF, display, TV, MJPEG, tabelas de alpha) agora usa um intervalo de 0–255 em vez de 0–256. Scripts que passavam 256 para opacidade total, ou que calculavam alpha em relação a 256, devem ser reescalonados para 0–255.

Commit: 1f87b5bb6

Constantes de ioctl da FLIR Lepton renomeadas (minor)

Três constantes de ioctl da Lepton foram encurtadas: IOCTL_LEPTON_SET_MEASUREMENT_MODEIOCTL_LEPTON_SET_MODE, IOCTL_LEPTON_SET_MEASUREMENT_RANGEIOCTL_LEPTON_SET_RANGE, IOCTL_LEPTON_GET_FPA_TEMPERATUREIOCTL_LEPTON_GET_FPA_TEMP. Os exemplos incluídos foram atualizados.

Commit: 12582d54d

Reorganização da API de pós-processamento de ML (minor)

ml.postprocessing é novo neste lançamento e sua API mudou durante ele: a palavra-chave score_threshold do construtor yolo_v2_postprocess foi renomeada para threshold, e resultados de pós-processamento vazios agora retornam () em vez de []. O modelo incluído yolov5_rgb_person foi renomeado para yolo_v5_224_nano. ml.apps.MicroSpeech agora encaminha quaisquer **kwargs para audio.init() em vez de um gain_db=24 fixo.

Commits: d67bd1ad7, 979b4e8ee, b89b815b2, 6671d9df5, 5c2f4388c

AGAST é o detector de cantos padrão (behavior)

find_keypoints() agora usa AGAST em vez de FAST como detector de cantos padrão em todas as placas. Os conjuntos de pontos-chave (e, portanto, as correspondências de descritores) diferem de lançamentos anteriores — reverifique pipelines de pontos-chave ajustados. O streaming do frame buffer da IDE também passa a ser limitado a 20 Hz para reduzir a carga no USB.

Commits: da6bf6910, bc4e39246

Bootloader, placas e recursos removidos (tooling)

O bootloader CDC legado foi substituído por um novo bootloader DFU padrão baseado em TinyUSB em todas as placas — o mecanismo de atualização de firmware mudou; atualize seu fluxo/ferramentas de flash conforme necessário. A placa OpenMV Pro, a build autônoma para Raspberry Pi Pico e o recurso de IDE remota por WiFi-debug (wifidbg) foram removidos.

Commits: a03fc90d8, c2e616aae, af3ea774b, f8bca9799, 59a38a0d3, 7edeb4fbe, d58d77fa2

Checklist de migração

Para uma migração limpa para v4.6.0, o trabalho típico é:

  1. Reescalonar todo valor de alpha de desenho/sobreposição do intervalo 0–256 para 0–255 (a mudança no intervalo de alpha).

  2. Renomear quaisquer constantes de ioctl da FLIR Lepton para suas formas encurtadas (a renomeação dos ioctl da Lepton).

  3. Se você usou os novos pós-processadores de ML, troque score_threshold por threshold, trate um resultado vazio () e atualize o nome do modelo yolo_v5_224_nano (as mudanças de ML).

  4. Reverificar pipelines baseados em find_keypoints() quanto à mudança de detector AGAST (a mudança no detector de cantos).

  5. Atualizar seu fluxo de flash de firmware para o novo bootloader DFU (as mudanças de bootloader/placas).