v3.0.0¶
A v3.0.0 é a grande versão v2 → v3. Ela introduz a OpenMV Cam M7 (STM32F7) e o novo módulo de rede neural CMSIS-NN nn (substituindo os antigos métodos fixos find_number() / classify_object()), adiciona o suporte aos sensores de obturador global MT9V034 e FLIR Lepton, os framesizes sensor.WVGA e atualiza o núcleo para o MicroPython 1.9.4. Vários comportamentos de image / sensor / WiFi mudaram — leia as mudanças incompatíveis 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 para o MicroPython 1.9.4.
Incompatível: os métodos fixos
image.find_number()/image.classify_object()foram removidos,sensor.sleep()agora lança uma exceção, os sockets do WINC retornam contagens reais de bytes,image.binary()retorna uma nova imagem efind_apriltags()é limitado a 64K pixels — veja as mudanças incompatíveis.
Novos recursos¶
nn— um novo módulo de rede neural CMSIS-NN:nn.load(path),Net.forward(img, roi=, softmax=, dry_run=)(retorna floats de 0.0 a 1.0),Net.search()para detecção em múltiplas escalas/posições eNet.test(), além de um conversor de modelos CMSIS-NN (nn_convert.py/nn_quantizer.py), modelos CIFAR-10 / LeNet / smile inclusos e scripts de exemplo de NN / NN-search.Sensores — suporte ao MT9V034 de obturador global (snapshot acionado por FSIN) na OpenMV 4, um driver FLIR Lepton atualizado com snapshot do Lepton e os novos framesizes
sensor.WVGA(720x480) /sensor.WVGA2(752x480).Processamento de imagem —
image.find_circles()ganhou as palavras-chaver_min/r_max/r_step(Hough mais rápido),find_keypoints()e ofind_features()Haar agora aceitam imagens RGB, eimage.compress()/ a codificação JPEG agora suporta imagens binárias (bitmap).Boot —
boot.pyagora roda antes da inicialização do USB para que possa sobrescrever o modo USB (por exemplo, HID).Exemplos — adicionados exemplos de AprilTag pequenos/de alta resolução, um exemplo de I2C LIDAR-Lite V3 e ferramentas para conjuntos de dados (
augment_images.py/make_patches.py).
Outras mudanças e melhorias¶
Atualizou o MicroPython incluso para a 1.9.4 (com uma reversão de parse/compile/exec do pyexec e uma correção de PendSV); mensagens de erro de falta de memória mais claras para
fb_alloc/xalloc; suprimiu o ruído de printf donndurante o carregamento da rede; reorganizou o repositório (exemplos →scripts/, ferramentas →tools/, cascatas Haar →ml/). O módulonnnão está disponível na OpenMV 2 (flash insuficiente).
Correções de bugs¶
Processamento de imagem:
Corrigidos
fast_atan2fpara x≤0 (antes sempre 0 — reverifique os ângulos de blob / linha / keypoint), o gerenciamento de memória defind_apriltags()(conteúdo descartado e um realloc incorreto em caso de OOM), os ponteiros de linha por bpp de binário/bitmap (resultados binários corrompidos),find_edges(EDGE_CANNY)com uma ROI, a macroTO_GS_PIXEL(integral / morph), o streaming de bitmap/JPEG para quadros em escala de cinza (bpp==0), opop_frontda lista de keypoints/blobs e os resultados dematch_descriptor.
Sistema e câmera:
Corrigidos os números de interface/endpoint do USB HID, a alteração dinâmica da frequência do XCLK em tempo de execução, o retorno do número correto de saídas por
Net.forward()e um hardfault ao interromper o parsing do script.
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 snapshot.
Mudanças incompatíveis na API¶
Quebras de API visíveis ao usuário entre a v2.9.0 e a v3.0.0. Escopo: módulos C do Python em modules/ e bibliotecas Python em scripts/libraries/.
Cada mudança é marcada com o seu impacto:
major — afeta a maioria dos scripts que usavam o recurso; você precisará adaptar o código.
minor — API restrita; afeta apenas os scripts que a usavam.
behavior — mesma API, resultados diferentes; reverifique os scripts ajustados.
As mudanças estão agrupadas por impacto nessa ordem. Se você só quer adaptar o seu código, pule para a lista de verificação para migração no final. Cada hash de commit tem um link para o seu diff no GitHub.
image.find_number() / image.classify_object() removidos (major)¶
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() lançam exceção em caso de falha (minor)¶
sensor.sleep() e sensor.reset() agora lançam uma exceção em caso de falha em vez de retornar True / False. O código que verificava o retorno booleano de sensor.sleep() deve, em vez disso, envolver a chamada em try / except.
Commits: 7d16d008f
Os sockets do WINC retornam a contagem real de bytes (behavior)¶
Os métodos send / recv / sendto / recvfrom do socket do WINC1500 antes sempre retornavam 0; agora eles retornam o número real de bytes transferidos. O código que assumia um retorno 0 (ou que entrava em laço/bloqueava com base nele) deve tratar as contagens reais.
Commits: a07fb2f60
image.binary() retorna uma nova imagem (behavior)¶
image.binary() ganhou as palavras-chave to_bitmap / copy e agora retorna um novo objeto de imagem em vez de retornar/modificar a imagem de origem no local. O código que dependia de binary() modificar a imagem original deve usar o objeto retornado (e passar copy=True para o comportamento que não é no local).
Commits: 8a44f0cd9
Lista de verificação para migração¶
Para uma adaptação limpa para a v3.0.0, o trabalho típico é:
Substitua
image.find_number()/image.classify_object()pelo módulonn(a migração para o nn).Envolva
sensor.sleep()/sensor.reset()emtry/exceptem vez de verificar um retorno booleano (a mudança em sensor.sleep).Trate as contagens reais de bytes de
send/recvdo socket do WINC (a mudança no socket do WINC).Use a imagem retornada por
image.binary()em vez de esperar uma modificação no local (a mudança em binary).Reduza as imagens antes de
find_apriltags()para ficar abaixo de 64K pixels (o limite de find_apriltags).
Todos os demais scripts funcionam sem alterações.