v2.4.0¶
v2.4.0 reescreve find_lines() como um detetor de transformada de Hough, adiciona find_line_segments(), descodificação de matrizes de dados com find_datamatrices(), sensor.set_vsync_output(), leitura/escrita de fatias de imagem e muitos novos tamanhos de fotograma escalados para FPS mais elevados. find_lines(), match_descriptor() e skip_frames() foram alterados — leia as alterações de compatibilidade abaixo.
Destaques¶
find_lines()— reescrito como um detetor de linhas por transformada de Hough que retorna objetos de linha (funciona agora com RGB565, não apenas em escala de cinzentos).find_line_segments()— detetar segmentos de linha finitos.find_datamatrices()— descodificação de matrizes de dados.sensor.set_vsync_output()— conduzir VSYNC num pino de E/S para sincronização de câmara.Mais tamanhos de fotograma — muitas resoluções escaladas adicionais para FPS mais elevados.
Alteração de compatibilidade:
find_lines(),match_descriptor()eskip_frames()foram alterados — consulte as alterações de compatibilidade.
Novas funcionalidades¶
image.find_line_segments()— encontrar segmentos de linha não infinitos; os objetos de linha ganharam um acessor.length().image.find_datamatrices()— descodificação de matrizes de dados, com scripts de exemplo.sensor.set_vsync_output(pin)— saída do sinal VSYNC num pino GPIO para sincronização de câmara (OpenMV 2 / OpenMV 3).Fatias de imagem — o subscrito de imagem / protocolo de buffer suporta agora leitura e escrita de fatias dos dados de imagem.
Adicionadas muitas combinações adicionais de resolução escalada / tamanho de fotograma para suportar taxas de fotogramas mais elevadas;
clock.fps()reinicia agora os seus acumuladores a cada 2 s para que o FPS reportado acompanhe a taxa recente.
Outras alterações e melhorias¶
O OV7725 é janelado para QVGA quando a resolução é ≤ VGA (menos fotogramas descartados a altas taxas de captura) e o seu PLL foi definido para 6× com um relógio externo reduzido (OpenMV 2 48 MHz, OpenMV 3 54 MHz), alterando a temporização de fotogramas do sensor.
Correções de erros¶
Imagem:
Corrigido o erro de tamanho do buffer de
compress_for_ide()(marcadores de início/fim), a descodificação QR (mais correções upstream do quirc para indexação do mapa de células e limites dos padrões de alinhamento).
Sensor e conectividade:
Reduzido o relógio do sensor OpenMV 2 para funcionar com o PLL de sensor mais alto (init/sincronização da câmara) e
socket.recvfrom()do WINC retorna agora o tamanho realmente recebido (com erro em tamanho não positivo em vez de retornar um valor obsoleto).
Hardware e suporte de placas¶
Saída VSYNC num pino GPIO (OpenMV 2 / OpenMV 3) que suporta
sensor.set_vsync_output().OpenMV 3 — ativado UART1 com
pyb.UART.
Alterações de compatibilidade da API¶
Alterações de API visíveis pelo utilizador entre v2.3.0 e v2.4.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.
find_lines() reescrito como detetor de Hough (major)¶
image.find_lines() foi reescrito como um detetor por transformada de Hough. Já não retorna uma lista de tuplos (x1, y1, x2, y2) — retorna objetos de linha (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — e funciona agora também com RGB565 (não apenas em escala de cinzentos). O argumento threshold mudou de um float 0.0–1.0 para uma soma inteira de magnitude de aresta, line.magnitude é agora um inteiro, e foram adicionadas novas palavras-chave theta_margin / rho_margin. Porte o código de desempacotamento de tuplos para os objetos de linha e reajuste threshold.
match_descriptor() retorna um objeto de correspondência (minor)¶
image.match_descriptor() (ORB) retorna agora um objeto kptmatch com acessores .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() em vez de um tuplo simples de 8 elementos. O objeto ainda é subscritável/fatiável, pelo que a indexação posicional continua a funcionar, mas o código que usava isinstance(result, tuple) (ou métodos de tuplo) deve usar os novos acessores.
Commits: e960546b6
sensor.skip_frames() é agora baseado em tempo (behavior)¶
sensor.skip_frames() foi reformulado para aceitar uma palavra-chave time= (predefinição ~300 ms) e é agora baseado em tempo por defeito, em vez de executar um número fixo de fotogramas, parando antes quando o tempo termina. Os scripts que dependiam de um número exato de fotogramas devem passar uma contagem explícita e/ou definir time= adequadamente.
Commits: a039b5d1c
Guia de migração¶
Para uma portabilidade limpa para v2.4.0, o trabalho típico é:
Portar o desempacotamento de tuplos de
find_lines()para os objetos de linha e reajustar othresholdinteiro (a reescrita de find_lines).Usar os acessores
kptmatchem vez de tratar os resultados dematch_descriptor()como um tuplo (a alteração de match_descriptor).Passar uma contagem explícita e/ou
time=asensor.skip_frames()se dependia de um número fixo de fotogramas (a alteração de skip_frames).
Todos os outros scripts funcionam sem alterações.