v3.6.1¶
v3.6.1 é um grande lançamento. Ele introduz o módulo imu (LSM6DS3), um conjunto de novas APIs getter de sensor com rotação automática controlada pela IMU, correção de perspectiva de 4 pontos com rotation_corr() e habilita o Arduino Portenta H7 com as câmeras HIMAX HM01B0 e OV7690. Várias APIs de sensor / image mudaram e o TensorFlow foi removido no M7 — leia as mudanças incompatíveis abaixo.
Destaques¶
imu— acelerômetro / giroscópio / temperatura / roll / pitch no LSM6DS3 (OpenMV 4 / Portenta).Getters de sensor + rotação automática —
get_pixformat()/get_framesize()/get_hmirror()/get_vflip()/get_windowing(),set_transpose()/set_auto_rotation()e rotação de snapshot controlada pela IMU.Correção de perspectiva —
rotation_corr()ganha as palavras-chavefovecorners(4 pontos).Novo hardware — Arduino Portenta H7, HIMAX HM01B0 e câmera OV7690.
Incompatível:
set_pixformat()/set_framesize()agora retornamNone,sensor.set_framerate()foi removido, o TensorFlow foi removido no M7 elens_corr()/linpolar()agora exigem dimensões pares — veja as mudanças incompatíveis.
Novos recursos¶
imu— um 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 de 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()usa a IMU para inverter / espelhar / transpor quadros quando a rotação automática está ativada.rotation_corr()— adicionadas as palavras-chavefovecorners(perspectiva de 4 pontos), com exemplos de correção de perspectiva.lcd.init()— adicionado um argumento de palavra-chavebgr.collections.deque— habilitado na build do MicroPython.Adicionadas as constantes de id
sensor.OV7690esensor.HM01B0e um exemplo de filtro de imagem ao estilo numpy comulab.
Outras mudanças e melhorias¶
Filtros de imagem (mediana / moda / média / …),
find_circles()e a correção de lente foram significativamente otimizados;alloc_extra_fbagora pode alocar qualquer número de bytes; o modelo de detecção de pessoas foi reconstruído com uma nova operação de average-pool.
Correções de bugs¶
Câmera e sensores:
Corrigidos o
sleep()do OV2640 (agora usa o registrador de standby COM2 em vez do pino de power-down), a configuração do pino FSYNC, as polaridades HSYNC/VSYNC do HM01B0 e o endereço/varredura I2C, a GPIO de power-down do sensor do Portenta e o pino de reset da câmera, além de desabilitar a rotação automática quando o pitch da IMU está próximo de 90°/270°.
Imagem e sistema:
Corrigidos um bug de verificação de limite no filtro de imagem, um hardfault ao desabilitar a cache D, a inicialização em placas sem cartão SD, um bug de
load_to_fbemtf.load(), o estouro de pilha da detecção de pessoas (pilha do H7 aumentada para ≥12 KB) e os offsets do descritor USB para o modo high-speed no OpenMV 4 Plus.
Hardware e suporte a placas¶
Arduino Portenta H7 — bring-up inicial da placa (configuração de clock/OSC/HSE do STM32H747, cabeçalhos CMSIS, ADC, SDRAM, PID USB do Arduino).
HIMAX HM01B0 — novo driver de câmera monocromática (Bayer, clock por oscilador externo).
OV7690 — novo driver de câmera.
IMU LSM6DS3 — OpenMV 4 / Portenta.
Mudanças incompatíveis de API¶
Quebras de API visíveis ao usuário entre v3.6.0 e v3.6.1. Escopo: C-modules Python em modules/ e bibliotecas Python em scripts/libraries/.
Cada mudança é marcada com seu impacto:
minor — API restrita; afeta apenas scripts que a usavam.
behavior — mesma API, resultados diferentes; reavalie scripts ajustados.
As mudanças estão agrupadas por impacto nessa ordem. Se você só quer portar seu código, vá direto para a lista de verificação de migração no final. Cada hash de commit aponta para o seu diff no GitHub.
sensor.set_framerate() removido (minor)¶
O stub no-op sensor.set_framerate() foi removido; chamá-lo agora gera AttributeError. Remova a chamada e controle o tempo dos quadros via framesize/exposição. (Um set_framerate() funcional é reintroduzido na v4.0.2.)
Commits: 705e98f91
TensorFlow removido na OpenMV Cam M7 (minor)¶
O TensorFlow (o módulo tf) foi desabilitado na OpenMV Cam M7 / OpenMV 3 (ele não cabe mais). import tf no M7 falha — use uma câmera de classe H7 para o TensorFlow. (tf é reabilitado no F7 na v3.6.3.)
Commits: 2ae875077
set_pixformat() / set_framesize() retornam None (behavior)¶
sensor.set_pixformat() e sensor.set_framesize() agora retornam None em vez de True, e um formato de pixel não suportado agora gera um ValueError em vez de uma asserção. Código que verificava o valor de retorno (por exemplo, if sensor.set_pixformat(...):) deve deixar de fazê-lo, e código que capturava AssertionError para formatos não suportados deve capturar ValueError.
Commits: f314ac4e7
lens_corr() / linpolar() / logpolar() exigem dimensões pares (behavior)¶
image.lens_corr() e image.linpolar() / image.logpolar() agora exigem largura e altura pares da imagem e geram um erro com dimensões ímpares. Recorte ou redimensione a imagem para dimensões pares antes de chamar esses métodos.
Lista de verificação de migração¶
Para um port limpo para a v3.6.1, o trabalho típico é:
Remover as chamadas a
sensor.set_framerate()(a remoção do set_framerate).Mover as cargas de trabalho do TensorFlow para fora da OpenMV Cam M7 (a mudança do TensorFlow no M7).
Deixar de depender do valor de retorno de
set_pixformat()/set_framesize()e capturarValueErrorpara formatos de pixel não suportados (a mudança no valor de retorno).Garantir dimensões pares da imagem antes de
lens_corr()/linpolar()/logpolar()(a exigência de dimensões pares).
Todos os outros scripts funcionam sem alterações.