v3.0.0

A versão v3.0.0 é a atualização principal v2 → v3. Introduz a OpenMV Cam M7 (STM32F7) e o novo módulo de rede neuronal nn CMSIS-NN (substituindo os antigos métodos fixos find_number() / classify_object()), adiciona suporte aos sensores MT9V034 de obturador global e FLIR Lepton, os framesizes sensor.WVGA, e atualiza o núcleo para MicroPython 1.9.4. Vários comportamentos de image / sensor / WiFi foram alterados — consulte as alterações que quebram compatibilidade abaixo.

Destaques

  • OpenMV Cam M7 — nova placa STM32F7.

  • Módulo nn — inferência CMSIS-NN: nn.load(), Net.forward(), Net.search(), com um conversor de modelos e exemplos.

  • Novos sensores — MT9V034 de obturador global (acionado por FSIN) e FLIR Lepton.

  • Atualização do núcleo MicroPython 1.9.4.

  • Alteração que quebra compatibilidade: os métodos fixos image.find_number() / image.classify_object() foram removidos, sensor.sleep() passa agora a levantar exceção, os sockets WINC devolvem contagens reais de bytes, image.binary() devolve uma nova imagem, e find_apriltags() está limitado a 64K pixels — consulte as alterações que quebram compatibilidade.

Novas funcionalidades

  • nn — novo módulo de rede neuronal CMSIS-NN: nn.load(path), Net.forward(img, roi=, softmax=, dry_run=) (devolve floats entre 0.0 e 1.0), Net.search() para deteção multi-escala/posição, e Net.test(), mais um conversor de modelos CMSIS-NN (nn_convert.py / nn_quantizer.py), modelos CIFAR-10 / LeNet / smile incluídos, e scripts de exemplo NN / NN-search.

  • Sensores — suporte ao MT9V034 de obturador global (captura acionada por FSIN) na OpenMV 4, um driver FLIR Lepton atualizado com captura Lepton, e os novos framesizes sensor.WVGA (720x480) / sensor.WVGA2 (752x480).

  • Processamento de imagemimage.find_circles() ganhou as palavras-chave r_min / r_max / r_step (Hough mais rápido), find_keypoints() e o Haar find_features() aceitam agora imagens RGB, e image.compress() / codificação JPEG suporta agora imagens binárias (bitmap).

  • Arranqueboot.py é agora executado antes da inicialização USB para que possa substituir o modo USB (por ex. HID).

  • Exemplos — adicionados exemplos de AprilTag em pequena/alta resolução, um exemplo I2C LIDAR-Lite V3, e ferramentas de conjunto de dados (augment_images.py / make_patches.py).

Outras alterações e melhorias

  • Atualizado o MicroPython incluído para 1.9.4 (com uma reversão de pyexec parse/compile/exec e correção do PendSV); mensagens de erro fb_alloc / xalloc de memória esgotada mais claras; suprimida saída nn printf durante o carregamento de redes; repositório reorganizado (exemplos → scripts/, ferramentas → tools/, cascatas Haar → ml/). O módulo nn não está disponível na OpenMV 2 (flash insuficiente).

Correções de erros

Processamento de imagem:

  • Corrigidos fast_atan2f para x≤0 (anteriormente sempre 0 — verifique novamente os ângulos de mancha / linha / ponto-chave), o tratamento de memória de find_apriltags() (conteúdo descartado e um realloc incorreto em OOM), ponteiros de linha por bpp para imagens binárias/bitmap (resultados binários corrompidos), find_edges(EDGE_CANNY) com uma ROI, a macro TO_GS_PIXEL (integral / morph), transmissão bitmap/JPEG para fotogramas em escala de cinzentos (bpp==0), o pop_front da lista de pontos-chave/manchas, e os resultados de match_descriptor.

Sistema e câmara:

  • Corrigidos os números de interface/endpoint USB HID, a alteração dinâmica da frequência XCLK em tempo de execução, Net.forward() a devolver o número correto de saídas, e uma falha grave ao interromper a análise de scripts.

Hardware e suporte a placas

  • OpenMV Cam M7 (STM32F7) — nova placa.

  • Sensor de obturador global MT9V034 (OpenMV 4, acionado por FSIN).

  • FLIR Lepton — driver atualizado com suporte a captura.

Alterações que quebram compatibilidade na API

Alterações visíveis pelo utilizador na API entre v2.9.0 e v3.0.0. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.

Cada alteração está marcada com o seu impacto:

  • maior — afeta a maioria dos scripts que utilizavam a funcionalidade; será necessário portar código.

  • menor — API restrita; afeta apenas scripts que a utilizavam.

  • comportamento — mesma API, resultados diferentes; verifique novamente os scripts ajustados.

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

image.find_number() / image.classify_object() removidos (maior)

Os métodos fixos image.find_number() (LeNet) e image.classify_object() (CMSIS CNN) foram removidos em favor do novo módulo nn. Substitua-os por net = nn.load('/model.network'); out = net.forward(img).

Commits: d151f7e38

sensor.sleep() / sensor.reset() levantam exceção em caso de falha (menor)

sensor.sleep() e sensor.reset() levantam agora uma exceção em caso de falha em vez de devolverem True / False. O código que verificava o valor booleano devolvido por sensor.sleep() deve envolver a chamada em try / except.

Commits: 7d16d008f

Os sockets WINC devolvem a contagem real de bytes (comportamento)

Os métodos send / recv / sendto / recvfrom dos sockets WINC1500 devolviam anteriormente sempre 0; passam agora a devolver o número real de bytes transferidos. O código que assumia uma devolução de 0 (ou que iterava/bloqueava com base nela) deve tratar as contagens reais.

Commits: a07fb2f60

image.binary() devolve uma nova imagem (comportamento)

image.binary() ganhou as palavras-chave to_bitmap / copy e passa agora a devolver um novo objeto de imagem em vez de devolver/modificar a imagem de origem no local. O código que dependia de binary() modificar a imagem original deve usar o objeto devolvido (e passar copy=True para comportamento não-in-place).

Commits: 8a44f0cd9

find_apriltags() limitado a 64K pixels (comportamento)

image.find_apriltags() levanta agora uma exceção se a imagem (ou ROI) exceder 64K pixels e devolve uma lista vazia para imagens menores que 4x4. Reduza a escala de imagens grandes (use um framesize menor ou passe uma roi explícita) antes de chamar find_apriltags().

Commits: bd77afbc0

Lista de verificação de migração

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

  1. Substitua image.find_number() / image.classify_object() pelo módulo nn (a migração para nn).

  2. Envolva sensor.sleep() / sensor.reset() em try / except em vez de verificar um valor booleano devolvido (a alteração de sensor.sleep).

  3. Trate as contagens reais de bytes dos sockets WINC send / recv (a alteração dos sockets WINC).

  4. Use a imagem devolvida por image.binary() em vez de esperar uma modificação no local (a alteração de binary).

  5. Reduza a escala das imagens antes de find_apriltags() para ficar abaixo de 64K pixels (o limite de find_apriltags).

Todos os outros scripts funcionam sem alterações.