v4.6.0

A v4.6.0 é uma versão com funcionalidades principais. Os destaques são: o módulo de câmara foi renomeado de sensor para csi (com um alias sensor compatível com versões anteriores), um novo módulo ml.postprocessing, suporte para o sensor de eventos Prophesee GenX320, PAG7936 e câmaras térmicas FLIR Boson, um novo bootloader DFU baseado em TinyUSB, aceleração com GPU Nema e MicroPython 1.24. Esta versão altera também o intervalo do parâmetro alpha de desenho, pelo que é necessário ler as alterações incompatíveis abaixo.

Destaques

  • sensor é agora também csi — o módulo de câmara foi renomeado para csi; sensor mantém-se como alias compatível com versões anteriores (ainda não é necessário alterar o código).

  • Novo módulo ml.postprocessing modulefomo_postprocess, yolo_v2_postprocess, yolo_v5_postprocess.

  • Novos sensores — câmara de eventos Prophesee GenX320, PAG7936 e câmaras térmicas 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 em STM32.

  • MicroPython atualizado para 1.24.0.

  • Incompatível: o intervalo do parâmetro alpha de desenho foi alterado de 0–256 para 0–255 (consulte a alteração do intervalo alpha).

Novas funcionalidades

  • ml.postprocessing — um novo módulo que descodifica a saída do modelo: um descodificador 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âmara de eventos — novos métodos Image.to_evt_dark() / Image.to_evt_light() e paletas de cor PALETTE_EVT_DARK / PALETTE_EVT_LIGHT.

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

  • Introspeção do sensor — novo ioctl IOCTL_GET_RGB_STATS que devolve um tuplo de estatísticas de canal (R, Gb, Gr, B).

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

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

  • GPU Nema — integração do driver NemaGFX/NemaVG Cortex-M55 no STM32, com passagem direta de GPU em draw_image.

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

Outras alterações e melhorias

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

  • Script de arranque comum — STM32 / i.MX RT / RP2 partilham agora um _boot.py que cria automaticamente o sistema de ficheiros flash/SD com um main.py e README.txt predefinidos e liberta as variáveis globais temporárias de arranque.

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

  • VM com goto computado — ativado no STM32 e nRF para aumento de velocidade do interpretador.

Correções de erros

Câmara e sensores:

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

  • A variante MT9V0xx Bayer-CFA aceita agora RGB565/BAYER/GRAYSCALE e produz dados Bayer em bruto corretos em vez de gerar um erro.

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

  • Corrigida a captura térmica do FLIR Lepton no i.MX RT1060 (CPOL/CPHA do VoSPI corrigidos) e as capturas do Lepton devolvem agora códigos de erro específicos.

  • Corrigido o arredondamento de frequência do GenX320.

Processamento de imagem:

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

  • Corrigida a previsão de limites de debayer na conversão Bayer→RGB/escala de cinzentos.

  • Corrigido draw_image() transpose em placas sem SDRAM (buffer em fragmentos).

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

Sistema:

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

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

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

Hardware e suporte de placas

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

  • Sensor PAG7936 (com modo MIPI).

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

  • Aceleração com GPU Nema no STM32.

  • Fundamentos do bootloader/XSPI para STM32N6.

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

Alterações incompatíveis na API

Alterações na API visíveis pelo utilizador entre v4.5.9 e v4.6.0. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.

Cada alteração está marcada com o respetivo impacto:

  • major — a maioria dos scripts que a utilizavam necessita de edições.

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

  • behavior — mesma API, resultados diferentes; re-verificar scripts ajustados.

  • tooling — afeta apenas a gravação flash / ferramentas do host / disponibilidade de placas.

As alterações estão agrupadas por impacto nessa ordem. Se pretender apenas migrar o código, consulte a lista de verificação de migração no final. Cada hash de commit tem uma ligação para o diff no GitHub. Nota: o rename do módulo sensorcsi nesta versão não é incompatível — sensor continua a funcionar como alias.

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

O argumento alpha de draw_image() e de todas as sobreposições que o recebem (FIR, ToF, display, TV, MJPEG, tabelas alpha) utiliza agora o intervalo 0–255 em vez de 0–256. Os scripts que passavam 256 para totalmente opaco, ou calculavam alpha em relação a 256, devem ser redimensionados para 0–255.

Commit: 1f87b5bb6

Constantes ioctl do FLIR Lepton renomeadas (minor)

Três constantes ioctl do 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

Mudanças na API de pós-processamento de ML (minor)

ml.postprocessing é novo nesta versão e a sua API foi alterada durante o desenvolvimento: a palavra-chave do construtor score_threshold do yolo_v2_postprocess foi renomeada para threshold, e os resultados vazios de pós-processamento devolvem agora () em vez de []. O modelo incluído yolov5_rgb_person foi renomeado para yolo_v5_224_nano. ml.apps.MicroSpeech encaminha agora **kwargs arbitrários para audio.init() em vez de um gain_db=24 fixo.

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

AGAST é o detetor de cantos predefinido (behavior)

find_keypoints() utiliza agora AGAST em vez de FAST como detetor de cantos predefinido em todas as placas. Os conjuntos de pontos-chave (e portanto as correspondências de descritores) diferem das versões anteriores — re-verificar pipelines de pontos-chave ajustados. A transmissão de buffer de fotograma do IDE também está agora limitada a 20 Hz para reduzir a carga USB.

Commits: da6bf6910, bc4e39246

Bootloader, placas e funcionalidades removidas (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 foi alterado; atualize o fluxo de trabalho/ferramentas de gravação em conformidade. A placa OpenMV Pro, a compilação independente para Raspberry Pi Pico e a funcionalidade de IDE remoto via WiFi (wifidbg) foram removidas.

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

Lista de verificação de migração

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

  1. Redimensionar todos os valores alpha de desenho/sobreposição do intervalo 0–256 para 0–255 (a alteração do intervalo alpha).

  2. Renomear as constantes ioctl do FLIR Lepton para as formas encurtadas (o rename dos ioctl do Lepton).

  3. Se utilizou os novos pós-processadores de ML, mudar score_threshold para threshold, tratar um resultado vazio (), e atualizar o nome do modelo yolo_v5_224_nano (as alterações de ML).

  4. Re-verificar as pipelines baseadas em find_keypoints() para a alteração do detetor AGAST (a alteração do detetor de cantos).

  5. Atualizar o fluxo de trabalho de gravação de firmware para o novo bootloader DFU (as alterações de bootloader/placa).