v4.5.3

v4.5.3 é uma versão de grande envergadura: autofocos OV5640, desenho de linhas com anti-aliasing, um descodificador JPEG por hardware integrado na linha principal, grandes ganhos de capacidade no i.MX RT (RT1060) e um conjunto alargado de correções de câmara/ISP. Vários métodos de imagem pouco utilizados foram removidos e algumas APIs de ISP/ecrã foram alteradas — consulte as alterações de rutura abaixo.

Destaques

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

  • draw_line() com anti-aliasing e um descodificador JPEG por hardware STM32 integrado na linha principal (descompressão JPEG mais rápida).

  • OpenMV RT1060 passou a incluir ulab, operações ISP, set_framerate() / set_frame_callback(), um buffer de fotograma muito maior, e o controlador CAN.

  • Rutura: Image.div() / cartoon() / mul() foram removidos e algumas APIs de ISP/ecrã foram alteradas — consulte as alterações de rutura.

Novas funcionalidades

  • Autofoco OV5640 — o firmware de autofoco está ativado no OPENMV4, OPENMV4P e OPENMV RT1060; ative-o com sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS). Foi adicionado um novo exemplo 07-Sensor-Control/autofocus.py.

  • Desenho de linhas com anti-aliasingdraw_line() passou a suportar anti-aliasing.

  • Controladores de ecrã SPI personalizadosSPIDisplay aceita agora um argumento controller= e expõe um gancho bus_write para sequências de inicialização/comando personalizadas.

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

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

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

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

Outras alterações e melhorias

  • MicroPython atualizado para 1.22; CMSIS atualizado para 5.9.0.

  • Descodificador JPEG por hardware STM32 integrado na linha principal — descompressão JPEG mais rápida no codec integrado.

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

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

  • Memcpy do buffer de fotograma acelerado por DMA no OpenMV H7 / H7 Plus / Pro / Pure Thermal e Arduino Giga / Nicla Vision / Portenta H7; o STM32 passa agora a sondar dispositivos I2C uma vez por varrimento para arranque mais rápido.

Correções de erros

Câmara e sensores:

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

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

Processamento de imagem:

  • Corrigido o recorte roi de find_rects(), o truncamento fracionário de deslocamento em morph(), os valores predefinidos de contraste/brilho em image.gamma(), os deslocamentos A/B em get_threshold() no RGB565 e a descodificação JPEG de dimensões que não são múltiplo de 8.

Sistema e bibliotecas:

  • machine.LED.value() sem argumento devolve agora o estado do LED em vez de o limpar; corrigidos a desinicialização do SSEL SPI num barramento partilhado, machine.deepsleep() no RT1062, uma falha no TF com operadores em falta e a ativação automática da NIC WINC1500/ninaw10 em connect().

Hardware e suporte de placas

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

  • Arduino GIGA — suporte de câmara GC2145, com deteção automática GC2145/OV5640 (partilham um endereço I2C).

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

Alterações de rutura na API

Ruturas de API visíveis pelo utilizador entre v4.5.2 e v4.5.3. Â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; reverificar scripts ajustados.

As alterações estão agrupadas por impacto nessa ordem. Se apenas pretender portar o seu código, avance para a lista de verificação de migração no final. Cada hash de commit liga ao respetivo diff no GitHub.

Métodos de imagem removidos (minor)

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

Commits: 7c932602e, 055a468b8, 4fe7fb63b

API do módulo de ecrã (minor)

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

Commits: 7df6694c3, 7d1f378a0

Alterações de API MQTT e tf.regression (minor)

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

Commits: d12874c63, c5ec576c1

Alterações de comportamento ISP / sensor (behavior)

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

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

Lista de verificação de migração

Para uma migração limpa para v4.5.3, o trabalho típico é:

  1. Deixar de utilizar Image.div() / cartoon() / mul() (os métodos removidos).

  2. Importar o módulo de ecrã como display e mudar dsi_write/ dsi_read para bus_write/bus_read (a alteração da API de ecrã).

  3. Atualizar a construção de MQTTClient (port é obrigatório; ssl_params/callback) e quaisquer chamadas a tf.regression() (as alterações de API de bibliotecas).

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