v3.6.1¶
A v3.6.1 é uma versão de grande envergadura. Introduz o módulo imu (LSM6DS3), um conjunto de novas APIs getter do sensor com rotação automática orientada por IMU, correção de perspetiva de 4 pontos rotation_corr(), e traz suporte para o Arduino Portenta H7 com as câmaras HIMAX HM01B0 e OV7690. Várias APIs do sensor / image foram alteradas e o TensorFlow foi removido no M7 — leia as alterações incompatíveis abaixo.
Destaques¶
Módulo
imu— acelerómetro / giroscópio / temperatura / roll / pitch no LSM6DS3 (OpenMV 4 / Portenta).Getters do sensor + rotação automática —
get_pixformat()/get_framesize()/get_hmirror()/get_vflip()/get_windowing(),set_transpose()/set_auto_rotation(), e rotação automática de captura de imagem orientada por IMU.Correção de perspetiva —
rotation_corr()ganha as palavras-chavefovecorners(4 pontos).Novo hardware — Arduino Portenta H7, HIMAX HM01B0 e câmara OV7690.
Incompatível:
set_pixformat()/set_framesize()passam a devolverNone,sensor.set_framerate()foi removida, o TensorFlow foi removido no M7, elens_corr()/linpolar()passam a exigir dimensões pares — consulte as alterações incompatíveis.
Novas funcionalidades¶
imu— novo módulo IMU:imu.acceleration_mg(),imu.angular_rate_mdps(),imu.temperature_c(),imu.roll(),imu.pitch()eimu.sleep()(LSM6DS3 no OpenMV 4 / Portenta).Getters do sensor — adicionados
sensor.get_pixformat(),get_framesize(),get_hmirror(),get_vflip(),get_windowing(),set_transpose()/get_transpose(), eset_auto_rotation()/get_auto_rotation().Rotação automática —
sensor.snapshot()utiliza o IMU para inverter / espelhar / transpor fotogramas quando a rotação automática está ativada.rotation_corr()— adicionadas as palavras-chavefovecorners(perspetiva de 4 pontos), com exemplos de correção de perspetiva.lcd.init()— adicionado o argumento de palavra-chavebgr.collections.deque— ativado na compilação MicroPython.Adicionadas as constantes de identificação
sensor.OV7690esensor.HM01B0e um exemplo de filtro de imagemulabsemelhante ao numpy.
Outras alterações e melhorias¶
Otimizados significativamente os filtros de imagem (mediana / moda / média / …) e
find_circles()e a correção de lente;alloc_extra_fbpode agora alocar qualquer número de bytes; o modelo de deteção de pessoas foi reconstruído com uma nova operação de average-pool.
Correções de erros¶
Câmara e sensores:
Corrigido o
sleep()do OV2640 (passa a usar o registo de standby COM2 em vez do pino de desativação), a configuração do pino FSYNC, as polaridades HSYNC/VSYNC do HM01B0 e o endereço/varrimento I2C, o GPIO de desativação do sensor Portenta e o pino de reinicialização da câmara, e desativada a rotação automática quando o pitch do IMU está próximo de 90°/270°.
Imagem e sistema:
Corrigido um erro de verificação de limites nos filtros de imagem, um hardfault ao desativar a D-cache, arranque em placas sem cartão SD, um erro de
load_to_fbemtf.load(), o stack overflow na deteção de pessoas (stack do H7 aumentada para ≥12 KB), e os offsets do descritor USB para modo de alta velocidade no OpenMV 4 Plus.
Hardware e suporte de placa¶
Arduino Portenta H7 — arranque inicial da placa (configuração de relógio/OSC/HSE STM32H747, cabeçalhos CMSIS, ADC, SDRAM, PID USB Arduino).
HIMAX HM01B0 — novo driver de câmara monocromática (Bayer, relógio por oscilador externo).
OV7690 — novo driver de câmara.
LSM6DS3 IMU — OpenMV 4 / Portenta.
Alterações incompatíveis de API¶
Alterações de API visíveis pelo utilizador entre a v3.6.0 e a v3.6.1. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.
Cada alteração está marcada com o seu impacto:
minor — API restrita; afeta apenas scripts que a utilizavam.
behavior — mesma API, resultados diferentes; re-verifique scripts ajustados.
As alterações estão agrupadas por impacto nessa ordem. Se apenas pretende portar o seu código, salte para a lista de verificação de migração no final. Cada hash de commit liga ao respetivo diff no GitHub.
sensor.set_framerate() removida (minor)¶
O stub sem efeito sensor.set_framerate() foi removido; chamá-lo agora levanta AttributeError. Remova a chamada e controle a temporização dos fotogramas através de framesize/exposure. (Um set_framerate() funcional é re-introduzido na v4.0.2.)
Commits: 705e98f91
TensorFlow removido no OpenMV Cam M7 (minor)¶
O TensorFlow (módulo tf) foi desativado no OpenMV Cam M7 / OpenMV 3 (já não cabe). import tf no M7 falha — utilize uma câmara da classe H7 para TensorFlow. (O tf é re-ativado no F7 na v3.6.3.)
Commits: 2ae875077
set_pixformat() / set_framesize() devolvem None (behavior)¶
sensor.set_pixformat() e sensor.set_framesize() passam a devolver None em vez de True, e um formato de pixel não suportado passa a levantar ValueError em vez de uma asserção. Código que verificava o valor de retorno (por ex. if sensor.set_pixformat(...):) deve deixar de o fazer, e código que apanhava AssertionError para formatos não suportados deve passar a apanhar ValueError.
Commits: f314ac4e7
lens_corr() / linpolar() / logpolar() exigem dimensões pares (behavior)¶
image.lens_corr() e image.linpolar() / image.logpolar() passam agora a exigir largura e altura de imagem pares e levantam um erro em dimensões ímpares. Recorte ou redimensione a imagem para dimensões pares antes de chamar estes métodos.
Lista de verificação de migração¶
Para uma portabilidade limpa para a v3.6.1, o trabalho típico é:
Remover as chamadas a
sensor.set_framerate()(a remoção de set_framerate).Mover as cargas de trabalho TensorFlow para fora do OpenMV Cam M7 (a alteração TensorFlow no M7).
Deixar de depender do valor de retorno de
set_pixformat()/set_framesize()e apanharValueErrorpara formatos de pixel não suportados (a alteração do valor de retorno).Garantir dimensões de imagem pares antes de
lens_corr()/linpolar()/logpolar()(o requisito de dimensões pares).
Todos os outros scripts funcionam sem alterações.