v3.3.0

v3.3.0 é uma versão enorme. Ela adiciona suporte completo à câmera térmica FLIR Lepton com uma nova interface sensor.ioctl() e paletas de cores, um módulo de saída de vídeo SPI tv, modo disparado por global-shutter, um grande conjunto de novos métodos de desenho/análise de image (gamma_corr(), draw_ellipse(), draw_edges(), muitas propriedades de blob) e novas bibliotecas de ToF / motor / linalg. A API cpufreq foi reformulada e sensor.set_framesize() agora lança exceção — leia as mudanças incompatíveis abaixo.

Destaques

  • FLIR Lepton — suporte completo à câmera térmica por meio da nova interface sensor.ioctl(), paletas de cores e image.to_rainbow().

  • Módulo tv — saída de vídeo SPI TV / composto.

  • Modo disparado por global-shutter — captura disparada do MT9V034 via sensor.ioctl().

  • Imagemgamma_corr(), draw_ellipse(), draw_edges(), mesclagem alfa em draw_image() e muitas novas propriedades de blob.

  • Novas bibliotecas — distância ToF VL53L1X, driver de motor TB6612, micro-linalg.

  • Incompatível: a API cpufreq foi reformulada, sensor.set_framesize() agora lança exceção em caso de falha, sensor.alloc_extra_fb() deixou de aceitar Bayer/JPEG e os argumentos posicionais de image.replace() foram deslocados — veja as mudanças incompatíveis.

Novos recursos

  • FLIR Lepton — adicionado sensor.ioctl() para controle específico do sensor e um conjunto completo de ioctls do Lepton (radiometria, atualização/resolução, run-command, set/get de atributo, temperatura do FPA/AUX em °C, modo/faixa de medição, largura/altura), sensor.set_color_palette() / sensor.get_color_palette() com sensor.PALETTE_RAINBOW / PALETTE_IRONBOW, image.to_rainbow() e scripts de exemplo do Lepton (27-Lepton).

  • Modo disparadoIOCTL_SET_TRIGGERED_MODE / IOCTL_GET_TRIGGERED_MODE para captura disparada por global-shutter do MT9V034, com exemplos de alta FPS e de modo disparado.

  • Módulo tv — adicionadas as ligações de saída de vídeo SPI TV / composto.

  • Imagem — adicionados image.gamma_corr(), image.draw_ellipse(), image.draw_edges(), mesclagem alfa em draw_image(), uma palavra-chave mask= em clear(), mask_rectangle() / mask_circle() / mask_ellipse() readicionados, palavras-chave de rotação / hmirror / vflip em draw_string() / draw_text(), uma palavra-chave transpose (e os apelidos assign / set) em replace(), x_scale / y_scale em copy() além de crop() / scale(), um construtor Image() a partir de dimensões, o pixformat sensor.BINARY, funções exportadas de conversão de espaço de cor e muitas novas propriedades de blob (corners, perimeter, roundness, elongation, extent, compactness, solidity, convexity, enclosing_circle, enclosed_ellipse, rotação).

  • Bibliotecas — adicionados o driver de sensor de distância ToF vl53l1x, o driver de motor tb6612 (com exemplos de motor DC e de motor de passo para o Motor-Shield) e uma biblioteca micro-linalg (ulinalg / umatrix).

  • FatFS atualizado para FF13C (com suporte a exFAT).

Outras mudanças e melhorias

  • Melhorada a qualidade JPEG padrão (faixa intermediária entre baixa e alta, em vez de um valor fixo); operações de imagem in-place não exigem mais repetir a imagem como primeiro argumento; draw_string() aceita valores de escala não inteiros.

Correções de bugs

Câmera e sensores:

  • Corrigidos o travamento na inicialização do Lepton 3.5 (timeout + recuperação) e a confiabilidade do reset, set_framesize() antes de set_pixformat() no MT9V034 (a ordem de chamada não importa mais), a WVGA do MT9V034 no STM32H7, a faixa de auto-exposição do MT9V034 e as atualizações dos registradores-sombra, e o bug do ADC do H7.

Imagem:

  • Corrigidos um acesso de memória inválido em find_apriltags(), copy() ao copiar uma imagem escalada para o framebuffer principal, a alocação de framebuffer em to_grayscale() / to_rgb565(), o len() do objeto keypoint, o tratamento de limites de MCU JPEG, a análise da lista de limiares em binary() e draw_keypoints() aceitando tuplas de keypoint.

Sistema:

  • Corrigidos vazamentos por desbalanceamento de mark/free em fb_alloc nos métodos de image / fir / lcd / tv / nn, feito py_assert liberar a memória do framebuffer em exceções capturadas (#417), limpada a flag de overrun (ORE) da UART para que overruns não travem mais as leituras da UART, corrigido o handler de IRQ do RTC e corrigida a ferramenta cascade_convert.py no Windows.

Hardware e suporte a placas

  • Câmera térmica FLIR Lepton.

  • TV shield — saída de vídeo SPI TV / composto.

  • Modo disparado por global-shutter (MT9V034).

Mudanças incompatíveis na API

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

Cada mudança é marcada com seu impacto:

  • major — afeta a maioria dos scripts que usavam o recurso; você precisará portar o código.

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

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

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

API cpufreq reformulada (major)

O módulo cpufreq foi reformulado para suporte ao H7. As constantes cpufreq.CPUFREQ_120MHZ / 144 / 168 / 192 / 216MHZ e cpufreq.get_frequency() foram removidas. cpufreq.set_frequency() agora recebe um inteiro simples em MHz (por exemplo, cpufreq.set_frequency(120)), e cpufreq.get_current_frequencies() / cpufreq.get_supported_frequencies() foram adicionados.

Commits: 6babf84a1

Argumentos posicionais de image.replace() deslocados (minor)

image.replace() ganhou um argumento transpose, deslocando o argumento posicional mask da posição 4 para a posição 5. Código que passava mask posicionalmente (por exemplo, img.replace(src, hmirror, vflip, mask)) deve mudar para a forma de palavra-chave img.replace(src, mask=mask).

Commits: dbe7bf059

sensor.alloc_extra_fb() não aceita mais Bayer/JPEG (minor)

sensor.alloc_extra_fb() não aceita mais sensor.BAYER nem sensor.JPEG (agora também suporta sensor.BINARY). Código que alocava framebuffers extras em formato Bayer ou JPEG deve usar GRAYSCALE / RGB565 (ou alocar o buffer de outra forma).

Commits: f9e6b3fe0

sensor.set_framesize() lança exceção em caso de falha (behavior)

sensor.set_framesize() agora lança um ValueError quando o framesize não é suportado, em vez de retornar False. Código que verificava o retorno False deve capturar a exceção ValueError em vez disso.

Commits: b0442633e

Lista de verificação de migração

Para um port limpo para a v3.3.0, o trabalho típico é:

  1. Portar o código cpufreq para set_frequency() com MHz inteiro e get_current_frequencies() / get_supported_frequencies() (a reformulação do cpufreq).

  2. Passar mask para image.replace() como palavra-chave (a mudança no replace).

  3. Alocar framebuffers extras como GRAYSCALE / RGB565 em vez de Bayer/JPEG (a mudança no alloc_extra_fb).

  4. Capturar ValueError em torno de sensor.set_framesize() em vez de verificar False (a mudança no set_framesize).

Todos os outros scripts rodam sem alterações.