v1.2.0¶
v1.2.0 é uma versão fundamental e bastante grande que constrói a maior parte da API clássica de imagem do OpenMV: os métodos de desenho, as operações binárias / de morfologia, os descritores de pontos-chave (FAST / FREAK / LBP), as conversões de cor e image.statistics, a E/S de arquivos BMP / PPM / JPEG, os módulos lcd, mjpeg, gif e o térmico mlx, a câmera OV7725 e muitos controles de sensor. Algum comportamento central de sensor mudou — leia as mudanças incompatíveis abaixo.
Destaques¶
API de desenho —
draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints().Binária / morfologia —
binary(),invert(),and/or/xor/...,erode()/dilate()/morph(),negate()/difference().Pontos-chave — descritores FAST / FREAK / LBP com
match_descriptor()/save_descriptor()/load_descriptor().Suporte à câmera OV7725;
image.statistics; E/S de arquivos BMP/PPM/JPEG.Incompatível: o comportamento de
sensor.reset(),sensor.snapshot()esensor.set_pixformat()mudou — veja as mudanças incompatíveis.
Novos recursos¶
Desenho — adicionados
image.draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints()com argumentos nomeados (cor, espessura, …).Binária / morfologia — adicionados
image.binary(),invert(),and()/nand()/or()/nor()/xor()/xnor(),erode()/dilate()/morph(),negate()/difference(),pixels(),centroid(),orientation_radians()/orientation_degrees()ewidth()/height()/format().Pontos-chave / descritores — extração de pontos-chave FAST via
find_keypoints(), ummatch_descriptor()unificado esave_descriptor()/load_descriptor()para FREAK / LBP, além de uma cascata Haar/LBP de face de perfil.Cor / estatísticas —
image.statisticse funções de conversão de cor (rgb_to_lab/lab_to_rgb/rgb_to_grayscale/grayscale_to_rgb).E/S de arquivos — carregamento e gravação de BMP / PPM (P2/P3/P5/P6) / JPEG (incluindo JPEG em escala de cinza e subamostragem de croma 4:2:0 / 4:2:2).
Módulos — novos módulos
lcd(shield LCD),mjpeg(gravação de vídeo),gifcolorido (comGif.loop()) emlxde câmera térmica, cada um com scripts de exemplo.Sensor — adicionados
sensor.get_id()(+ constantes de PID OV9650/OV2640/OV7725),sensor.set_special_effect()(constantes SDE_*),sensor.set_image_filter()(FILTER_BW / FILTER_SKIN), o framesizeHQVGAeimage.set_pixel(x, y, …).WiFi — adicionados o driver WiFi ATWINC1500 e a base de BSP do OpenMV 1/2, além de um exemplo de BLE.
Outras mudanças e melhorias¶
O framebuffer agora é comprimido em JPEG antes de ser transmitido ao OpenMV IDE (menor largura de banda); a compressão JPEG é feita in-place; o zoom H/V da OV7725 permite escalonamento arbitrário; detecção de face Haar aprimorada (mais rápida) que roda em QVGA.
Correções de bugs¶
Imagem:
Corrigidos o cálculo da imagem integral, a corrupção do filtro
median(), o cálculo do centroide, os filtros de pele RGB / preto-e-branco em entrada RGB, e leitura/gravação mais rápida de BMP/PPM em escala de cinza.
Sensor e sistema:
Corrigidos os timers de
pyb.Servo(o Servo agora funciona), a resolução HQVGA, a confiabilidade de inicialização do cartão SD, a reinicialização do armazenamento após um soft-reset e a reexecução do REPL quando nenhum script está presente.
Suporte de hardware e placas¶
Sensor de câmera OV7725.
Shield LCD (módulo
lcd), câmera térmicamlxe base de WiFi ATWINC1500.
Mudanças incompatíveis na API¶
Quebras de API visíveis ao usuário entre a v1.1.0 e a v1.2.0. Escopo: C-modules Python em modules/ e bibliotecas Python em scripts/libraries/.
Todas as três mudanças incompatíveis são mudanças de comportamento em funções centrais de sensor (mesma API, comportamento diferente) — reverifique os scripts afetados. Cada hash de commit aponta para o seu diff no GitHub. (A grande maioria desta versão é nova API construída dentro do intervalo v1.1→v1.2 e é, portanto, aditiva, não incompatível.)
sensor.reset() não aplica mais uma configuração padrão (comportamento)¶
sensor.reset() não aplica mais uma configuração padrão embutida (pixformat / framesize / framerate / ganho / contraste / brilho / saturação). Scripts que dependiam de reset() deixar um padrão utilizável agora precisam chamar explicitamente sensor.set_pixformat() e sensor.set_framesize() (e quaisquer outras configurações) após reset().
Commits: d1e782df3
sensor.snapshot() lança exceção em timeout (comportamento)¶
sensor.snapshot() agora lança RuntimeError("Sensor Timeout!!") quando o sensor atinge o tempo limite, em vez de travar indefinidamente. Envolva snapshot() em try / except RuntimeError se você precisar tolerar timeouts.
Commits: e3f41d674
sensor.set_pixformat() lança exceção em formato não suportado (comportamento)¶
sensor.set_pixformat() agora lança uma exceção quando recebe um formato de pixel não suportado, em vez de retornar False. Código que verificava o retorno False deve capturar a exceção em vez disso.
Commits: e0c5822c2
Checklist de migração¶
Para uma portabilidade limpa para a v1.2.0, o trabalho típico é:
Defina explicitamente
sensor.set_pixformat()/sensor.set_framesize()apóssensor.reset()(a mudança no reset).Envolva
sensor.snapshot()emtry/except RuntimeErrorse você precisar tolerar timeouts do sensor (a mudança no snapshot).Capture a exceção de
sensor.set_pixformat()em vez de verificar porFalse(a mudança no set_pixformat).
Todos os outros scripts rodam sem alterações.