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¶
sensoragora também écsi— o módulo da câmera foi renomeado paracsi;sensorpermanece como um alias retrocompatível (ainda não é necessária nenhuma alteração de código).Novo módulo
ml.postprocessing—fomo_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
alphano 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,thresholdconfigurável) eyolo_v2_postprocess/yolo_v5_postprocess(comthreshold,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 coresPALETTE_EVT_DARK/PALETTE_EVT_LIGHT.Visualização de profundidade — novo método
Image.to_depth()e uma paleta de coresPALETTE_DEPTH(placas com ToF).Introspecção do sensor — novo ioctl
IOCTL_GET_RGB_STATSque retorna uma tupla de estatísticas de canal(R, Gb, Gr, B).Predefinições de bias do GenX320 — novo ioctl
IOCTL_GENX320_SET_BIASEScom as predefiniçõesGENX320_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.pyque cria automaticamente o sistema de arquivos flash/SD com ummain.pyeREADME.txtpadrã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
transposededraw_image()em placas sem SDRAM (buffer em blocos).Corrigido o tratamento de argumentos booleanos em
Image.binary()e na flagload_to_fbdeml.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 sensor → csi 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_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
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.
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 é:
Reescalonar todo valor de
alphade desenho/sobreposição do intervalo 0–256 para 0–255 (a mudança no intervalo de alpha).Renomear quaisquer constantes de ioctl da FLIR Lepton para suas formas encurtadas (a renomeação dos ioctl da Lepton).
Se você usou os novos pós-processadores de ML, troque
score_thresholdporthreshold, trate um resultado vazio()e atualize o nome do modeloyolo_v5_224_nano(as mudanças de ML).Reverificar pipelines baseados em
find_keypoints()quanto à mudança de detector AGAST (a mudança no detector de cantos).Atualizar seu fluxo de flash de firmware para o novo bootloader DFU (as mudanças de bootloader/placas).