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.