v4.7.0¶
A v4.7.0 é uma versão com funcionalidades principais. Os destaques são: a nova placa OpenMV AE3 (Alif Ensemble, Cortex-M55 + NPU Ethos-U55) com um modelo de programação de núcleo duplo openamp, um sistema de ficheiros ROMFS de leitura apenas (/rom) com modelos e cascatas incluídos, suporte para ToF de 8x8 VL53L8CX, novos pós-processadores YOLOv8 / YOLO-LC e MicroPython 1.25. Esta versão altera também a forma como os modelos integrados e as cascatas Haar são carregados, pelo que é necessário ler as alterações incompatíveis abaixo.
Destaques¶
Placa OpenMV AE3 — a placa Alif Ensemble (Cortex-M55 + NPU Ethos-U55), com uma portabilização completa, bootloader e ROMFS.
Módulo
openampde núcleo duplo — descarregar trabalho para o segundo núcleo Alif via RPMsg (o decorador@async_remote,Endpoint/EndpointIO).ROMFS — um sistema de ficheiros de leitura apenas
/romcom modelos TFLite e cascatas Haar integrados, mais um novo construtor de hosttools/mkromfs.py.Suporte para sensor de tempo-de-voo VL53L8CX de 8x8 multi-zona.
Novos pós-processadores de ML —
yolo_v8_postprocesseyolo_lc_postprocess.MicroPython atualizado para 1.25.0.
Incompatível: os modelos integrados e as cascatas Haar são agora carregados a partir de
/rompor caminho (consulte a alteração do ml.Model e a alteração das cascatas Haar).
Novas funcionalidades¶
OpenMV AE3 — nova placa Alif Ensemble (núcleo de aplicação Cortex-M55 + NPU Ethos-U55), com portabilização, bootloader, configuração de placa, LED RGB e suporte ROMFS.
openamp— novo módulo para o RPC de núcleo duplo Alif (Open-AMP / RPMsg):Endpoint,EndpointIO,new_service_callback, e o decorador@async_remotepara descarregar funções marshalled para o segundo núcleo. Os núcleos HE/HP incluem um executor de tarefas_boot.pybaseado em asyncio por predefinição.audio— a portabilização Alif adiciona o módulo de áudio (microfone PDM) com uma API de transmissão por callback (audio.init(channels=, frequency=, gain_db=, buffers=, samples=, overflow=, highpass=)) no AE3.ROMFS — um sistema de ficheiros de leitura apenas
/romcom recursos 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 tiny-YOLOv2 leve com âncoras predefinidas otimizadas para sistemas embebidos), cada uma aceitandothreshold,nms_thresholdenms_sigma.Anti-flickering do GenX320 — novo ioctl
IOCTL_GENX320_SET_AFKpara ativar e configurar o filtro anti-flickering do sensor de eventos (frequência de flickering mín/máx em Hz), com um exemplogenx320_grayscale_set_afk.py.VL53L8CX — suporte para o sensor de tempo-de-voo multi-zona de 8x8 através do módulo
tof(deteção automática, 8x8 a 15 Hz).
Outras alterações e melhorias¶
MicroPython atualizado para 1.25.0 (portabilizações STM32 e i.MX RT), com a portabilização upstream Alif adicionada e os drivers BT-HCI legados removidos das portabilizações STM32 / i.MX RT.
GenX320 — uma nova sequência ISSD duplica o relógio de pixel interno (24 → 48 MHz) para taxas de fotogramas mais elevadas.
STM32N6 / ST Edge AI — fundamentos para a implementação de modelos Neural-ART do STM32N6 (ferramentas ST Edge AI e suporte ROMFS).
PAG7936 — o bitrate CSI PHY é agora definido, melhorando o funcionamento desse sensor.
Correções de erros¶
Câmara e sensores:
Corrigido o IMU via I2C — as placas que ligam o IMU LSM6DSx em I2C inicializam e leem agora corretamente (o caminho I2C utilizava anteriormente um caminho de leitura incorreto e constantes erradas).
O init do FLIR Boson agora tenta até 10 vezes para sensores mais antigos (< IDD 4.x) que demoram ~10 s a arrancar, e as definições de fábrica são restauradas no reset para que as definições carregadas externamente não possam interromper a saída de vídeo.
Corrigida a escrita de tempo de acumulação errado (zero) em
psee_ehc_activate_overridedo GenX320.Em placas STM32 sem hardware FastMode+, a solicitação de modo rápido I2C é agora devidamente verificada em vez de configurar o barramento de forma silenciosa e incorreta.
Aprendizagem automática:
Corrigida a recolha de caixas delimitadoras e o tratamento de
np.nonzeronos pós-processadores YOLOv2 / YOLOv5, melhorando a fiabilidade da deteção.
Hardware e suporte de placas¶
OpenMV AE3 — nova placa Alif Ensemble (Cortex-M55 + NPU Ethos-U55).
VL53L8CX — sensor de tempo-de-voo multi-zona de 8x8; o sensor ToF do AE3 foi substituído do VL53L5CX para o VL53L8CX.
STM32N6 — fundamentos de implementação de modelos ST Edge AI (Neural-ART).
Alterações incompatíveis na API¶
Alterações na API visíveis pelo utilizador entre v4.6.20 e v4.7.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.
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 para obter uma lista de tarefas condensada. Cada hash de commit tem uma ligação para o diff no GitHub.
Os modelos integrados são carregados por caminho, não por nome (major)¶
ml.Model já não carrega um modelo integrado a partir de uma cadeia de caracteres de nome simples. Os modelos são agora carregados a partir do sistema de ficheiros / ROMFS por caminho:
model = ml.Model("/rom/person_detect.tflite") # was: ml.Model("person_detect")
O atributo C-side model.labels foi removido; as etiquetas são agora carregadas pelo wrapper Python ml.Model a partir de um ficheiro sidecar <model>.txt (None se ausente). Todos os exemplos incluídos e ml/apps.py foram atualizados para caminhos /rom/*.tflite.
As cascatas Haar são carregadas a partir do ROMFS (minor)¶
image.HaarCascade() carrega agora as cascatas integradas através do VFS / ROMFS. O ficheiro de cascata de face frontal predefinido foi renomeado de haarcascade_frontalface_default.xml para haarcascade_frontalface.xml, e uma falha de carregamento levanta agora 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() era anteriormente um alias de init() e não havia um deinit real. tof.reset() realiza agora um reset real do sensor e tof.deinit() encerra corretamente o sensor (com suporte de encerramento do VL53L5CX). O código que dependia de reset() para reinicializar o sensor deve ser verificado de novo.
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 fotogramas e exposição são agora expressos em unidades de 1 MHz em vez de serem escalados pelo relógio, e o blanking HSYNC é ajustado dinamicamente à taxa de fotogramas solicitada. Os scripts que codificaram diretamente os valores de temporização do GenX320 devem ser reajustados. A captura em modo de eventos levanta agora um erro quando a transposição de imagem está ativada (não é suportada nessa configuração).
Lista de verificação de migração¶
Para uma migração limpa para v4.7.0, o trabalho típico é:
Alterar o carregamento de modelos integrados de uma cadeia de caracteres de nome para um caminho
/rom/<name>.tflite, e fornecer as etiquetas via um ficheiro sidecar<name>.txt(a alteração do ml.Model).Atualizar
haarcascade_frontalface_default.xmlparahaarcascade_frontalface.xmle capturarRuntimeError(nãoOSError) em caso de falha de carregamento de cascata (a alteração das cascatas Haar).Remover o código que dependia de
tof.reset()para reinicializar o sensor (a alteração do tof).Reajustar quaisquer valores de taxa de fotogramas / exposição do GenX320 codificados diretamente para unidades de 1 MHz, e não ativar a transposição em modo de eventos (a alteração do GenX320).