v2.5.0

A v2.5.0 é uma release de imagem rica em recursos: ela adiciona find_rects(), find_circles(), get_regression() (ajuste de linha/regressão), find_number() (dígitos LeNet), as classes de stream ImageWriter / ImageReader, sensor.flush() / width() / height() e suporte a pyb.RTC. O carregamento de imagens agora é baseado em framebuffer — leia as mudanças incompatíveis abaixo.

Destaques

  • image.find_rects() — detector de retângulos / quadriláteros com saída de cantos.

  • image.find_circles() — detecção de círculos por Hough.

  • image.get_regression() — ajuste de linha por mínimos quadrados e robusto (Theil-Sen).

  • image.find_number() — reconhecimento de dígitos LeNet.

  • ImageWriter / ImageReader — grava e reproduz streams de imagem.

  • Suporte a pyb.RTC, além de sensor.flush() / sensor.width() / sensor.height().

  • Incompatível: o carregamento de imagens agora é baseado em framebuffer e gera erro se a imagem for grande demais — veja as mudanças incompatíveis.

Novos recursos

  • Detecção de características — adicionados image.find_rects() (detector de quadriláteros AprilTag; objetos rect com x / y / w / h / corners / magnitude), image.find_circles() (Hough), image.get_regression() (ajuste de linha por mínimos quadrados + Theil-Sen robusto) e image.find_number() (reconhecimento de dígitos LeNet), cada um com scripts de exemplo.

  • Cantos dos resultados — adicionado um atributo corners aos objetos de resultado de QR code / AprilTag / data matrix / código de barras.

  • Streams de imagem — adicionadas as classes image.ImageWriter / image.ImageReader (formato de chunks alinhado em 16 bytes) com os exemplos image_writer.py / image_reader.py.

  • Sensor — adicionados sensor.flush() (envia o framebuffer ao IDE sem um snapshot) e sensor.width() / sensor.height().

  • pyb.RTC — habilitado o suporte a RTC com um exemplo rtc.py.

  • Adicionados uma cascata Haar de rosto de gato e um exemplo de Servo-Shield (PCA9685); a ferramenta de host openmv-cascade.py ganhou suporte ao novo formato de cascata XML do OpenCV.

Outras mudanças e melhorias

  • O framebuffer foi refatorado para que os métodos de imagem copy_to_fb atualizem o preview do IDE; os caminhos do HaarCascade() não exigem mais uma / inicial (cascata interna vs. arquivo é detectado automaticamente); a gravação GIF/MJPEG agora suporta VGA (e GIFs BAYER); o README.txt interno foi atualizado e o arquivo de driver openmv.inf não é mais criado em um sistema de arquivos novo.

Correções de bugs

Imagem:

  • Corrigidos a acumulação de votos do find_circles(), o offset de rho do get_regression() com uma ROI e um vazamento de memória, a mesclagem de segmentos do find_lines(), a média de ângulos do find_blobs() e os limites de cor padrão (menos restritivos), a estabilidade da ordenação de pontos-chave do ORB / ordenação de descritores e a flag de correspondência, e o carregamento em buffer da cascata Haar (leituras desalinhadas).

Sistema:

  • Habilitado o Servo 3 (P9) do pyb (#256), corrigido o init do RTC, aumentado o timeout de caractere da UART (#240) e corrigida a flag “enabled” não inicializada do framebuffer do sensor.

Suporte de hardware e placas

  • Suporte a pyb.RTC e Servo 3 (P9) do pyb; exemplo de Servo-Shield (PCA9685).

Mudanças incompatíveis na API

Quebras de API visíveis ao usuário entre a v2.4.1 e a v2.5.0. Escopo: módulos C do Python em modules/ e bibliotecas Python em scripts/libraries/.

A mudança incompatível é uma mudança de behavior (mesma API, resultado diferente) — revalide os scripts afetados. Cada hash de commit aponta para seu diff no GitHub.

O carregamento de imagens é baseado em framebuffer (behavior)

image.Image / o carregamento de imagens agora copia a imagem carregada para o framebuffer principal e gera uma exceção se a imagem for grande demais para caber. Carregamentos que antes eram bem-sucedidos em um buffer da heap podem agora falhar — garanta que as imagens carregadas caibam no framebuffer (ou trate o novo erro).

Commits: 87d53385a

Lista de verificação de migração

Garanta que as imagens carregadas caibam no framebuffer (ou capture o novo erro “image too large”) onde você antes dependia de carregamentos de imagem baseados na heap (a mudança no carregamento de imagens). Todos os outros scripts rodam sem alterações.