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áticaget_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 perspectivarotation_corr() ganha as palavras-chave fov e corners (4 pontos).

  • Novo hardware — Arduino Portenta H7, HIMAX HM01B0 e câmera OV7690.

  • Incompatível: set_pixformat() / set_framesize() agora retornam None, sensor.set_framerate() foi removido, o TensorFlow foi removido no M7 e lens_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() e imu.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() e set_auto_rotation() / get_auto_rotation().

  • Rotação automáticasensor.snapshot() usa a IMU para inverter / espelhar / transpor quadros quando a rotação automática está ativada.

  • rotation_corr() — adicionadas as palavras-chave fov e corners (perspectiva de 4 pontos), com exemplos de correção de perspectiva.

  • lcd.init() — adicionado um argumento de palavra-chave bgr.

  • collections.deque — habilitado na build do MicroPython.

  • Adicionadas as constantes de id sensor.OV7690 e sensor.HM01B0 e um exemplo de filtro de imagem ao estilo numpy com ulab.

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_fb agora 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_fb em tf.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.

Commits: b36460a36, 2b26ca17b

Lista de verificação de migração

Para um port limpo para a v3.6.1, o trabalho típico é:

  1. Remover as chamadas a sensor.set_framerate() (a remoção do set_framerate).

  2. Mover as cargas de trabalho do TensorFlow para fora da OpenMV Cam M7 (a mudança do TensorFlow no M7).

  3. Deixar de depender do valor de retorno de set_pixformat() / set_framesize() e capturar ValueError para formatos de pixel não suportados (a mudança no valor de retorno).

  4. 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.