v3.7.0

v3.7.0 é uma versão de grande envergadura. 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 voz TensorFlow micro_speech, um novo controlador LCD RGB paralelo (com saída HDMI e toque FT5X06), um método image.flush() com constantes de formato de pixel, e um pipeline de escalonamento image.draw_image() reescrito. Várias bibliotecas auxiliares e métodos de imagem legados foram removidos e a matemática yuv_to_* foi alterada — leia as alterações de ruptura abaixo.

Destaques

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

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

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

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

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

  • Ruptura: as bibliotecas auxiliares de matemática legadas e vários métodos de imagem foram removidos, as APIs draw_image() / LCD foram reformuladas, e yuv_to_* já não subtrai 128 — veja as alterações de ruptura.

Novas funcionalidades

  • 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 voz TensorFlow; listen() utiliza uma média de janela deslizante e aceita a palavra-chave filter para restringir os resultados a uma lista de etiquetas.

  • LCD — um novo controlador LCD com suporte a ecrã RGB paralelo, tipos LCD_NONE / LCD_SHIELD / LCD_DISPLAY, muitas constantes de tamanho de fotograma, triple_buffer / framesize / refresh / bgr / deinit, um display expandido, saída HDMI via TFP410 e suporte a ecrã táctil 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 escalonamento: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette e hint, mais as constantes image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST e novos exemplos de mistura alfa / tabela de cores / escalonamento.

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

  • Adicionados exemplos de áudio Portenta (audio_fft.py, micro_speech.py) e um exemplo de activação a partir de suspensão com ExtInt.

Outras alterações e melhorias

  • Os exemplos incorporados foram reorganizados em scripts/examples/Arduino/; o framebuffer actualiza-se agora instantaneamente após carregar/criar imagens com copy_to_fb=True (sem necessidade de flush manual); o heap da Portenta foi ligeiramente reduzido para acomodar mais estado estático do controlador.

Correções de erros

Câmara e imagem:

  • Corrigida a troca vermelho/azul (ordem de bytes RGB565) em imagens capturadas, o arredondamento de desenho DMA2D para corresponder ao restante código de desenho, a corrupção do fb_alloc em alocações recursivas (find_blobs()), e o top_hat() / black_hat() passaram a estar condicionados pela activação das operações binárias e matemáticas.

Ecrã e áudio:

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

Portenta:

  • Contornado um problema Ethernet/SDRAM (colocar rst_eth em alto) e corrigida a configuração de temporização da SDRAM.

Hardware e suporte a placas

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

  • LCD — novo controlador de ecrã RGB paralelo (LTDC activado na compilação H7), saída HDMI via TFP410 e suporte a ecrã táctil LCD FT5X06.

Alterações de ruptura na API

Alterações de API visíveis pelo utilizador entre v3.6.9 e v3.7.0. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.

Cada alteração está marcada com o seu impacto:

  • minor — API restrita; afecta apenas scripts que a utilizaram.

  • behavior — mesma API, resultados diferentes; verifique os scripts ajustados.

As alterações estão agrupadas por impacto nessa ordem. Se apenas pretende portar o seu código, avance para a lista de verificação de migração no final. Cada hash de commit é uma ligação para o respectivo diff no GitHub.

Bibliotecas auxiliares de matemática legadas removidas (minor)

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

Commits: 1f7da9272

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

image.remove_shadows(), image.chrominvar() e image.illuminvar() foram eliminados sem substituto. Os scripts que chamem estes métodos devem remover as chamadas.

Commits: 3173c2bb3

Assinatura de image.draw_image() reformulada (minor)

image.draw_image() foi reescrito sobre um novo pipeline de escalonamento. Os antigos argumentos posicionais alpha / scale único e a ordenação posicional anterior já não se aplicam; utilize a nova forma por palavra-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 ecrã. lcd.init() aceita agora um type de ecrã (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) e novos argumentos por palavra-chave, e as constantes / superfície da API foram substancialmente reorganizadas. Os scripts antigos apenas para shield funcionam na sua maioria, mas os padrões e o comportamento mudaram — reveja os scripts LCD face à nova API type / framesize.

Commits: 185538207

yuv_to_* já não subtrai 128 (behavior)

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

Commits: dcf141192

Lista de verificação de migração

Para uma migração limpa para v3.7.0, o trabalho típico é:

  1. Porte a utilização de mtx / rv / ulinalg / umatrix / vec para ulab (a remoção das bibliotecas de matemática).

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

  3. Actualize as chamadas a image.draw_image() para a nova assinatura por palavra-chave (a reformulação do draw_image).

  4. Reveja os scripts LCD face à nova API type / framesize do lcd (a reescrita do LCD).

  5. Retire o viés de −128 ao passar Y para yuv_to_* (a alteração do yuv_to_*).

Todos os outros scripts funcionam sem modificações.