v2.8.0

A v2.8.0 é uma versão enorme. Ela coloca em funcionamento a OpenMV Cam H7 (STM32H7) com um codificador JPEG por hardware e ADC/DAC do H7, uma enorme reformulação da API do image (espessura/preenchimento de desenho, operações matemáticas/binárias, muitos novos filtros, limiarização de Otsu), threading do MicroPython e o módulo de versão omv. A ordem de parsing de argumentos do Python foi fixada e image.mask_ellipse() foi removido — leia as mudanças incompatíveis abaixo.

Destaques

  • OpenMV Cam H7 — nova placa STM32H7 com um codificador JPEG por hardware e ADC / DAC do H7.

  • Reformulação do image — espessura de linha, preenchimento de formas, draw_arrow() / draw_image(), operações matemáticas/binárias completas e muitos novos filtros.

  • Limiarização de Otsuhistogram.get_threshold() e um objeto Threshold.

  • Threading — suporte ao _thread do MicroPython.

  • Módulo omv — informações de versão / placa.

  • Incompatível: a ordem de argumentos posicionais do Python agora é estrita e image.mask_ellipse() foi removido — veja as mudanças incompatíveis.

Novos recursos

  • OpenMV Cam H7 — suporte à placa STM32H7 com um codificador JPEG por hardware, ADC do H7 e DAC do H7.

  • Desenho — adicionados thickness de linha, fill de formas (retângulo / círculo), scale / kerning de texto, uma palavra-chave mono_space em draw_string(), image.draw_arrow() e image.draw_image() (desenho de sprite / máscara).

  • Operações matemáticas — adicionados add(), sub(), mul(), div(), min(), max(), difference(), blend(), replace() (com hmirror / vflip / mask) e remove_shadows(); as operações básicas agora aceitam um valor escalar/de cor aplicado a todos os pixels.

  • Binário / morfologia — um novo tipo de imagem binária e binary(); as operações de linha e erode() / dilate() aceitam máscaras; adicionados open() / close() / top_hat() / black_hat().

  • Filtros — adicionados cartoon, flood_fill, bilateral, laplacian, os aliases blur / gaussian_blur e equalização adaptativa de histograma (histeq(adaptive=, clip_limit=, mask=)).

  • Estatísticasget_statistics() / get_histogram() aceitam uma lista de limiares de cor e invert; adicionados a limiarização de Otsu histogram.get_threshold() e um objeto Threshold.

  • CMSIS CNN — adicionado image.classify_object() com um exemplo cnn.py (substituído pelo módulo nn na v3.0.0).

  • Threading — habilitado o módulo _thread do MicroPython.

  • Módulo omv — adicionadas informações de versão (version_string, arch, board_type, board_id); habilitados o barramento I2C4 do machine e funções matemáticas especiais (erf, gamma, …); adicionados exemplos de motor-shield e muitos novos scripts de exemplo.

Outras mudanças e melhorias

  • O clock externo do sensor no H7 foi reduzido para 48 MHz (melhor qualidade de imagem, menor FPS); a qualidade JPEG baixa/alta agora é configurável por placa (e ajustada para o H7); adicionado gating de recursos por placa via imlib_config.h (todas as funções de imagem permanecem habilitadas no firmware de fábrica); atualizado o MicroPython incluído.

Correções de bugs

Imagem:

  • Corrigiu image.save() sem extensão de arquivo, o mapeamento de gain_db / gain_db_ceiling para o OV2640 / OV7725 / OV9650 / MT9V034, ganho excessivo em sharpen(), ruído de borda morfológico, uma divisão por zero em uma operação de imagem e um crash por stack-smash em um tamanho de kernel de filtro grande demais (agora um erro limpo).

Sistema:

  • Protegeu o buffer VCP do USB com uma seção atômica (corrupção serial, #313), corrigiu a conectividade USB no Windows, a montagem do sistema de arquivos do flash interno caso o cartão SD falhe, o valor PLLP do set_frequency() do cpufreq e um bug de gravação de firmware do bootloader.

Hardware e suporte a placas

  • OpenMV Cam H7 (STM32H7) — nova placa com um codificador JPEG por hardware e ADC / DAC do H7.

  • machine — habilitado o barramento I2C4.

Mudanças incompatíveis de API

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

Ambas as mudanças incompatíveis são minor e afetam apenas scripts que usavam o recurso relevante. Cada hash de commit aponta para seu diff no GitHub.

A ordem de argumentos posicionais do Python agora é estrita (minor)

O parsing de argumentos nos módulos C de Python (image / sensor / fir / gif / lcd / mjpeg) agora lê os argumentos posicionais antes das palavras-chave e fixa a ordem posicional. Combinado com os novos argumentos por palavra-chave nos métodos de desenho (draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() ganhando thickness / fill / scale / size), o código que passava parâmetros fora de ordem posicionalmente — ou que passava uma color posicional depois de um dos novos argumentos — deve usar argumentos por palavra-chave ou a ordem posicional documentada.

Commits: e0e112468, fc74e70c3

image.mask_ellipse() removido (minor)

image.mask_ellipse() foi removido. Scripts que o chamavam devem remover a chamada ou usar uma ROI / imagem de máscara explícita em vez disso.

Commits: d7159fba3

Lista de verificação de migração

Passe os argumentos por palavra-chave (ou na ordem posicional documentada), especialmente color nos métodos de desenho (a mudança de ordem de argumentos), e remova as chamadas de image.mask_ellipse() (a remoção de mask_ellipse). Todos os outros scripts rodam sem alterações.