v4.5.3

v4.5.3 é uma grande versão: autofoco do OV5640, desenho de linhas com anti-aliasing, um decodificador JPEG por hardware incorporado ao código principal, grandes ganhos de capacidade para o i.MX RT (RT1060) e um amplo conjunto de correções de câmera/ISP. Vários métodos de imagem raramente usados foram removidos e algumas APIs de ISP/display mudaram — leia as mudanças incompatíveis abaixo.

Destaques

  • Autofoco do OV5640 — habilitado no OpenMV 4 / 4 Plus / RT1060 (sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)), com um exemplo.

  • draw_line() com anti-aliasing e um decodificador JPEG por hardware do STM32 incorporado ao código principal (descompressão JPEG mais rápida).

  • O OpenMV RT1060 ganhou ulab, operações de ISP, set_framerate() / set_frame_callback(), um frame buffer muito maior e o driver CAN.

  • Incompatível: Image.div() / cartoon() / mul() foram removidos e algumas APIs de ISP/display mudaram — veja as mudanças incompatíveis.

Novos recursos

  • Autofoco do OV5640 — o firmware de autofoco está habilitado no OPENMV4, OPENMV4P e OPENMV RT1060; acione-o com sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS). Um novo exemplo 07-Sensor-Control/autofocus.py foi adicionado.

  • Desenho de linhas com anti-aliasingdraw_line() ganhou anti-aliasing.

  • Controladores de display SPI personalizadosSPIDisplay agora aceita uma palavra-chave controller= e expõe um hook bus_write para sequências de inicialização/comando personalizadas.

  • Atualização do Image.ccm() — agora aceita matrizes aninhadas 3x3 / 4x3 / 3x4 / 4x4 e arrays do ulab (com uma linha opcional de offset por canal); foi adicionado um exemplo de correção de cor.

  • Captura JPEG no i.MX RT — captura sensor.JPEG no Arduino Portenta/Nicla Vision/Giga, além de set_framerate() e set_frame_callback() na porta mimxrt.

  • Validação de modelo TFLite — os modelos agora carregam um hash da ordem dos operadores e o tamanho do conjunto de operadores.

  • WiFi — adicionadas constantes de modo de segurança do CYW43; novos scripts de exemplo de controle de placa para o i.MX RT (Pin/ADC/CAN/I2C/PWM/SPI/UART/…).

Outras mudanças e melhorias

  • MicroPython atualizado para 1.22; CMSIS atualizado para 5.9.0.

  • Decodificador JPEG por hardware do STM32 incorporado ao código principal — descompressão JPEG mais rápida no codec on-chip.

  • Otimizados Image.invert() / negate() e as operações binárias/matemáticas de imagem (intrínsecos do CMSIS).

  • As bibliotecas rpc e vl53l1x foram tornadas portáveis (usam machine / time em vez de pyb), então rodam em portas não-STM32.

  • memcpy de frame buffer acelerado por DMA no OpenMV H7 / H7 Plus / Pro / Pure Thermal e no Arduino Giga / Nicla Vision / Portenta H7; o STM32 agora varre os dispositivos I2C uma vez por varredura para inicialização mais rápida.

Correções de bugs

Câmera e sensores:

  • Corrigido o XCLK da câmera do STM32 para um ciclo de trabalho real de 50% e um bug quando a frequência do clock da câmera é definida como zero; corrigidos crop+transpose de Bayer, desvio de cor YUV422 e set_windowing() na porta mimxrt.

  • Corrigida a sondagem do chip-ID do GC2145 e hmirror/vflip em montagens rotacionadas; corrigido o PAJ6100 no RT1062 e um estouro de buffer SPI do PixArt PAJ7620/PAW3902.

Processamento de imagem:

  • Corrigidos o recorte de roi em find_rects(), o truncamento de offset fracionário em morph(), os padrões de contraste/brilho em image.gamma(), os offsets A/B de get_threshold() em RGB565 e a decodificação JPEG de dimensões que não são múltiplas de 8.

Sistema e bibliotecas:

  • machine.LED.value() sem argumento agora retorna o estado do LED em vez de limpá-lo; corrigidos o deinit do SPI SSEL em um barramento compartilhado, machine.deepsleep() no RT1062, um travamento do TF em operadores ausentes e a auto-ativação da NIC WINC1500/ninaw10 em connect().

Hardware e suporte a placas

  • OpenMV RT1060 — ulab e operações de ISP habilitados, frame buffer maior (10M→20M) / fb_alloc (2M→11M), driver CAN restaurado, mais heap.

  • Arduino GIGA — suporte à câmera GC2145, com detecção automática de GC2145/OV5640 (eles compartilham um endereço I2C).

  • i.MX RT — suporte à captura sensor.JPEG.

Mudanças incompatíveis na API

Quebras de API visíveis ao usuário entre v4.5.2 e v4.5.3. Escopo: módulos C de 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; reverifique os scripts ajustados.

As mudanças sã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 leva ao seu diff no GitHub.

Métodos de imagem removidos (minor)

Image.div(), Image.cartoon() (e seu exemplo) e Image.mul() foram removidos.

Commits: 7c932602e, 055a468b8, 4fe7fb63b

API do módulo de display (minor)

O fallback legado para o nome de módulo udisplay foi removido — o módulo é registrado apenas como display. Os métodos dsi_write() / dsi_read() exclusivos do DSI foram substituídos por bus_write() / bus_read(), que agora estão disponíveis em todos os controladores de display.

Commits: 7df6694c3, 7d1f378a0

Mudanças nas APIs de MQTT e tf.regression (minor)

O MQTTClient da biblioteca mqtt foi reformulado: port agora é obrigatório, foram adicionadas as novas palavras-chave de construtor ssl_params / callback e um argumento timeout em connect(), os antigos padrões ssl= / port=0 foram removidos e check_msg() agora é não-bloqueante. tf.regression() foi reescrito — sua assinatura agora é regression(model, array) e ele lida com modelos 1D/2D/3D e quantizados (int8).

Commits: d12874c63, c5ec576c1

Mudanças de comportamento de ISP / sensor (behavior)

Image.awb() foi reformulado — gray-world (padrão) vs. white-patch (max=True) agora é explícito, e o argumento max mais os argumentos gamma / contrast / brightness de Image.gamma() agora são somente por palavra-chave (chamadas posicionais precisam ser atualizadas). A transposição de imagem agora está desabilitada para YUV422 (ela anteriormente produzia saída incorreta) e o desvio de cor YUV422 foi corrigido para corresponder ao Bayer. O caminho JPEG do STM32 agora gera um erro em caso de incompatibilidade de geometria JPEG em vez de produzir uma imagem corrompida, e o modo AP do WiFi agora aplica um modo de segurança padrão nas portas STM32 e i.MX RT.

Commits: 36d5cecbd, 00500ccde, c1eeaefd6, 333fb2b5f, 55cab8733, c7d40f6af

Lista de verificação de migração

Para uma portabilidade limpa para a v4.5.3, o trabalho típico é:

  1. Pare de usar Image.div() / cartoon() / mul() (os métodos removidos).

  2. Importe o módulo de display como display e troque dsi_write/ dsi_read por bus_write/bus_read (a mudança na API de display).

  3. Atualize a construção do MQTTClient (port é obrigatório; ssl_params/callback) e quaisquer chamadas tf.regression() (as mudanças nas APIs de biblioteca).

  4. Passe o max de awb() e o gamma/contrast/ brightness de gamma() como argumentos por palavra-chave, e reverifique as suposições de YUV422/transposição e de segurança do modo AP (as mudanças de ISP/sensor).