v1.4.0

v1.4.0 é uma reorganização fundamental da imlib. find_blobs() / find_markers() foram reescritos para rastreamento direto por limiar de cor, muitos métodos de imagem autônomos foram incorporados às tuplas de blob, e vários métodos de imagem foram renomeados (subimgcopy, blitreplace, find_eyesfind_eye, compresscompressed). Ela também adiciona sensor.get_fb() / alternâncias de AGC / AEC e ~60 scripts de exemplo. Esta é uma versão fortemente incompatível — leia as mudanças incompatíveis abaixo.

Destaques

  • Rastreamento de blob baseado em corfind_blobs() recebe limiares de cor diretamente e retorna uma lista plana de tuplas de blob.

  • Limpeza da imlibsubimg()copy(), blit()replace(), find_eyes()find_eye(), compress()compressed().

  • Sensor — adicionados sensor.get_fb() e alternâncias para habilitar AGC/AEC.

  • ~60 scripts de exemplo adicionados/expandidos.

  • Incompatível: a API de blob, métodos de imagem removidos e várias renomeações — veja as mudanças incompatíveis.

Novos recursos

  • Sensor — adicionados sensor.get_fb() (recuperar o framebuffer do último snapshot), sensor.set_gain_ctrl(enable) (alternar AGC) e sensor.set_exposure_ctrl(enable) (alternar AEC).

  • Image — o subscrito de imagem (img[i]) agora suporta tanto a leitura quanto a escrita de pixels (escala de cinza / RGB565 / JPEG); adicionados um image.compress() in-place e um argumento nomeado quality= nas funções JPEG; find_blobs() / find_markers() / find_features() agora retornam uma lista vazia (iterável) em vez de um não-lista quando nada é encontrado.

  • Adicionados ~60 scripts de exemplo (controle da placa, filtros de imagem, rastreamento de cor, detecção de face / olho / característica, shield WiFi) e um segundo exemplo de detecção de íris.

Outras mudanças e melhorias

  • image.histeq() agora funciona em imagens RGB565, não apenas em escala de cinza.

Correções de bugs

  • Inicializado pyb.DAC no boot para que o DAC funcione (#121), corrigidos um image.dilate() quebrado, a corrupção de zero-byte do client.send() do WINC, a reiteração de mesclagem de blobs, um bug de reinicialização de buffer de arquivo que quebrava o sistema de arquivos após o primeiro uso, o cálculo de To_min / To_max do termopilha (#113), e aplicado um patch I2C/DMA da HAL do MicroPython upstream.

Suporte de hardware e placas

  • Shield WiFi — WINC1500 atualizado para os arquivos de placa Rev-B.

  • pyb.DAC — periférico DAC habilitado.

Mudanças incompatíveis na API

Quebras de API visíveis ao usuário entre a v1.3.0 e a v1.4.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.

As mudanças são agrupadas por impacto nessa ordem. Se você só quer portar seu código, vá direto para o checklist de migração no final. Cada hash de commit aponta para o seu diff no GitHub.

find_blobs() / find_markers() reescritos (major)

image.find_blobs() / find_markers() foram reescritos para rastreamento baseado em cor: você agora passa limiares de cor (e uma função de filtro opcional) diretamente, em vez de operar sobre uma imagem pré-segmentada, e o resultado é uma única lista plana de tuplas de blob de 10 elementos (com um campo de código de cor), em vez de uma árvore aninhada por cor. Refaça os scripts de rastreamento de cor para passar limiares de cor e iterar a lista plana.

Commits: d1ff36602, 16daeb83a

Métodos de imagem autônomos removidos (major)

image.threshold, image.centroid(), image.orientation_radians(), image.orientation_degrees() e image.pixels() foram removidos. Os dados de centroide / orientação / contagem de pixels agora estão disponíveis como campos das tuplas de blob retornadas por find_blobs().

Commits: 9e5d379c1

Renomeações de métodos da imlib (major)

Vários métodos de imagem foram renomeados/reformulados: image.subimg()image.copy(), image.blit()image.replace() e image.blend() foi alterado para corresponder às outras operações de duas imagens. Os métodos image.scale() / scaled() / rainbow() foram removidos (rainbow foi movido para o módulo FIR). Atualize as chamadas para os novos nomes.

Commits: b534dc6ff

find_eyes() renomeado para find_eye() (minor)

image.find_eyes() foi renomeado para image.find_eye() e agora retorna uma tupla de 2 elementos da íris (x, y) em vez da tupla de olhos anterior. Renomeie a chamada e atualize o tratamento do retorno.

Commits: 7a01a9bed

image.compress() renomeado para compressed() (minor)

image.compress() (que retornava uma nova imagem JPEG) foi renomeado para image.compressed(); o novo image.compress() em vez disso comprime a imagem in-place e retorna None. image.save() também ganhou um argumento nomeado quality= e agora retorna None em vez de True. Migre img.compress(q) (esperando uma imagem retornada) para img.compressed(quality=q).

Commits: 367e5fdd3

Checklist de migração

Para uma portabilidade limpa para a v1.4.0, o trabalho típico é:

  1. Refaça o código de rastreamento de cor para passar limiares de cor a find_blobs() / find_markers() e iterar a lista plana de tuplas de blob (a reescrita do find_blobs).

  2. Leia os dados de centroide / orientação / pixels das tuplas de blob em vez dos métodos autônomos removidos (os métodos de imagem removidos).

  3. Renomeie subimgcopy, blitreplace, corrija as chamadas de blend() e substitua scale / scaled / rainbow (as renomeações da imlib).

  4. Renomeie find_eyes()find_eye() (a renomeação do find_eye) e compress()compressed() (a renomeação do compress).

Todos os outros scripts rodam sem alterações.