v2.4.0¶
A v2.4.0 reescreve find_lines() como um detector por transformada de Hough, adiciona find_line_segments(), decodificação de data matrix find_datamatrices(), sensor.set_vsync_output(), leitura/escrita de fatias de imagem e muitos novos tamanhos de quadro escalonados para FPS mais alto. find_lines(), match_descriptor() e skip_frames() mudaram — leia as mudanças incompatíveis abaixo.
Destaques¶
find_lines()— reescrito como um detector de linhas por transformada de Hough que retorna objetos de linha (agora funciona em RGB565, não apenas em escala de cinza).find_line_segments()— detecta segmentos de linha finitos.find_datamatrices()— decodificação de data matrix.sensor.set_vsync_output()— gera o VSYNC em um pino de E/S para sincronização da câmera.Mais tamanhos de quadro — muitas resoluções escalonadas adicionais para FPS mais alto.
Incompatível:
find_lines(),match_descriptor()eskip_frames()mudaram — veja as mudanças incompatíveis.
Novos recursos¶
image.find_line_segments()— encontra segmentos de linha não infinitos; os objetos de linha ganharam um acessor.length().image.find_datamatrices()— decodificação de data matrix, com scripts de exemplo.sensor.set_vsync_output(pin)— gera o sinal VSYNC em um pino GPIO para sincronização da câmera (OpenMV 2 / OpenMV 3).Fatias de imagem — o subscript de imagem / protocolo de buffer agora suporta leitura e escrita de fatias dos dados da imagem.
Adicionadas muitas combinações adicionais de resolução / tamanho de quadro escalonadas para suportar taxas de quadros mais altas;
clock.fps()agora reinicia seus acumuladores a cada 2 s, de modo que o FPS reportado acompanha a taxa recente.
Outras mudanças e melhorias¶
O OV7725 é janelado para QVGA quando a resolução é ≤ VGA (menos quadros perdidos em altas taxas de captura) e seu PLL foi configurado para 6× com um clock externo reduzido (OpenMV 2 48 MHz, OpenMV 3 54 MHz), alterando o timing dos quadros do sensor.
Correções de bugs¶
Imagem:
Corrigido o erro de tamanho de buffer do
compress_for_ide()(marcador de início/fim), a decodificação de QR (mais correções upstream do quirc na indexação do bitmap de células e nos limites do padrão de alinhamento).
Sensor e conectividade:
Reduzido o clock do sensor da OpenMV 2 para funcionar com o PLL de sensor mais alto (init/sync da câmera) e feito o
socket.recvfrom()do WINC retornar o tamanho realmente recebido (gerando erro em um tamanho não positivo em vez de retornar um valor obsoleto).
Suporte de hardware e placas¶
Saída VSYNC em um pino GPIO (OpenMV 2 / OpenMV 3) dando suporte ao
sensor.set_vsync_output().OpenMV 3 — habilitada a UART1 da
pyb.UART.
Mudanças incompatíveis na API¶
Quebras de API visíveis ao usuário entre a v2.3.0 e a v2.4.0. Escopo: módulos C do 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 o código.
minor — API restrita; afeta apenas os scripts que a usavam.
behavior — mesma API, resultados diferentes; revalide os scripts ajustados.
As mudanças estão agrupadas por impacto nessa ordem. Se você só quer portar seu código, pule para a lista de verificação de migração no final. Cada hash de commit aponta para seu diff no GitHub.
find_lines() reescrito como detector de Hough (major)¶
image.find_lines() foi reescrito como um detector por transformada de Hough. Ele não retorna mais uma lista de tuplas (x1, y1, x2, y2) — retorna objetos de linha (.line() / .x1() / .y1() / .x2() / .y2() / .theta() / .rho() / .magnitude()) — e agora também funciona em RGB565 (não apenas em escala de cinza). O argumento threshold mudou de um float de 0.0–1.0 para uma soma inteira de magnitude de borda, line.magnitude agora é um inteiro, e foram adicionadas as novas palavras-chave theta_margin / rho_margin. Porte o código de desempacotamento de tuplas para os objetos de linha e reajuste o threshold.
match_descriptor() retorna um objeto de correspondência (minor)¶
image.match_descriptor() (ORB) agora retorna um objeto kptmatch com os acessores .cx() / .cy() / .x() / .y() / .w() / .h() / .count() / .theta() / .rect() em vez de uma tupla simples de 8 elementos. O objeto ainda é subscriptável/fatiável, então a indexação posicional continua funcionando, mas o código que fazia isinstance(result, tuple) (ou usava métodos de tupla) 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= (padrão ~300 ms) e agora é baseado em tempo por padrão, em vez de executar uma contagem fixa de quadros, parando antecipadamente assim que o tempo se esgota. Os scripts que dependiam de uma contagem exata de quadros devem passar uma contagem explícita e/ou definir time= adequadamente.
Commits: a039b5d1c
Lista de verificação de migração¶
Para um port limpo para a v2.4.0, o trabalho típico é:
Portar o desempacotamento de tuplas do
find_lines()para os objetos de linha e reajustar othresholdinteiro (a reescrita do find_lines).Usar os acessores do
kptmatchem vez de tratar os resultados domatch_descriptor()como uma tupla (a mudança do match_descriptor).Passar uma contagem explícita e/ou
time=parasensor.skip_frames()se você dependia de uma contagem fixa de quadros (a mudança do skip_frames).
Todos os outros scripts rodam sem alterações.