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 eimage.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().Imagem —
gamma_corr(),draw_ellipse(),draw_edges(), mesclagem alfa emdraw_image()e muitas novas propriedades de blob.Novas bibliotecas — distância ToF VL53L1X, driver de motor TB6612, micro-linalg.
Incompatível: a API
cpufreqfoi 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 deimage.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()comsensor.PALETTE_RAINBOW/PALETTE_IRONBOW,image.to_rainbow()e scripts de exemplo do Lepton (27-Lepton).Modo disparado —
IOCTL_SET_TRIGGERED_MODE/IOCTL_GET_TRIGGERED_MODEpara 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 emdraw_image(), uma palavra-chavemask=emclear(),mask_rectangle()/mask_circle()/mask_ellipse()readicionados, palavras-chave de rotação / hmirror / vflip emdraw_string()/draw_text(), uma palavra-chavetranspose(e os apelidosassign/set) emreplace(),x_scale/y_scaleemcopy()além decrop()/scale(), um construtorImage()a partir de dimensões, o pixformatsensor.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 motortb6612(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 deset_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 emto_grayscale()/to_rgb565(), olen()do objeto keypoint, o tratamento de limites de MCU JPEG, a análise da lista de limiares embinary()edraw_keypoints()aceitando tuplas de keypoint.
Sistema:
Corrigidos vazamentos por desbalanceamento de mark/free em
fb_allocnos métodos deimage/fir/lcd/tv/nn, feitopy_assertliberar 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 ferramentacascade_convert.pyno 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 é:
Portar o código
cpufreqparaset_frequency()com MHz inteiro eget_current_frequencies()/get_supported_frequencies()(a reformulação do cpufreq).Passar
maskparaimage.replace()como palavra-chave (a mudança no replace).Alocar framebuffers extras como
GRAYSCALE/RGB565em vez de Bayer/JPEG (a mudança no alloc_extra_fb).Capturar
ValueErrorem torno desensor.set_framesize()em vez de verificarFalse(a mudança no set_framesize).
Todos os outros scripts rodam sem alterações.