v4.5.1

v4.5.1 adiciona dicas de desenho de orientação/proporção de imagem, carregamento de imagens diretamente de um caminho de arquivo, um ioctl de campo de visão amplo do GC2145 e uma nova API de controlador de iluminação de fundo. Também reformula o construtor Image(), as APIs de display e a análise de argumentos dos módulos — leia as mudanças incompatíveis abaixo.

Destaques

  • Dicas de desenhodraw_image() ganhou dicas de orientação (HMIRROR/VFLIP/TRANSPOSE, ROTATE_90/180/270) e de escala por proporção (SCALE_ASPECT_KEEP/EXPAND/IGNORE).

  • Carregar imagens do discodraw_image() / display.write() aceitam uma string de caminho de arquivo.

  • Controle de iluminação de fundo — novas classes DACBacklight / PWMBacklight e um argumento backlight= do display.

  • Incompatível: o construtor Image(), as APIs de display e a análise de argumentos dos módulos mudaram — veja as mudanças incompatíveis.

Novos recursos

  • Dicas de orientação do draw_image()image.HMIRROR, image.VFLIP, image.TRANSPOSE, além das convenientes image.ROTATE_90 / ROTATE_180 / ROTATE_270.

  • Dicas de proporção do draw_image()image.SCALE_ASPECT_KEEP / SCALE_ASPECT_EXPAND / SCALE_ASPECT_IGNORE para ajustar / expandir / esticar.

  • Constantes de paletaimage.PALETTE_RAINBOW e image.PALETTE_IRONBOW (movidas para o módulo image).

  • Campo de visão amplo — novos ioctls sensor.IOCTL_SET_FOV_WIDE / IOCTL_GET_FOV_WIDE (no GC2145, escala de sensor de até 5x).

  • Carregar do discodraw_image() e display.write() aceitam uma string de caminho de arquivo de imagem de origem, carregando-a diretamente do armazenamento.

  • Controladores de iluminação de fundo — novas classes DACBacklight e PWMBacklight (importáveis de display) e um argumento somente por palavra-chave backlight= nos construtores de display SPI/paralelo.

Outras mudanças e melhorias

  • O driver de display DSI ST7701 foi movido para seu próprio módulo st7701.py (ainda importável via from display import *) e está congelado no Arduino Giga; o driver de IMU lsm9ds1 foi congelado no Arduino Nano 33 BLE Sense.

  • As câmeras MT9V022 / MT9V034 (global-shutter) agora aplicam correção de ruído de linha para melhor qualidade de imagem.

  • O volume de armazenamento em massa USB do i.MX RT agora é rotulado como um disco OpenMV.

Correções de bugs

Câmera e sensores:

  • Corrigida a detecção de cantos (find_keypoints() FAST/AGAST) em imagens com mais de 480 linhas — o buffer por linha agora é dimensionado de acordo com a altura da imagem.

  • Adicionado suporte ao pino FSYNC para snapshot() sincronizado por quadro no i.MX RT (OpenMV RT1060) e corrigidos os pinos SPI4 MOSI/MISO trocados no RT1060.

Display e vídeo:

  • Corrigida a ordem dos argumentos do construtor SPIDisplay (bgr, byte_swap, triple_buffer estavam sendo aplicados aos parâmetros errados).

  • Corrigida a corrupção de imagem no shield de TV ao desenhar uma imagem com um retângulo especificado e os limites de quadro MJPEG incorretos ao gravar quadros redimensionados.

Rede:

  • O modo AP de WiFi WINC não impõe mais a restrição obsoleta de apenas WEP — os modos AP aberto e WPA funcionam com tratamento adequado de PSK.

Hardware e suporte a placas

  • OpenMV RT1060 — pino FSYNC e pinos SPI4 corrigidos.

  • Arduino GIGA — solução de contorno para confiabilidade do QSPI; display ST7701 congelado.

  • Arduino Nano 33 BLE Sense — driver de IMU lsm9ds1 congelado.

Mudanças incompatíveis na API

Quebras de API visíveis ao usuário entre a v4.5.0 e a v4.5.1. Escopo: módulos C de 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; reavalie scripts ajustados.

As mudanças estão agrupadas por impacto nessa ordem. Se você só quer portar seu código, vá para a lista de verificação de migração no final. Cada hash de commit leva ao seu diff no GitHub.

Construtor Image() e APIs de display (minor)

O construtor image.Image foi reformulado para argumentos por palavra-chave (height, pixformat, buffer=, copy_to_fb=); agora ele pode construir uma imagem a partir de um bytearray/buffer existente, e um buffer é obrigatório para formatos compactados. display.write() foi reformulado: x_scale/y_scale agora recebem um float (razão de escala) ou int (tamanho alvo em pixels) e as palavras-chave separadas x_size/y_size foram removidas. O primeiro argumento posicional de WINC.connect() foi renomeado de essidssid, e os resultados de varredura de WiFi WINC mudaram para (ssid_bytes, bssid_bytes, channel, rssi, security, N) (SSID/BSSID agora são bytes; BSSID não é mais uma string MAC formatada).

Commits: 6752c95ac, 161737092, 8178c237c, b6cdf8de1

Faixa de iluminação de fundo, escala e argumentos somente por palavra-chave (behavior)

Display.backlight() agora recebe uma intensidade de 0–100 (0 = desligado, 100 = total) em vez de 0–255, lançando ValueError fora da faixa. Valores inteiros de x_scale/y_scale agora são tratados como um fator de escala multiplicativo (igual aos floats) em vez de uma dimensão de pixel alvo — isso afeta fir.snapshot()/draw_ir(), tof.snapshot()/ draw_depth(), display e a escala de tv. A análise de argumentos nos módulos sensor, fir, tof, tv, mjpeg, gif, imageio, tf e audio foi unificada, tornando somente por palavra-chave várias opções anteriormente posicionais (nomes, padrões e comportamento permanecem inalterados no restante).

Commits: 391ec443f, 8bd25d6cd, 477312656, 08bf62a32, a4c0f20bf, 9b411a66d, 3d679f5a6, d15fc6b8d, 555e67ecd

Lista de verificação de migração

Para um port limpo para a v4.5.1, o trabalho típico é:

  1. Atualize a construção de Image() para a nova forma por palavra-chave, mude display.write() para não usar x_size/y_size e renomeie WINC.connect() essidssid (trate as novas tuplas de varredura baseadas em bytes) (as mudanças de construtor/display/WINC).

  2. Reescale as chamadas de Display.backlight() para 0–100, reavalie qualquer uso de x_scale/y_scale inteiro e passe como palavras-chave as opções de módulo antes posicionais (as mudanças de comportamento).