v4.5.6¶
v4.5.6 é a grande versão de aprendizado de máquina. O módulo C tf do TensorFlow foi substituído por um novo pacote ml independente de engine, baseado no TensorFlow Lite Micro (TFLM); a conversão de imagem→tensor foi movida para image.to_ndarray() e as placas dual-core migraram para o Open-AMP. Há várias mudanças incompatíveis — leia-as abaixo antes de atualizar seus scripts de ML.
Destaques¶
Novo pacote
ml— o antigo módulotffoi reescrito em um pacotemlindependente de engine (ml.Model,ml.preprocessing,ml.utils,ml.apps);tfpermanece como um alias.Backend TFLM — o obsoleto
libtffoi substituído pelo TensorFlow Lite Micro baseado no upstream: inferência ~20% mais rápida e bibliotecas menores.Open-AMP dual-core — GIGA e Portenta H7 agora usam Open-AMP/RPMsg para a comunicação entre os núcleos M7/M4 (o antigo mecanismo CM4 foi removido).
Bluetooth embarcado — firmware Bluetooth CYW43 habilitado na Nicla Vision, Portenta H7 e GIGA.
MicroPython 1.23.0, ulab 6.5.2 (com suporte a ndarray 4-D).
Incompatível: a API de ML mudou substancialmente e as cascatas de Haar estão desabilitadas por padrão na maioria das placas — veja as mudanças incompatíveis.
Novos recursos¶
Pacote
ml—ml.Modelcompredict()(roi,callback, lista de múltiplas entradas), atributos de shape/dtype/scale/zero-point por tensor,ml.preprocessing.Normalization,ml.utils(NMS) eml.apps(um detector de palavras-chaveMicroSpeechem Python puro comlisten()e streaming não bloqueante viatimeout=-1, além dedraw_predictions()).Sistema de modelos embutidos — os modelos listados em
models/index.txtsão incorporados condicionalmente por placa (FOMO em todas as placas de ML, modelos de áudio nas placas com microfones).image.to_ndarray(dtype, buffer=...)— converte uma imagem em um ndarray do ulab (opcionalmente in-place).Image()a partir de arrays brutos — os novos argumentos de palavra-chaveshape=,strides=escale=constroem imagens em escala de cinza/RGB565 a partir de listas de pixels brutos.draw_circle()com anti-aliasing.Módulo
sslcongelado no firmware na GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 e Pico.Áudio —
audio.init()ganhou um argumento de palavra-chavesamples=(amostras PDM por canal);gain_dbagora se aplica a microfones DFSDM (por exemplo, na Nicla Vision).Protocolo de depuração — um novo comando
GET_STATEretorna as flags de run/text/JPEG, a geometria do quadro e o texto em um único pacote, reduzindo os round-trips com o host.Exemplo de vuart Open-AMP para comunicação entre núcleos.
Outras mudanças e melhorias¶
MicroPython atualizado para 1.23.0; ulab para 6.5.2 com suporte a ndarray 4-D.
Inferência mais rápida — o backend de ML mantém estado/memória persistentes entre as invocações (~20% mais rápido, com suporte a modelos no estilo LSTM).
get_similarity()foi reimplementado sobre o backenddraw_image(suporte mais amplo a formatos/operações).morph()e a família de filtrosmean()passaram a usar análise de argumentos de palavra-chave;mask=agora aceita uma imagem mutável.Layout de memória reformulado — regiões de DMA alinhadas a potências de 2, blocos de GC reordenáveis, múltiplos heaps; menos fragmentação inicial do heap em placas com pouca RAM; a RT1060 ganha um heap de GC extra.
O WiFi (CYW43) agora é desinicializado no soft-reset; o display SPI-TV faz flush apenas da região do framebuffer a partir do cache, para atualizações mais suaves.
Correções de bugs¶
Câmera e sensores:
Corrigida uma invalidação acidental do cache da CPU no caminho framebuffer/sensor no STM32 e i.MX RT, que podia corromper os dados da imagem.
Corrigidas as leituras térmicas via I2C do MLX90640/MLX90641 em placas i.MX RT (transferências grandes agora são divididas em blocos).
Aprendizado de máquina:
Corrigidos o tratamento de
load_to_fbemml.Model, o dimensionamento dobytearrayde entrada, as verificações dendimdo ndarray e a validação de formato/shape de imagem emNormalization.
Imagem / sistema:
Adicionada a constante de dica de desenho
image.BLACK_BACKGROUND, que estava faltando, e uma verificação de sanidade do comprimento do buffer de imagem/tensor.Corrigidos os ponteiros raiz de GC de FIR e áudio que podiam levar o coletor a liberar buffers em uso.
O exemplo do Servo Shield agora usa
SoftI2C, de modo que funciona nas placas OpenMV RT.
Hardware e suporte a placas¶
Arduino GIGA — suporte aos sensores HM01B0 / HM0360; Open-AMP dual-core.
Bluetooth — firmware BT CYW43 na Nicla Vision, Portenta H7 e GIGA.
Portenta H7 — Open-AMP M7/M4 RPMsg.
OpenMV RT1060 — blocos de heap de GC adicionais (mais memória para Python).
Mudanças incompatíveis na API¶
Quebras de API visíveis ao usuário entre a v4.5.5 e a v4.5.6. 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 edições.
minor — API restrita; afeta apenas os scripts que a usavam.
behavior — mesma API, resultados diferentes; reverifique os scripts ajustados.
tooling — afeta os mecanismos de dual-core / placa, não a API Python.
As mudanças estão agrupadas por impacto nessa ordem. Se você só quer portar seu código, vá direto para a lista de verificação de migração no final. Cada hash de commit aponta para o seu diff no GitHub.
Módulo tf substituído pelo pacote ml (major)¶
O módulo C tf do TensorFlow foi reescrito em um pacote ml independente de engine (tf é mantido como um alias retrocompatível, mas o código novo deve usar ml). As funções de nível de módulo tf.load e 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) agora retorna apenas o modelo (não mais a tupla (labels, model)); os rótulos passam a ser o atributo model.labels. predict() agora retorna ndarrays do ulab (não tuplas de float), oferece suporte a modelos de múltiplas entradas (passe uma lista) e o NMS foi movido para ml.utils; a normalização da 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 efêmero image.unpack() foi removido; em vez dele, converta uma imagem em tensor com image.to_ndarray(dtype, buffer=...) e aplique a normalização de scale/mean/stdev com ml.preprocessing.Normalization, em vez do antigo caminho embutido de escalonamento de imagem.
Argumento scale de array bruto de Image() (minor)¶
Ao construir uma Image a partir de um array de pixels brutos, o argumento scale agora recebe um intervalo (min, max) em vez de (scale, add).
Commit: 7b79fb4c7
Cascatas de Haar desabilitadas por padrão na maioria das placas (behavior)¶
Para liberar espaço na flash, a detecção de faces por cascatas de Haar (find_features() / image.HaarCascade()) agora está desabilitada por padrão na 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 precisam recompilar o firmware com o recurso habilitado.
Commit: 6ce27c910
Interrupção de script e escalonamento de tensor (behavior)¶
O depurador USB agora interrompe um script em execução por meio do recurso de aborto da VM do MicroPython, em vez de um salto PendSV forçado (mais limpo, mas o ponto de interrupção é diferente). O escalonamento de entrada SCALE_S128_127 foi corrigido para mapear 0–255 para −128–127 sem um ganho indevido — modelos que dependiam do escalonamento antigo (incorreto) produzirão resultados diferentes.
Coprocessador CM4 substituído pelo Open-AMP (tooling)¶
O mecanismo obsoleto de firmware do coprocessador CM4 na GIGA / Nicla Vision / Portenta H7 foi removido e substituído pelo Open-AMP/RPMsg. O código dual-core precisa migrar para o modelo Open-AMP (um exemplo de vuart é fornecido).
Lista de verificação de migração¶
Para uma portabilidade limpa para a v4.5.6, o trabalho típico é:
Porte o código de ML para
ml: construaml.Model(path), chamepredict(), leiamodel.labels, espere saídas emndarraye mova a normalização paraml.preprocessing.Normalizatione o NMS paraml.utils(a mudança do pacote ml).Substitua
image.unpack()porimage.to_ndarray()(a remoção de unpack).Atualize qualquer argumento
scalede array bruto deImage()para um intervalo(min, max)(a mudança de scale de Image).Se você usa cascatas de Haar em uma placa afetada, recompile com o recurso habilitado (a mudança das cascatas de Haar).
Revalide os modelos que dependiam de
SCALE_S128_127(a mudança de escalonamento).Mova o código dual-core para o Open-AMP (a mudança do CM4).