v1.2.0¶
v1.2.0 é uma versão fundacional muito extensa que desenvolve grande parte da API clássica de imagem do OpenMV: os métodos de desenho, operações de binário / morfologia, descritores de pontos-chave (FAST / FREAK / LBP), conversões de cor e image.statistics, entrada/saída de ficheiros BMP / PPM / JPEG, os módulos térmicos lcd, mjpeg, gif e mlx, a câmara OV7725, e muitos controlos de sensor. Alguns comportamentos fundamentais de sensor foram alterados — leia as alterações de quebra de compatibilidade abaixo.
Destaques¶
API de desenho —
draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints().Binário / 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âmara OV7725;
image.statistics; entrada/saída de ficheiros BMP/PPM/JPEG.Quebra de compatibilidade: o comportamento de
sensor.reset(),sensor.snapshot()esensor.set_pixformat()foi alterado — consulte as alterações de quebra de compatibilidade.
Novas funcionalidades¶
Desenho — adicionados
image.draw_line()/draw_rectangle()/draw_circle()/draw_string()/draw_cross()/draw_keypoints()com argumentos por palavra-chave (color, thickness, …).Binário / 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).Entrada/saída de ficheiros — carregamento e gravação de BMP / PPM (P2/P3/P5/P6) / JPEG (incluindo JPEG em escala de cinzentos e subamostragem de croma 4:2:0 / 4:2:2).
Módulos — novos módulos
lcd(shield LCD),mjpeg(gravação de vídeo),gifa cores (comGif.loop()), e módulos de câmara térmicamlx, cada um com scripts de exemplo.Sensor — adicionados
sensor.get_id()(+ constantes PID OV9650/OV2640/OV7725),sensor.set_special_effect()(constantes SDE_*),sensor.set_image_filter()(FILTER_BW / FILTER_SKIN), o tamanho de fotogramaHQVGA, eimage.set_pixel(x, y, …).WiFi — adicionado o controlador WiFi ATWINC1500 e base BSP para OpenMV 1/2, além de um exemplo BLE.
Outras alterações e melhorias¶
O framebuffer é agora comprimido em JPEG antes de ser transmitido para o OpenMV IDE (menor largura de banda); a compressão JPEG é feita no lugar; o zoom H/V do OV7725 permite escalonamento arbitrário; deteção de faces Haar melhorada (mais rápida) que funciona a QVGA.
Correções de erros¶
Imagem:
Corrigidos o cálculo do integral-image, corrupção no filtro
median(), o cálculo do centroide, filtros de pele RGB / preto-e-branco em entrada RGB, e leitura/escrita de BMP/PPM em escala de cinzentos mais rápida.
Sensor e sistema:
Corrigidos os temporizadores
pyb.Servo(Servo agora funciona), resolução HQVGA, fiabilidade de inicialização do cartão SD, reinicialização do armazenamento após soft-reset, e re-execução do REPL quando não está presente nenhum script.
Hardware e suporte a placas¶
Sensor de câmara OV7725.
Shield LCD (módulo
lcd), câmara térmicamlx, e base WiFi ATWINC1500.
Alterações de quebra de compatibilidade da API¶
Alterações de API visíveis pelo utilizador entre v1.1.0 e v1.2.0. Âmbito: módulos C em Python em modules/ e bibliotecas Python em scripts/libraries/.
As três alterações de quebra de compatibilidade são alterações de behavior às funções principais de sensor (mesma API, comportamento diferente) — verifique novamente os scripts afetados. Cada hash de commit é uma ligação para o respetivo diff no GitHub. (A grande maioria desta versão é nova API adicionada no intervalo v1.1→v1.2 e é, portanto, aditiva, sem quebras de compatibilidade.)
sensor.reset() já não aplica uma configuração padrão (behavior)¶
sensor.reset() já não aplica uma configuração padrão integrada (pixformat / framesize / framerate / gain / contrast / brightness / saturation). Os scripts que dependiam do reset() a deixar um estado padrão utilizável devem agora chamar explicitamente sensor.set_pixformat() e sensor.set_framesize() (e quaisquer outras definições) após reset().
Commits: d1e782df3
sensor.snapshot() lança exceção em caso de timeout (behavior)¶
sensor.snapshot() levanta agora RuntimeError("Sensor Timeout!!") quando o sensor excede o tempo limite, em vez de bloquear indefinidamente. Envolva snapshot() em try / except RuntimeError se precisar de tolerar timeouts.
Commits: e3f41d674
sensor.set_pixformat() lança exceção em formato não suportado (behavior)¶
sensor.set_pixformat() levanta agora uma exceção quando recebe um formato de pixel não suportado, em vez de devolver False. O código que verificava o retorno False deve capturar a exceção em alternativa.
Commits: e0c5822c2
Guia de migração¶
Para uma migração limpa para v1.2.0, o trabalho típico é:
Definir explicitamente
sensor.set_pixformat()/sensor.set_framesize()apóssensor.reset()(a alteração de reset).Envolver
sensor.snapshot()emtry/except RuntimeErrorse precisar de tolerar timeouts do sensor (a alteração de snapshot).Capturar a exceção de
sensor.set_pixformat()em vez de verificarFalse(a alteração de set_pixformat).
Todos os outros scripts funcionam sem alterações.