v2.8.0

A versão v2.8.0 é uma atualização de grande envergadura. Introduz a OpenMV Cam H7 (STM32H7) com um codificador JPEG por hardware e ADC/DAC do H7, uma revisão profunda da API image (espessura de desenho/preenchimentos, operações matemáticas/binárias, muitos novos filtros, limiarização de Otsu), suporte a threads no MicroPython, e o módulo de versão omv. A ordem de análise de argumentos em Python foi fixada e image.mask_ellipse() foi removido — consulte as alterações que quebram compatibilidade abaixo.

Destaques

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

  • Revisão da 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.

  • Threads — suporte ao módulo _thread do MicroPython.

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

  • Alteração que quebra compatibilidade: a ordem dos argumentos posicionais em Python é agora estrita e image.mask_ellipse() foi removido — consulte as alterações que quebram compatibilidade.

Novas funcionalidades

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

  • Desenho — adicionada espessura thickness de linha, fill de formas (retângulo / círculo), scale / kerning de texto, palavra-chave mono_space em draw_string(), image.draw_arrow(), e image.draw_image() (desenho de sprites / 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 aceitam agora um valor escalar/cor aplicado a todos os pixels.

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

  • Filtros — adicionados cartoon, flood_fill, bilateral, laplacian, 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 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).

  • Threads — ativado o módulo _thread do MicroPython.

  • Módulo omv — adicionada informação de versão (version_string, arch, board_type, board_id); ativado 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 alterações e melhorias

  • O relógio externo do sensor H7 foi reduzido para 48 MHz (melhor qualidade de imagem, FPS mais baixo); a qualidade JPEG baixa/alta é agora configurável por placa (e ajustada para o H7); adicionado controlo de funcionalidades por placa via imlib_config.h (todas as funções de imagem permanecem ativadas no firmware padrão); atualizado o MicroPython incluído.

Correções de erros

Processamento de imagem:

  • Corrigidos image.save() sem extensão de ficheiro, o mapeamento gain_db / gain_db_ceiling para OV2640 / OV7725 / OV9650 / MT9V034, ganho excessivo em sharpen(), ruído morfológico nas arestas, uma divisão por zero numa operação de imagem, e uma falha por stack-smash com um tamanho de kernel de filtro demasiado grande (agora produz um erro limpo).

Sistema:

  • Protegido o buffer USB VCP com uma secção atómica (corrupção série, #313), corrigida a conetividade USB no Windows, a montagem do sistema de ficheiros flash interno quando o cartão SD falha, o valor PLLP de set_frequency() do cpufreq, e um erro de gravação de firmware no bootloader.

Hardware e suporte a placas

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

  • Módulo machine — ativado o barramento I2C4.

Alterações que quebram compatibilidade na API

Alterações visíveis pelo utilizador na API entre v2.7.0 e v2.8.0. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.

Ambas as alterações que quebram compatibilidade são menores e afetam apenas scripts que utilizavam a funcionalidade em causa. Cada hash de commit tem uma ligação para o seu diff no GitHub.

A ordem dos argumentos posicionais em Python é agora estrita (menor)

A análise de argumentos nos módulos C Python (image / sensor / fir / gif / lcd / mjpeg) lê agora 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() passando a aceitar thickness / fill / scale / size), o código que passava parâmetros fora de ordem posicionalmente — ou passava um color posicional após um dos novos argumentos — deve usar argumentos por palavra-chave ou a ordem posicional documentada.

Commits: e0e112468, fc74e70c3

image.mask_ellipse() removido (menor)

image.mask_ellipse() foi removido. Os scripts que o invocavam devem eliminar essa chamada ou utilizar uma ROI explícita / imagem de máscara em alternativa.

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 alteração da ordem de argumentos), e remova as chamadas a image.mask_ellipse() (a remoção de mask_ellipse). Todos os outros scripts funcionam sem alterações.