v4.5.6¶
v4.5.6 é a grande versão de aprendizagem automática. O módulo C TensorFlow tf foi substituído por um novo pacote ml independente de motor, suportado pelo TensorFlow Lite Micro (TFLM), a conversão imagem→tensor foi movida para image.to_ndarray(), e as placas com dois núcleos passaram a usar Open-AMP. Existem várias alterações incompatíveis — leia-as abaixo antes de atualizar os scripts de ML.
Destaques¶
Novo pacote
ml— o antigo módulotffoi reescrito num pacotemlindependente de motor (ml.Model,ml.preprocessing,ml.utils,ml.apps);tfmantém-se como alias.Backend TFLM — a obsoleta
libtffoi substituída pelo TensorFlow Lite Micro baseado no upstream: inferência ~20% mais rápida e bibliotecas mais pequenas.Dois núcleos com Open-AMP — GIGA e Portenta H7 utilizam agora Open-AMP/RPMsg para comunicação entre os núcleos M7/M4 (o mecanismo antigo CM4 foi removido).
Bluetooth integrado — firmware Bluetooth CYW43 ativado no Nicla Vision, Portenta H7 e GIGA.
MicroPython 1.23.0, ulab 6.5.2 (com suporte a ndarray de 4 dimensões).
Incompatível: a API de ML mudou substancialmente e as cascatas de Haar estão desativadas por omissão na maioria das placas — consulte as alterações incompatíveis.
Novas funcionalidades¶
Pacote
ml—ml.Modelcompredict()(roi,callback, lista multi-entrada), atributos de forma/dtype/escala/zero-point por tensor,ml.preprocessing.Normalization,ml.utils(NMS) eml.apps(um detetor de palavras-chave puramente PythonMicroSpeechcomlisten()e streaming não bloqueantetimeout=-1, maisdraw_predictions()).Sistema de modelos integrados — os modelos listados em
models/index.txtsão incorporados condicionalmente por placa (FOMO em todas as placas de ML, modelos de áudio em placas com microfones).image.to_ndarray(dtype, buffer=...)— converte uma imagem num ndarray do ulab (opcionalmente no lugar).Image()a partir de arrays brutos — novos argumentos de palavra-chaveshape=,strides=,scale=constroem imagens em escala de cinzentos/RGB565 a partir de listas de pixels brutos.draw_circle()com anti-aliasing.Módulo
sslincorporado no firmware para GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 e Pico.Áudio —
audio.init()ganhou o argumento de palavra-chavesamples=(amostras PDM por canal);gain_dbaplica-se agora nos microfones DFSDM (p. ex. Nicla Vision).Protocolo de depuração — um novo comando
GET_STATEdevolve flags de execução/texto/JPEG, geometria do fotograma e texto num único pacote, reduzindo as trocas com o host.Exemplo de vuart Open-AMP para comunicação entre núcleos.
Outras alterações e melhorias¶
MicroPython atualizado para 1.23.0; ulab para 6.5.2 com suporte a ndarray de 4 dimensões.
Inferência mais rápida — o backend de ML mantém estado/memória persistentes entre invocações (~20% mais rápido, suporta modelos do tipo LSTM).
get_similarity()foi reimplementado no backenddraw_image(suporte mais amplo de formatos/operações).morph()e a família de filtrosmean()passaram a usar análise de argumentos de palavra-chave;mask=aceita agora uma imagem mutável.Disposição de memória reformulada — regiões DMA alinhadas a potência de 2, blocos GC reordenáveis, múltiplos heaps; menos fragmentação precoce do heap em placas com pouca RAM; RT1060 ganha heap GC extra.
O WiFi (CYW43) é agora desinicializado no soft-reset; o ecrã SPI-TV descarrega apenas a região do buffer de fotograma a partir da cache para atualizações mais suaves.
Correções de erros¶
Câmara e sensores:
Corrigida a invalidação acidental da cache da CPU no caminho framebuffer/sensor em STM32 e i.MX RT, que podia corromper dados de imagem.
Corrigidas as leituras I2C térmicas de MLX90640/MLX90641 em placas i.MX RT (transferências grandes são agora divididas em blocos).
Aprendizagem automática:
Corrigidos o tratamento de
load_to_fbnoml.Model, o dimensionamento debytearrayde entrada, as verificações dendimem ndarray e a validação de formato/forma de imagem emNormalization.
Imagem / sistema:
Adicionada a constante de sugestão de desenho
image.BLACK_BACKGROUNDem falta e uma verificação de sanidade do comprimento do buffer de imagem/tensor.Corrigidos os ponteiros de raiz GC de FIR e áudio que podiam permitir ao coletor libertar buffers em uso.
O exemplo Servo Shield utiliza agora
SoftI2Cpara funcionar nas placas OpenMV RT.
Hardware e suporte a placas¶
Arduino GIGA — suporte aos sensores HM01B0 / HM0360; dois núcleos com Open-AMP.
Bluetooth — firmware BT CYW43 no Nicla Vision, Portenta H7 e GIGA.
Portenta H7 — Open-AMP M7/M4 RPMsg.
OpenMV RT1060 — blocos de heap GC adicionais (mais memória Python).
Alterações incompatíveis da API¶
Alterações da API visíveis para o utilizador entre v4.5.5 e v4.5.6. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.
Cada alteração está etiquetada com o seu impacto:
major — a maioria dos scripts que a usavam necessita de modificações.
minor — API restrita; só afeta scripts que a usavam.
behavior — mesma API, resultados diferentes; reverifique scripts ajustados.
tooling — afeta mecanismos de dois núcleos / placa, não a API Python.
As alterações estão agrupadas por impacto nessa ordem. Se quiser apenas portar o seu código, salte para a lista de verificação de migração no final. Cada hash de commit liga ao seu diff no GitHub.
Módulo tf substituído pelo pacote ml (major)¶
O módulo C TensorFlow tf foi reescrito num pacote ml independente de motor (tf é mantido como alias retrocompatível, mas o novo código deve usar ml). As funções ao nível do módulo tf.load, tf.load_builtin_model e os métodos detect()/segment()/de classificação foram removidos — construa um ml.Model e chame predict(). ml.Model(path) devolve agora apenas o modelo (sem o tuplo (labels, model)); as etiquetas são um atributo model.labels. predict() devolve agora ndarrays do ulab (não tuplos de float), suporta modelos multi-entrada (passe uma lista), e o NMS foi movido para ml.utils; a normalização de entrada foi movida para ml.preprocessing.Normalization. O antigo ml.py é agora ml.apps.
Commits: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837
image.unpack() removido — use to_ndarray() (major)¶
O image.unpack() de curta duração foi removido; converta uma imagem num tensor com image.to_ndarray(dtype, buffer=...) e aplique normalização de escala/média/desvio padrão com ml.preprocessing.Normalization em vez do antigo caminho de escalamento de imagem integrado.
Argumento scale de array bruto em Image() (minor)¶
Ao construir uma Image a partir de um array de pixels brutos, o argumento scale aceita agora um intervalo (min, max) em vez de (scale, add).
Commit: 7b79fb4c7
Cascatas de Haar desativadas por omissão na maioria das placas (behavior)¶
Para libertar espaço em flash, a deteção facial por cascata de Haar (find_features() / image.HaarCascade()) está agora desativada por omissão no Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO e OpenMV Pure Thermal. Os scripts que usam cascatas de Haar nessas placas têm de recompilar o firmware com a funcionalidade ativada.
Commit: 6ce27c910
Interrupção de script e escalamento de tensores (behavior)¶
O depurador USB interrompe agora um script em execução através da funcionalidade de aborto da VM do MicroPython em vez de um salto PendSV forçado (mais limpo, mas o ponto de interrupção difere). O escalamento de entrada SCALE_S128_127 foi corrigido para mapear 0–255 em −128–127 sem um ganho errático — os modelos que dependiam do escalamento antigo (incorreto) produzirão resultados diferentes.
Coprocessador CM4 substituído por Open-AMP (tooling)¶
O mecanismo de firmware do coprocessador CM4 descontinuado no GIGA / Nicla Vision / Portenta H7 foi removido e substituído por Open-AMP/RPMsg. O código de dois núcleos deve ser migrado para o modelo Open-AMP (é fornecido um exemplo de vuart).
Lista de verificação de migração¶
Para uma migração limpa para v4.5.6, o trabalho típico é:
Portar o código ML para
ml: construirml.Model(path), chamarpredict(), lermodel.labels, esperar saídasndarraye mover a normalização paraml.preprocessing.Normalizatione o NMS paraml.utils(a alteração do pacote ml).Substituir
image.unpack()porimage.to_ndarray()(a remoção do unpack).Atualizar qualquer argumento
scalede array bruto emImage()para um intervalo(min, max)(a alteração de escala de Image).Se usar cascatas de Haar numa placa afetada, recompile com a funcionalidade ativada (a alteração das cascatas de Haar).
Revalide os modelos que dependiam de
SCALE_S128_127(a alteração de escalamento).Migre o código de dois núcleos para Open-AMP (a alteração do CM4).