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).