v2.1.0¶
A v2.1.0 é uma versão massiva de modernização da API. Ela substitui o descritor de pontos-chave FREAK por ORB, reformula find_blobs() / histogramas / estatísticas em APIs baseadas em objetos, renomeia as funções de exposição/ganho/balanço de branco automáticos do sensor, adiciona detecção de QR Code e correção de lente para o OV7725, e habilita a placa inicial OpenMV Cam M7. Muitas APIs mudaram — leia as mudanças incompatíveis abaixo.
Destaques¶
Pontos-chave ORB — o descritor FREAK foi substituído por ORB (
find_keypoints()/match_descriptor()reformulados).APIs de objetos —
find_blobs(),get_histogram(),get_statistics()agora retornam objetos com acessadores nomeados.QR Codes — adicionada a detecção
image.find_qrcodes().OpenMV Cam M7 — suporte inicial de placa.
Sensor —
set_auto_whitebal()/set_auto_gain()/set_auto_exposure()(renomeadas) eset_lens_correction().Incompatível: as APIs de pontos-chave/descritor, blob/histograma/estatísticas, função automática do sensor e várias outras mudaram — veja as mudanças incompatíveis.
Novos recursos¶
OpenMV Cam M7 — adicionado o suporte inicial à placa OpenMV 3 (M7).
QR Codes — 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; salvar/carregar pontos-chave.APIs de objetos —
image.get_histogram()/get_statistics()/get_percentile()retornam objetos de histograma/estatísticas;find_blobs()retorna objetos blob (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 o sombreamento de lente do OV7725,sensor.set_windowing()agora também aceita uma tupla(w, h)(centralizada automaticamente) eimage.Image(..., copy_to_fb=True)/load_image(copy_to_fb=True).Adicionados scripts de exemplo de rastreamento de cores, escravo SPI/I2C com Arduino, pontos-chave e histograma/estatísticas.
Outras mudanças e melhorias¶
A IDE agora pode interromper um
main.pyem execução;find_blobs()/find_qrcodes()/get_statistics()mais rápidos; o ORB usa uma distância de Hamming por popcount; a correção de lente usa menos RAM; uma regraudevdo Linux impede que o ModemManager tome a porta serial.
Correções de bugs¶
Câmera e imageamento:
Corrigidos a limpeza/invalidação de cache do DMA do M7 (quadros corrompidos), uma linha extra espúria no final de cada quadro, os limites de estouro do buffer de quadro JPEG, a liberação do buffer de quadro em caso de falha de
compress(), a precisão / ROI / tratamento de conjunto vazio do ORB e a geometria deload_image(copy_to_fb=True).
Sistema:
Corrigidos o suporte ao ADC do F7, um nome de registrador do OV7725, o tempo de bootloader/USB, usado WFI ao aguardar capturas e tornado não bloqueante o exemplo de streamer MJPEG com timeouts por cliente.
Suporte de hardware e placas¶
OpenMV Cam M7 (OpenMV 3) — suporte inicial de placa.
OV7725 — suporte a correção de lente (sombreamento).
Mudanças incompatíveis na API¶
Quebras de API visíveis ao usuário entre a v2.0.0 e a v2.1.0. Escopo: C-modules em Python em modules/ e bibliotecas Python em scripts/libraries/.
Cada mudança é marcada com seu impacto:
major — afeta a maioria dos scripts que usavam o recurso; você precisará portar código.
minor — API restrita; afeta apenas scripts que a utilizavam.
behavior — mesma API, resultados diferentes; revise 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.
FREAK substituído por ORB; API de descritores reformulada (major)¶
O descritor de pontos-chave FREAK foi removido e substituído por ORB: image.FREAK não existe mais (use image.ORB). image.match_descriptor() / save_descriptor() / load_descriptor() não recebem mais um argumento inicial de tipo de descritor (ele é inferido a partir do objeto), match_descriptor() agora retorna uma tupla de 8 elementos (cx, cy, x, y, w, h, match_count, rotation) (o último elemento é uma contagem bruta, não uma porcentagem) 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 padrões 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 antigos resultados planos de histograma/estatísticas 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 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() agora retorna objetos blob com acessadores nomeados (o acesso por índice ainda funciona para compatibilidade retroativa) e image.find_markers() foi removido — use find_blobs(..., merge=True, margin=...) em vez disso. O callback avançado de filtro de blob por cor não é mais 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 quadro.
Commits: 1645ab94b
compress() rejeita qualidade fora do intervalo (behavior)¶
image.compress() / compressed() agora geram um erro quando quality está fora de 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, então quadros grandes podem agora gerar falta de memória — reduza a qualidade JPEG ou o tamanho do quadro.
O zoom de lens_corr() agora é funcional (behavior)¶
image.lens_corr() agora realmente aplica seu argumento zoom (antes ele era interpretado, mas ineficaz), então a saída difere para os scripts que passavam um zoom não padrão. Reverifique o ajuste de lens_corr().
Commits: d6b49adef
Lista de verificação de migração¶
Para uma portabilidade limpa para a v2.1.0, o trabalho típico é:
Substituir
image.FREAKporimage.ORB, eliminar o argumento de tipo de descritor e atualizar o desempacotamento da tupla 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 de histograma/estatísticas).
Renomear
scale=defind_features()parascale_factor=(a renomeação de find_features).Usar os acessadores de objeto blob e substituir
find_markers()porfind_blobs(merge=True, ...)(a mudança em find_blobs); substituirimg.copy_to_fb()pela palavra-chavecopy_to_fb=(a mudança em copy_to_fb).Limitar a qualidade de
compress()ao intervalo 1–100 e reverificar os tamanhos JPEG no OpenMV 3 (a mudança em compress); reajustar o zoom delens_corr()(a mudança em lens_corr).
Todos os outros scripts funcionam sem alterações.