v3.7.0

A v3.7.0 é um grande lançamento. Adiciona o módulo audio (microfone PDM do Portenta H7) com uma nova API de callback não bloqueante, o módulo de reconhecimento de fala TensorFlow micro_speech, um controlador de LCD RGB paralelo totalmente novo (com saída HDMI e toque FT5X06), um método image.flush() com constantes de formato de pixel e um pipeline de escala image.draw_image() reescrito. Várias bibliotecas auxiliares legadas e métodos de imagem foram removidos e a matemática de yuv_to_* mudou — leia as mudanças incompatíveis abaixo.

Destaques

  • Módulo audio — captura do microfone PDM embarcado do Portenta H7 com uma API start_streaming(callback) não bloqueante.

  • micro_speech — um módulo de reconhecimento de micro-fala TensorFlow.

  • Novo controlador de LCD — suporte a display RGB paralelo, saída HDMI (TFP410) e toque FT5X06.

  • image.draw_image() — reescrito com um pipeline completo de escala/alpha/paleta (x_scale / y_scale / hint / color_palette …).

  • image.flush() além de constantes de formato de pixel (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • Incompatível: bibliotecas auxiliares legadas de matemática e vários métodos de imagem foram removidos, as APIs de draw_image() / LCD foram reformuladas, e yuv_to_* não subtrai mais 128 — veja as mudanças incompatíveis.

Novos recursos

  • audio — um novo módulo audio do Portenta H7 para captura de microfone PDM: audio.init(), audio.start_streaming(callback) não bloqueante e audio.stop_streaming() (a frequência é especificada em Hz).

  • micro_speech — um novo módulo com uma classe MicroSpeech, audio_callback() e micro_speech() para reconhecimento de fala TensorFlow; listen() usa uma média de janela móvel e aceita uma palavra-chave filter para restringir os resultados a uma lista de rótulos.

  • LCD — um novo controlador de LCD com suporte a display RGB paralelo, tipos LCD_NONE / LCD_SHIELD / LCD_DISPLAY, muitas constantes de framesize, triple_buffer / framesize / refresh / bgr / deinit, um display expandido, saída HDMI via o TFP410 e suporte a tela sensível ao toque FT5X06.

  • image.flush() — adicionado um método image.flush() e constantes de formato de pixel (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • image.draw_image() — reescrito com um novo pipeline de escala: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette e hint, além das constantes image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST e novos exemplos de alpha-blending / tabela de cores / escala.

  • ImageReader.next_frame() ganhou uma palavra-chave pause para desabilitar o atraso de reprodução em tempo real.

  • Adicionados exemplos de áudio do Portenta (audio_fft.py, micro_speech.py) e um exemplo de despertar do estado stop via ExtInt.

Outras mudanças e melhorias

  • Os exemplos embutidos foram reorganizados sob scripts/examples/Arduino/; o framebuffer agora atualiza instantaneamente após carregar/criar imagens com copy_to_fb=True (sem necessidade de flush manual); o heap do Portenta foi reduzido levemente para acomodar mais estado estático de drivers.

Correções de bugs

Câmera e imagem:

  • Corrigida a troca de vermelho/azul (ordem de bytes RGB565) em imagens capturadas, o arredondamento de desenho do DMA2D para combinar com o restante do código de desenho, a corrupção de fb_alloc em alocações recursivas (find_blobs()) e o controle de top_hat() / black_hat() condicionado a ambas as operações binárias e de matemática estarem habilitadas.

Display e áudio:

  • Corrigida a saída do shield LCD e o modo de áudio mono de 1 canal do Portenta.

Portenta:

  • Contornado um problema de Ethernet/SDRAM (manter rst_eth em nível alto) e corrigida a configuração de temporização do SDRAM.

Hardware e suporte a placas

  • Arduino Portenta H7 — captura de áudio do microfone PDM embarcado (SAI / PDM2PCM).

  • LCD — novo controlador de display RGB paralelo (LTDC habilitado no build do H7), saída HDMI via o TFP410 e suporte a LCD com tela sensível ao toque FT5X06.

Mudanças incompatíveis na API

Quebras de API visíveis ao usuário entre a v3.6.9 e a v3.7.0. Escopo: C-modules Python em modules/ e bibliotecas Python em scripts/libraries/.

Cada mudança é marcada com seu impacto:

  • 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ê só quer portar seu código, vá para o checklist de migração no final. Cada hash de commit leva ao seu diff no GitHub.

Bibliotecas auxiliares legadas de matemática removidas (minor)

As bibliotecas auxiliares mtx, rv, ulinalg, umatrix e vec foram removidas de scripts/libraries em favor de ulab. Scripts que façam import de qualquer uma delas falharão e precisam ser portados para ulab.

Commits: 1f7da9272

remove_shadows() / chrominvar() / illuminvar() removidos (minor)

image.remove_shadows(), image.chrominvar() e image.illuminvar() foram excluídos sem substituição. Scripts que chamam esses métodos precisam remover as chamadas.

Commits: 3173c2bb3

Assinatura de image.draw_image() reformulada (minor)

image.draw_image() foi reescrito sobre um novo pipeline de escala. Os antigos argumentos posicionais alpha / scale único e a ordenação posicional anterior não se aplicam mais; use a nova forma com palavras-chave (x_scale= / y_scale= ou x_size= / y_size=, alpha=, color_palette=, hint= …).

Commits: 3439f8824

Reescrita do módulo LCD (minor)

O módulo lcd foi reescrito para o novo controlador de display. lcd.init() agora recebe um type de display (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) e novos argumentos de palavra-chave, e a superfície de constantes / API foi substancialmente reorganizada. Scripts antigos apenas de shield em sua maioria ainda funcionam, mas os padrões e o comportamento mudaram — revise os scripts de LCD contra a nova API de type / framesize.

Commits: 185538207

yuv_to_* não subtrai mais 128 (behavior)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() agora tratam o elemento Y da tupla como um valor sem sinal de 0–255 em vez de subtrair 128. Os chamadores precisam passar Y sem o viés anterior de −128 para obter as mesmas cores de antes.

Commits: dcf141192

Checklist de migração

Para uma portabilidade limpa para a v3.7.0 o trabalho típico é:

  1. Portar o uso de mtx / rv / ulinalg / umatrix / vec para ulab (a remoção da biblioteca de matemática).

  2. Remover as chamadas de image.remove_shadows() / chrominvar() / illuminvar() (os métodos de imagem removidos).

  3. Atualizar as chamadas de image.draw_image() para a nova assinatura com palavras-chave (a reformulação de draw_image).

  4. Revisar os scripts de LCD contra a nova API de type / framesize do lcd (a reescrita do LCD).

  5. Remover o viés de −128 ao passar Y para yuv_to_* (a mudança de yuv_to_*).

Todos os outros scripts funcionam sem alterações.