v3.3.0

A v3.3.0 é uma versão muito grande. Adiciona suporte completo à câmara térmica FLIR Lepton com uma nova interface sensor.ioctl() e paletas de cores, um módulo tv de saída de vídeo SPI, modo com disparo de obturador global, um grande conjunto de novos métodos de desenho/análise image (gamma_corr(), draw_ellipse(), draw_edges(), muitas propriedades de manchas), e novas bibliotecas ToF / motor / linalg. A API cpufreq foi reformulada e sensor.set_framesize() passa agora a lançar excepções — leia as alterações incompatíveis abaixo.

Destaques

  • FLIR Lepton — suporte completo de câmara térmica através da nova interface sensor.ioctl(), paletas de cores e image.to_rainbow().

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

  • Modo com disparo de obturador global — captura disparada pelo MT9V034 via sensor.ioctl().

  • Imagemgamma_corr(), draw_ellipse(), draw_edges(), mistura alfa com draw_image() e muitas novas propriedades de manchas.

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

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

Novas funcionalidades

  • FLIR Lepton — adicionado sensor.ioctl() para controlo específico do sensor e um conjunto completo de ioctls do Lepton (radiometria, refrescamento/resolução, executar comando, definir/obter atributo, temperatura FPA/AUX em °C, modo/intervalo 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 com obturador global MT9V034, com exemplos de alta FPS e modo disparado.

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

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

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

  • Actualizado o FatFS para FF13C (compatível com exFAT).

Outras alterações e melhorias

  • Melhorada a qualidade JPEG predefinida (valor intermédio entre baixo e alto em vez de um valor fixo); as operações de imagem no local deixam de exigir repetir a imagem como primeiro argumento; draw_string() aceita valores de escala não inteiros.

Correcções de erros

Câmara e sensores:

  • Corrigido o bloqueio na inicialização do Lepton 3.5 (timeout + recuperação) e a fiabilidade do reset, set_framesize() do MT9V034 antes de set_pixformat() (a ordem de chamada já não importa), WVGA do MT9V034 no STM32H7, o intervalo de exposição automática do MT9V034 e as actualizações de registos shadow, e o erro ADC do H7.

Imagem:

  • Corrigido um acesso inválido à memória em find_apriltags(), copy() ao copiar uma imagem com escala para o framebuffer principal, alocação do framebuffer em to_grayscale() / to_rgb565(), o len() do objecto ponto-chave, o tratamento de limites MCU em JPEG, a análise de lista de limiares em binary(), e draw_keypoints() a aceitar tuplos de pontos-chave.

Sistema:

  • Corrigidas as fugas de desequilíbrio mark/free do fb_alloc nos métodos de image / fir / lcd / tv / nn, tornado o py_assert a libertar a memória do framebuffer em excepções capturadas (#417), limpo o flag de sobrecarga UART (ORE) para que as sobrecargas deixem de bloquear as leituras UART, corrigido o handler de IRQ do RTC, e corrigida a ferramenta Windows cascade_convert.py.

Hardware e suporte de placas

  • Câmara térmica FLIR Lepton.

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

  • Modo disparado de obturador global (MT9V034).

Alterações de API incompatíveis

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

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

  • major — afecta a maioria dos scripts que utilizavam a funcionalidade; será necessário portar o código.

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

  • behavior — mesma API, resultados diferentes; verifique novamente 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 contém uma ligação para o respectivo diff no GitHub.

API cpufreq reformulada (major)

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

Commits: 6babf84a1

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

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

Commits: dbe7bf059

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

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

Commits: f9e6b3fe0

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

sensor.set_framesize() lança agora uma ValueError quando o tamanho de fotograma não é suportado, em vez de devolver False. O código que verificava o valor de retorno False deve passar a capturar a excepção ValueError.

Commits: b0442633e

Lista de verificação de migração

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

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

  2. Passar mask a image.replace() como palavra-chave (a alteração do replace).

  3. Alocar framebuffers extra como GRAYSCALE / RGB565 em vez de Bayer/JPEG (a alteração do alloc_extra_fb).

  4. Capturar ValueError em torno de sensor.set_framesize() em vez de verificar False (a alteração do set_framesize).

Todos os outros scripts funcionam sem modificações.