v4.5.1

A v4.5.1 adiciona sugestões de orientação/proporção de desenho de imagens, carregamento de imagens diretamente a partir de um caminho de ficheiro, um ioctl de campo de visão alargado para o GC2145, e uma nova API de controlo de retroiluminação. Também reformula o construtor Image(), as APIs de display, e a análise de argumentos dos módulos — leia as alterações de rutura abaixo.

Destaques

  • Sugestões de desenhodraw_image() ganhou sugestões de orientação (HMIRROR/VFLIP/TRANSPOSE, ROTATE_90/180/270) e de escalonamento de proporção (SCALE_ASPECT_KEEP/EXPAND/IGNORE).

  • Carregar imagens do discodraw_image() / display.write() aceitam um caminho de ficheiro como string.

  • Controlo de retroiluminação — novas classes DACBacklight / PWMBacklight e um argumento backlight= no ecrã.

  • Rutura: o construtor Image(), as APIs de display, e a análise de argumentos dos módulos foram alterados — consulte as alterações de rutura.

Novas funcionalidades

  • Sugestões de orientação em draw_image()image.HMIRROR, image.VFLIP, image.TRANSPOSE, mais os convenientes image.ROTATE_90 / ROTATE_180 / ROTATE_270.

  • Sugestões de proporção em 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 (movidos para o módulo image).

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

  • Carregar do discodraw_image() e display.write() aceitam um caminho de ficheiro de imagem fonte como string, carregando-a diretamente do armazenamento.

  • Controladores de retroiluminação — novas classes DACBacklight e PWMBacklight (importáveis a partir de display), e um argumento backlight= exclusivamente por palavra-chave nos construtores de ecrã SPI/paralelo.

Outras alterações e melhorias

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

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

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

Correções de erros

Câmara e sensores:

  • Corrigida a deteçã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 fotograma no i.MX RT (OpenMV RT1060), e corrigidos os pinos SPI4 MOSI/MISO trocados no RT1060.

Ecrã e vídeo:

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

  • Corrigida a corrupção de imagem no escudo TV ao desenhar uma imagem com um retângulo especificado, e limites de fotograma MJPEG incorretos ao gravar fotogramas escalonados.

Rede:

  • O modo AP WINC WiFi já não impõe a restrição obsoleta de WEP exclusivo — 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 alternativa de fiabilidade QSPI; ecrã ST7701 congelado.

  • Arduino Nano 33 BLE Sense — controlador IMU lsm9ds1 congelado.

Alterações de rutura da API

Ruturas de API visíveis pelo utilizador entre v4.5.0 e v4.5.1. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.

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

  • menor — API restrita; apenas afeta scripts que a usavam.

  • comportamento — mesma API, resultados diferentes; rever scripts ajustados.

As alterações estão agrupadas por impacto nessa ordem. Se pretende 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.

Construtor Image() e APIs de display (menor)

O construtor image.Image foi reformulado para usar argumentos por palavra-chave (height, pixformat, buffer=, copy_to_fb=); pode agora construir uma imagem a partir de um bytearray/buffer existente, e é obrigatório um buffer para formatos comprimidos. display.write() foi reformulado: x_scale/y_scale aceitam agora um float (rácio de escala) ou int (tamanho alvo em píxeis) 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 pesquisa WiFi WINC passaram para (ssid_bytes, bssid_bytes, channel, rssi, security, N) (SSID/BSSID são agora bytes; o BSSID já não é uma string MAC formatada).

Commits: 6752c95ac, 161737092, 8178c237c, b6cdf8de1

Intervalo de retroiluminação, escalonamento e argumentos exclusivamente por palavra-chave (comportamento)

Display.backlight() aceita agora uma intensidade de 0 a 100 (0 = desligado, 100 = máximo) em vez de 0 a 255, lançando ValueError fora do intervalo. Valores inteiros de x_scale/y_scale são agora tratados como um fator de escala multiplicativo (igual aos floats) em vez de uma dimensão em píxeis alvo — isto afeta fir.snapshot()/draw_ir(), tof.snapshot()/draw_depth(), display, e o escalonamento de tv. A análise de argumentos dos módulos sensor, fir, tof, tv, mjpeg, gif, imageio, tf, e audio foi unificada, tornando algumas opções anteriormente posicionais em exclusivamente por palavra-chave (nomes, valores por omissão e comportamento permanecem inalterados).

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

Lista de verificação de migração

Para uma portabilidade limpa para a v4.5.1, o trabalho típico é:

  1. Atualizar a construção de Image() para a nova forma por palavra-chave, trocar display.write() de x_size/y_size, e renomear WINC.connect() essidssid (tratar os novos tuplos de pesquisa baseados em bytes) (as alterações de construtor/display/WINC).

  2. Reescalonar as chamadas de Display.backlight() para 0–100, rever qualquer uso de x_scale/y_scale inteiro, e passar opções de módulos anteriormente posicionais como palavras-chave (as alterações de comportamento).