v4.7.0#
v4.7.0 é um grande lançamento de recursos. Em destaque: a nova placa OpenMV AE3 (Alif Ensemble, Cortex-M55 + NPU Ethos-U55) com um modelo de programação dual-core openamp, um sistema de arquivos somente leitura ROMFS (/rom) com modelos e cascatas incluídos, suporte ao time-of-flight 8x8 VL53L8CX, novos pós-processadores YOLOv8 / YOLO-LC e MicroPython 1.25. Ele também altera como modelos integrados e cascatas Haar são carregados, então leia as mudanças incompatíveis abaixo.
Destaques#
Placa OpenMV AE3 — a placa Alif Ensemble (Cortex-M55 + NPU Ethos-U55), com port completo, bootloader e ROMFS.
Módulo
openampdual-core — descarregue trabalho para o segundo núcleo Alif via RPMsg (o decorador@async_remote,Endpoint/EndpointIO).ROMFS — um sistema de arquivos somente leitura
/romcom modelos TFLite e cascatas Haar integrados, além de um novo construtor de hosttools/mkromfs.py.Suporte ao sensor time-of-flight multizona 8x8 VL53L8CX.
Novos pós-processadores de ML —
yolo_v8_postprocesseyolo_lc_postprocess.MicroPython atualizado para 1.25.0.
Incompatível: modelos integrados e cascatas Haar agora carregam de
/rompor caminho (veja a mudança em ml.Model e a mudança nas cascatas Haar).
Novos recursos#
OpenMV AE3 — nova placa Alif Ensemble (núcleo de aplicação Cortex-M55 + NPU Ethos-U55), com port, bootloader, configuração de placa, LED RGB e suporte a ROMFS.
openamp— um novo módulo para o modelo RPC dual-core do Alif (Open-AMP / RPMsg):Endpoint,EndpointIO,new_service_callbacke o decorador@async_remotepara descarregar funções empacotadas para o segundo núcleo. Os núcleos HE/HP vêm com um executor de tarefas_boot.pypadrão baseado em asyncio.audio— o port Alif adiciona o módulo de áudio (microfone PDM) com uma API de streaming baseada em callback (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) no AE3.ROMFS — um sistema de arquivos somente leitura
/romcom ativos integrados (modelos TFLite, cascatas Haar, …) empacotados por placa, uma nova ferramenta de hosttools/mkromfs.py(tflite, tflite+vela, cascata Haar, texto, binário) e um auxiliarscripts/libraries/romfs.pyque expõels_romfs().Pós-processamento de ML — novas classes
yolo_v8_postprocess(YOLOv8) eyolo_lc_postprocess(variante leve do tiny-YOLOv2 com anchors padrão otimizados para sistemas embarcados), cada uma recebendothreshold,nms_thresholdenms_sigma.Anti-flicker do GenX320 — um novo ioctl
IOCTL_GENX320_SET_AFKpara habilitar e configurar o filtro anti-flicker do sensor de eventos (frequência mínima/máxima de flicker em Hz), com um exemplogenx320_grayscale_set_afk.py.VL53L8CX — suporte ao sensor time-of-flight multizona 8x8 através do módulo
tof(autodetectado, 8x8 a 15 Hz).
Outras mudanças e melhorias#
MicroPython atualizado para 1.25.0 (ports STM32 e i.MX RT), com a adição do port Alif upstream e a remoção dos drivers BT-HCI legados dos ports STM32 / i.MX RT.
GenX320 — uma nova sequência ISSD dobra o clock interno de pixel (24 → 48 MHz) para taxas de quadros mais altas.
STM32N6 / ST Edge AI — base para a implantação de modelos Neural-ART no STM32N6 (ferramentas ST Edge AI e suporte a ROMFS).
PAG7936 — o bitrate da CSI PHY agora é definido, melhorando a operação desse sensor.
Correções de bugs#
Câmera e sensores:
Corrigida a IMU sobre I2C — placas que conectam a IMU LSM6DSx no I2C agora inicializam e leem corretamente (o caminho I2C usava anteriormente um caminho de leitura quebrado e constantes erradas).
A inicialização da FLIR Boson agora tenta novamente até 10 vezes para sensores mais antigos (< IDD 4.x) que levam ~10 s para inicializar, e as configurações padrão de fábrica são restauradas no reset para que configurações carregadas externamente não possam quebrar a saída de vídeo.
Corrigido o
psee_ehc_activate_overridedo GenX320 que escrevia o tempo de acumulação errado (zero).Em placas STM32 sem hardware FastMode+, solicitar o modo rápido I2C agora é devidamente protegido em vez de configurar o barramento de forma silenciosamente incorreta.
Aprendizado de máquina:
Corrigida a coleta de caixas delimitadoras e o tratamento de
np.nonzeronos pós-processadores YOLOv2 / YOLOv5, melhorando a confiabilidade da detecção.
Suporte a hardware e placas#
OpenMV AE3 — nova placa Alif Ensemble (Cortex-M55 + NPU Ethos-U55).
VL53L8CX — sensor time-of-flight multizona 8x8; o sensor ToF do AE3 foi trocado do VL53L5CX para o VL53L8CX.
STM32N6 — base para a implantação de modelos ST Edge AI (Neural-ART).
Mudanças incompatíveis na API#
Incompatibilidades de API visíveis ao usuário entre v4.6.20 e v4.7.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.
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 para uma lista de tarefas condensada. Cada hash de commit liga ao seu diff no GitHub.
Modelos integrados carregam por caminho, não por nome (major)#
ml.Model não carrega mais um modelo integrado a partir de uma string de nome simples. Os modelos agora são carregados do sistema de arquivos / ROMFS por caminho:
model = ml.Model("/rom/person_detect.tflite") # was: ml.Model("person_detect")
O atributo model.labels do lado C foi removido; os rótulos agora são carregados pelo wrapper Python ml.Model a partir de um arquivo complementar <model>.txt (None se ausente). Todos os exemplos incluídos e ml/apps.py foram atualizados para caminhos /rom/*.tflite.
Cascatas Haar carregam do ROMFS (minor)#
image.HaarCascade() agora carrega cascatas integradas através do VFS / ROMFS. O arquivo padrão de cascata de face frontal foi renomeado de haarcascade_frontalface_default.xml para haarcascade_frontalface.xml, e uma falha de carregamento agora gera RuntimeError (“Failed to load Haar cascade”) em vez de OSError.
Commit: 9de1220d8
Semântica de tof.reset() / tof.deinit() (behavior)#
No módulo tof, reset() antes era um alias de init() e não havia um deinit real. tof.reset() agora realiza um reset real do sensor e tof.deinit() desliga o sensor adequadamente (com suporte ao desligamento do VL53L5CX). Código que dependia de reset() para reinicializar o sensor deve ser reverificado.
Restrições de temporização e modo de eventos do GenX320 (behavior)#
A nova sequência ISSD do GenX320 altera a base de tempo do sensor: os argumentos de taxa de quadros e exposição agora são expressos em unidades de 1 MHz em vez de serem escalonados pelo clock, e o blanking de HSYNC é ajustado dinamicamente à taxa de quadros solicitada. Scripts que fixavam valores de temporização do GenX320 devem reajustá-los. A captura em modo de eventos agora gera um erro quando o transpose de imagem está habilitado (não há suporte nessa configuração).
Checklist de migração#
Para uma migração limpa para v4.7.0, o trabalho típico é:
Mudar o carregamento de modelos integrados de uma string de nome para um caminho
/rom/<name>.tflitee fornecer rótulos via um arquivo complementar<name>.txt(a mudança em ml.Model).Atualizar
haarcascade_frontalface_default.xmlparahaarcascade_frontalface.xmle capturarRuntimeError(nãoOSError) em falha de carregamento de cascata (a mudança nas cascatas Haar).Remover código que dependia de
tof.reset()para reinicializar o sensor (a mudança de tof).Reajustar quaisquer valores fixos de taxa de quadros / exposição do GenX320 para unidades de 1 MHz e não habilitar transpose em modo de eventos (a mudança do GenX320).