v2.1.0¶
v2.1.0 é uma versão de modernização massiva da API. Substitui o descritor de pontos-chave FREAK pelo ORB, reformula find_blobs() / histogramas / estatísticas em APIs baseadas em objetos, renomeia as funções de exposição automática/ganho/balanço de brancos do sensor, adiciona deteção de códigos QR e correção de lente OV7725, e introduz suporte inicial para a placa OpenMV Cam M7. Muitas APIs foram alteradas — leia as alterações de compatibilidade abaixo.
Destaques¶
Pontos-chave ORB — o descritor FREAK foi substituído pelo ORB (
find_keypoints()/match_descriptor()reformulados).APIs de objetos —
find_blobs(),get_histogram(),get_statistics()retornam agora objetos com acessores por nome.Códigos QR — adicionada deteção com
image.find_qrcodes().OpenMV Cam M7 — suporte inicial para a placa.
Sensor —
set_auto_whitebal()/set_auto_gain()/set_auto_exposure()(renomeadas) eset_lens_correction().Alteração de compatibilidade: as APIs de pontos-chave/descritores, manchas/histogramas/estatísticas, funções automáticas do sensor e outras foram alteradas — consulte as alterações de compatibilidade.
Novas funcionalidades¶
OpenMV Cam M7 — adicionado suporte inicial para a placa OpenMV 3 (M7).
Códigos QR — adicionado
image.find_qrcodes()com um exemploqrcodes.py.Pontos-chave ORB — novo sistema de descritores ORB:
find_keypoints()com um argumentocorner_detector(CORNER_FAST/CORNER_AGAST),max_keypoints/scale_factor;match_descriptor()com uma palavra-chavefilter_outlierse uma estimativa de rotação; gravação/carregamento de pontos-chave.APIs de objetos —
image.get_histogram()/get_statistics()/get_percentile()retornam objetos de histograma/estatísticas;find_blobs()retorna objetos de mancha (rect()/cx()/cy()/code()/area()/pixels()) comarea_threshold/pixels_threshold/merge/margin/invertex_stride/y_stride.Sensor — adicionado
sensor.set_lens_correction(enable, radi, coef)para sombreamento de lente OV7725,sensor.set_windowing()aceita agora também um tuplo(w, h)(centrado automaticamente), eimage.Image(..., copy_to_fb=True)/load_image(copy_to_fb=True).Adicionados scripts de exemplo para rastreamento de cor, Arduino SPI/I2C escravo, pontos-chave e histograma/estatísticas.
Outras alterações e melhorias¶
O IDE pode agora interromper um
main.pyem execução;find_blobs()/find_qrcodes()/get_statistics()mais rápidos; o ORB usa distância de Hamming por popcount; a correção de lente usa menos RAM; uma regraudevpara Linux impede que o ModemManager ocupe a porta série.
Correções de erros¶
Câmara e imagem:
Corrigidos: limpeza/invalidação de cache DMA no M7 (fotogramas corrompidos), uma linha extra no final de cada fotograma, limites de excesso do buffer de fotograma JPEG, libertação do buffer de fotograma em caso de falha de
compress(), precisão do ORB / ROI / tratamento de conjuntos vazios, e geometria deload_image(copy_to_fb=True).
Sistema:
Corrigidos: suporte ADC F7, um nome de registo OV7725, temporização bootloader/USB, utilização de WFI durante a espera por capturas, e o exemplo do streamer MJPEG foi tornado não bloqueante com tempos limite por cliente.
Hardware e suporte de placas¶
OpenMV Cam M7 (OpenMV 3) — suporte inicial para a placa.
OV7725 — suporte de correção de lente (sombreamento).
Alterações de compatibilidade da API¶
Alterações de API visíveis pelo utilizador entre v2.0.0 e v2.1.0. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.
Cada alteração está marcada com o seu impacto:
major — afeta a maioria dos scripts que usavam a funcionalidade; será necessário portar o código.
minor — API restrita; afeta apenas os scripts que a utilizavam.
behavior — mesma API, resultados diferentes; rever scripts ajustados.
As alterações estão agrupadas por impacto nessa ordem. Se pretende apenas portar o seu código, avance para o guia de migração no final. Cada hash de commit tem uma ligação para o diff correspondente no GitHub.
FREAK substituído pelo ORB; API de descritores reformulada (major)¶
O descritor de pontos-chave FREAK foi removido e substituído pelo ORB: image.FREAK deixou de existir (use image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() deixaram de receber um argumento inicial com o tipo de descritor (é inferido a partir do objeto), match_descriptor() retorna agora um tuplo de 8 elementos (cx, cy, x, y, w, h, match_count, rotation) (o último elemento é uma contagem bruta, não uma percentagem), e draw_keypoints() requer um objeto de pontos-chave em vez de uma lista bruta (x, y, angle). find_keypoints() ganhou corner_detector / max_keypoints / scale_factor com valores predefinidos alterados.
Renomeação das funções automáticas do sensor (major)¶
sensor.set_whitebal() / set_gain_ctrl() / set_exposure_ctrl() foram renomeadas para sensor.set_auto_whitebal() / set_auto_gain() / set_auto_exposure() (os nomes antigos foram removidos). Cada uma ganhou uma palavra-chave opcional value= para definir um valor manual em vez do automático.
Commits: 1b22a2961
Histograma / estatísticas reformulados em APIs de objetos (major)¶
A superfície de histograma/estatísticas foi reformulada em image.get_histogram() / get_statistics() / get_percentile() baseadas em objetos, retornando objetos de histograma/estatísticas. Os resultados antigos de histograma/estatísticas planos e os métodos bin_count / l_bin_count / a_bin_count / b_bin_count foram removidos (use len(histogram.bins()) etc.).
scale de find_features() renomeado (major)¶
image.find_features() (Haar) renomeou a sua palavra-chave scale= para scale_factor=. Atualize as chamadas find_features(cascade, scale=...) para scale_factor=....
Commits: 96e4f770c
find_blobs() retorna objetos; find_markers() removido (minor)¶
image.find_blobs() retorna agora objetos de mancha com acessores por nome (o acesso por índice ainda funciona para compatibilidade retroativa), e image.find_markers() foi removido — use find_blobs(..., merge=True, margin=...) em alternativa. O callback de filtro avançado de manchas de cor já não é suportado.
Commits: af15ec6eb
img.copy_to_fb() substituído (minor)¶
O método img.copy_to_fb() foi substituído por uma palavra-chave copy_to_fb= em image.Image / load_image(). Use image.Image(path, copy_to_fb=True) para carregar imagens grandes diretamente no buffer de fotograma.
Commits: 1645ab94b
compress() rejeita qualidade fora do intervalo (behavior)¶
image.compress() / compressed() levantam agora um erro quando quality está fora do intervalo 1–100, em vez de limitar silenciosamente. Limite quality ao intervalo 1–100 antes de chamar. Separadamente, o buffer JPEG do OpenMV 3 foi reduzido de 64 KB para 23000 bytes, pelo que fotogramas grandes podem agora levantar erro de memória insuficiente — reduza a qualidade JPEG ou o tamanho do fotograma.
O zoom de lens_corr() é agora funcional (behavior)¶
image.lens_corr() aplica agora efetivamente o seu argumento zoom (antes era interpretado mas ineficaz), pelo que a saída difere para scripts que passaram um zoom diferente do predefinido. Rever o ajuste de lens_corr().
Commits: d6b49adef
Guia de migração¶
Para uma portabilidade limpa para v2.1.0, o trabalho típico é:
Substituir
image.FREAKporimage.ORB, remover o argumento de tipo de descritor e atualizar o desempacotamento de tuplos dematch_descriptor()/draw_keypoints()para o objeto de pontos-chave (a reformulação do ORB).Renomear
sensor.set_whitebal()/set_gain_ctrl()/set_exposure_ctrl()para as formasset_auto_*(a renomeação das funções automáticas).Mover o código de histograma/estatísticas para os métodos de objeto (a reformulação do histograma/estatísticas).
Renomear
scale=defind_features()parascale_factor=(a renomeação de find_features).Usar os acessores de objeto de mancha e substituir
find_markers()porfind_blobs(merge=True, ...)(a alteração de find_blobs); substituirimg.copy_to_fb()pela palavra-chavecopy_to_fb=(a alteração de copy_to_fb).Limitar a qualidade de
compress()a 1–100 e verificar os tamanhos JPEG no OpenMV 3 (a alteração de compress); reajustar o zoom delens_corr()(a alteração de lens_corr).
Todos os outros scripts funcionam sem alterações.