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émcsi— o módulo de câmara foi renomeado paracsi;sensormantém-se como alias compatível com versões anteriores (ainda não é necessário alterar o código).Novo módulo
ml.postprocessingmodule —fomo_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
alphade 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,thresholdconfigurável) eyolo_v2_postprocess/yolo_v5_postprocess(comthreshold,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 corPALETTE_EVT_DARK/PALETTE_EVT_LIGHT.Visualização de profundidade — novo método
Image.to_depth()e paleta de corPALETTE_DEPTH(placas com ToF).Introspeção do sensor — novo ioctl
IOCTL_GET_RGB_STATSque devolve um tuplo de estatísticas de canal(R, Gb, Gr, B).Predefinições de bias do GenX320 — novo ioctl
IOCTL_GENX320_SET_BIASEScom predefiniçõesGENX320_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.pyque cria automaticamente o sistema de ficheiros flash/SD com ummain.pyeREADME.txtpredefinidos 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()transposeem placas sem SDRAM (buffer em fragmentos).Corrigido o tratamento de argumentos booleanos em
Image.binary()e o sinalizadorload_to_fbdeml.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 sensor → csi 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_MODE → IOCTL_LEPTON_SET_MODE, IOCTL_LEPTON_SET_MEASUREMENT_RANGE → IOCTL_LEPTON_SET_RANGE, IOCTL_LEPTON_GET_FPA_TEMPERATURE → IOCTL_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.
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 é:
Redimensionar todos os valores
alphade desenho/sobreposição do intervalo 0–256 para 0–255 (a alteração do intervalo alpha).Renomear as constantes ioctl do FLIR Lepton para as formas encurtadas (o rename dos ioctl do Lepton).
Se utilizou os novos pós-processadores de ML, mudar
score_thresholdparathreshold, tratar um resultado vazio(), e atualizar o nome do modeloyolo_v5_224_nano(as alterações de ML).Re-verificar as pipelines baseadas em
find_keypoints()para a alteração do detetor AGAST (a alteração do detetor de cantos).Atualizar o fluxo de trabalho de gravação de firmware para o novo bootloader DFU (as alterações de bootloader/placa).