v1.2.0#

v1.2.0 je základní, velmi rozsáhlé vydání, které buduje většinu klasického zobrazovacího API OpenMV: metody pro kreslení, binární / morfologické operace, deskriptory klíčových bodů (FAST / FREAK / LBP), barevné konverze a image.statistics, vstup/výstup souborů BMP / PPM / JPEG, moduly lcd, mjpeg, gif a termální modul mlx, kameru OV7725 a mnoho ovládacích prvků sensor. Některé základní chování sensor se změnilo — přečtěte si níže uvedené zásadní změny.

Hlavní novinky#

  • Kreslicí APIdraw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints().

  • Binární / morfologiebinary(), invert(), and/or/xor/..., erode() / dilate() / morph(), negate() / difference().

  • Klíčové body — deskriptory FAST / FREAK / LBP s match_descriptor() / save_descriptor() / load_descriptor().

  • Nové modulylcd, mjpeg, gif (barevný) a termální mlx.

  • Podpora kamery OV7725; image.statistics; vstup/výstup souborů BMP/PPM/JPEG.

  • Zásadní: chování sensor.reset(), sensor.snapshot() a sensor.set_pixformat() se změnilo — viz zásadní změny.

Nové funkce#

  • Kreslení — přidány image.draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints() s pojmenovanými argumenty (barva, tloušťka, …).

  • Binární / morfologie — přidány image.binary(), invert(), and() / nand() / or() / nor() / xor() / xnor(), erode() / dilate() / morph(), negate() / difference(), pixels(), centroid(), orientation_radians() / orientation_degrees() a width() / height() / format().

  • Klíčové body / deskriptory — extrakce klíčových bodů FAST přes find_keypoints(), jednotné match_descriptor() a save_descriptor() / load_descriptor() pro FREAK / LBP a navíc Haar/LBP kaskáda pro profil obličeje.

  • Barva / statistikyimage.statistics a funkce pro barevné konverze (rgb_to_lab / lab_to_rgb / rgb_to_grayscale / grayscale_to_rgb).

  • Vstup/výstup souborů — načítání a ukládání BMP / PPM (P2/P3/P5/P6) / JPEG (včetně JPEG ve stupních šedi a podvzorkování barevnosti 4:2:0 / 4:2:2).

  • Moduly — nový lcd (LCD shield), mjpeg (nahrávání videa), barevný gif (s Gif.loop()) a termální moduly kamery mlx, každý s ukázkovými skripty.

  • Senzor — přidány sensor.get_id() (+ PID konstanty OV9650/OV2640/OV7725), sensor.set_special_effect() (konstanty SDE_*), sensor.set_image_filter() (FILTER_BW / FILTER_SKIN), velikost snímku HQVGA a image.set_pixel(x, y, …).

  • WiFi — přidán ovladač WiFi ATWINC1500 a základy BSP pro OpenMV 1/2, plus příklad BLE.

Další změny a vylepšení#

  • Snímkový buffer (frame buffer) je nyní před streamováním do OpenMV IDE komprimován do JPEG (nižší šířka pásma); komprese JPEG probíhá na místě; H/V zoom OV7725 umožňuje libovolné škálování; vylepšená (rychlejší) detekce obličejů pomocí Haar, která běží na QVGA.

Opravy chyb#

Zpracování obrazu:

  • Opraven výpočet integrálního obrazu, poškození filtru median(), výpočet těžiště, RGB filtry pleti / černobílé na RGB vstupu a rychlejší čtení/zápis BMP/PPM ve stupních šedi.

Senzor a systém:

  • Opraveny časovače pyb.Servo (Servo nyní funguje), rozlišení HQVGA, spolehlivost inicializace SD karty, opětovná inicializace úložiště po softwarovém resetu a opětovné spuštění REPL, pokud není přítomen žádný skript.

Hardware a podpora desek#

  • Obrazový senzor OV7725.

  • LCD shield (modul lcd), termální kamera mlx a základy WiFi ATWINC1500.

Zásadní změny API#

Pro uživatele viditelné změny API mezi v1.1.0 a v1.2.0. Rozsah: C-moduly Pythonu v modules/ a knihovny Pythonu v scripts/libraries/.

Všechny tři zásadní změny jsou změny chování základních funkcí sensor (stejné API, jiné chování) — znovu zkontrolujte dotčené skripty. Každý hash commitu odkazuje na svůj diff na GitHubu. (Naprostá většina tohoto vydání je nové API vybudované v rozsahu v1.1→v1.2, a je tedy přídavná, nikoli zásadní.)

sensor.reset() již neaplikuje výchozí konfiguraci (chování)#

sensor.reset() již neaplikuje vestavěnou výchozí konfiguraci (pixformat / framesize / framerate / gain / contrast / brightness / saturation). Skripty, které se spoléhaly na to, že reset() zanechá použitelnou výchozí konfiguraci, musí nyní po reset() explicitně volat sensor.set_pixformat() a sensor.set_framesize() (a jakákoli další nastavení).

Commity: d1e782df3

sensor.snapshot() vyvolá výjimku při vypršení časového limitu (chování)#

sensor.snapshot() nyní vyvolá RuntimeError("Sensor Timeout!!"), když senzoru vyprší časový limit, místo nekonečného zaseknutí. Pokud potřebujete tolerovat časové limity, obalte snapshot() do try / except RuntimeError.

Commity: e3f41d674

sensor.set_pixformat() vyvolá výjimku při nepodporovaném formátu (chování)#

sensor.set_pixformat() nyní vyvolá výjimku, je-li jí předán nepodporovaný pixelový formát, místo vrácení False. Kód, který kontroloval návratovou hodnotu False, musí místo toho zachytit výjimku.

Commity: e0c5822c2

Kontrolní seznam pro migraci#

Pro čistý přechod na v1.2.0 obvykle platí toto:

  1. Po sensor.reset() explicitně nastavte sensor.set_pixformat() / sensor.set_framesize() (změna resetu).

  2. Pokud potřebujete tolerovat časové limity senzoru, obalte sensor.snapshot() do try / except RuntimeError (změna snapshotu).

  3. Zachyťte výjimku z sensor.set_pixformat() místo kontroly na False (změna set_pixformat).

Všechny ostatní skripty běží beze změny.