image — gépi látás

Az image modul az OpenMV gépi látás verem szíve. Elérhetővé teszi az Image osztályt – a memóriabeli képpont-puffert, amelyen minden rajzolási, szűrési, transzformációs és jellemzőkinyerő rutin dolgozik –, valamint az ezen rutinok által visszaadott eredményobjektumokat (Blob, Line, Circle, Rect, QRCode, AprilTag, DataMatrix, BarCode, …) és a konfigurálásukhoz használt segédosztályokat (Threshold, Histogram, Statistics, HaarCascade, Similarity, Percentile, Displacement, ImageIO).

Kép beszerzése

Négy módja van annak, hogy egy Image objektumot a RAM-ba juttassunk:

  • Élő felvétel a kamera érzékelőjéről. Hívd meg a csi.CSI.snapshot() metódust a következő képkocka közvetlenül a képkocka-pufferbe rögzítéséhez; a visszaadott Image erre a pufferre hivatkozik.

  • Fájlból. Adj át egy elérési utat az Image konstruktornak (image.Image("/sd/photo.jpg")); a támogatott lemezformátumok a BMP, PPM/PGM, JPEG, PNG és az OpenMV ImageIO felvételi formátuma.

  • ndarray-ből. Adj át egy float32 (h, w) vagy (h, w, 3) ndarray objektumot az Image konstruktornak. A képpontok 0.0 -- 255.0 tartományból GRAYSCALE, illetve RGB565 képre vannak skálázva. Ezt arra használhatod, hogy az ml (vagy bármely ulab folyamat) tenzorkimenetét visszahozd egy rajzolható képbe.

  • Üres puffer. Hozz létre egy Image objektumot adott mérettel és képpontformátummal (image.Image(320, 240, image.RGB565)), hogy a semmiből rajzolj bele, vagy hogy ideiglenes felületként használd kép-aritmetikához.

Képpontformátumok

Minden Image a következő képpontformátumok egyikével rendelkezik; a választás kompromisszumot jelent a memória, a feldolgozási költség és az aközött, hogy mely algoritmusok futtathatók rajta. Használd a BINARY, GRAYSCALE, RGB565, BAYER, YUV422, JPEG vagy PNG értéket pixformat argumentumként kép létrehozásakor vagy a kamera érzékelőjének konfigurálásakor:

  • BINARY (1 bpp) – egy bit képpontonként. A legkisebb formátum; belsőleg a küszöbölési és morfológiai rutinok használják, de ritkán rögzítik közvetlenül az érzékelőről.

  • GRAYSCALE (8 bpp) – egy bájt képpontonként (a YUV422 Y csatornája). A leggyorsabb formátum a legtöbb gépi látás algoritmushoz (AprilTag, élkeresés, optikai áramlás).

  • RGB565 (16 bpp) – két bájt képpontonként, 5 bit piros / 6 bit zöld / 5 bit kék. Az alapértelmezett színformátum.

  • BAYER (8 bpp) – nyers Bayer-mintázatú színadat közvetlenül az érzékelőről. Hasznos egyéni de-mosaicinghoz, vagy ahhoz, hogy több képpontot tárolj kevesebb memóriában, mielőtt igény szerint debayerelnél.

  • YUV422 (16 bpp) – 4:2:2 króma-aldmintavételezett szín, két bájt képpontonként. Hasznos, ha króma-specifikus algoritmusokat szeretnél a teljes RGB költsége nélkül.

  • JPEG / PNG – tömörített pufferek. A tárolásra és hálózati átvitelre a legjobbak. A képpontszintű műveletek előbb Image.to_grayscale() vagy Image.to_rgb565() hívást igényelnek.

Munka az eredményekkel

Az Image osztály észlelési / jellemzőkinyerő metódusai olyan objektumokat adnak vissza, amelyeken iterálhatsz és amelyeket kombinálhatsz – egy Image.find_blobs() hívás Blob objektumok listáját adja vissza, egy Image.find_apriltags() hívás AprilTag objektumok listáját adja vissza, és így tovább. Minden eredményosztály elérhetővé teszi az észlelés geometriai tulajdonságait (centroid, határoló doboz, terület, kódérték stb.), így közvetlenül cselekedhetsz alapján, vagy visszaadhatod őket a rajzolási metódusoknak (Image.draw_rectangle(), Image.draw_string(), …).

Színtér-segédfüggvények

A modul kicsi, tiszta függvényeket is elérhetővé tesz az egyes képpontértékek bináris / szürkeárnyalatos / RGB / LAB / YUV színterek közötti konvertálásához. Ezek akkor hasznosak, amikor küszöbértékeket vagy palettabejegyzéseket kell Pythonban konvertálnod, mielőtt képműveletekbe adnád őket – a teljes képes konvertáláshoz használd az Image to_* metódusait, amelyek sokkal gyorsabbak, mint ezeket a segédfüggvényeket ciklusban hívni.

Osztályok

Függvények

Színtér-konvertáló segédfüggvények

Az alábbi X_to_Y függvények mindegyike egyetlen képpontérték-konverziót végez. Mindegyik az OpenMV kanonikus tartományaiban vesz át / ad vissza értékeket:

  • bináris – int 0 – 1.

  • szürkeárnyalatos – int 0 – 255.

  • RGB – (r, g, b) 8 bites egészek tuple-ja (mindegyik 0 – 255).

  • LAB – (l, a, b) tuple, ahol L 0 – 100, az A/B pedig -128 – 127.

  • YUV – (y, u, v) tuple, ahol Y 0 – 255, az U/V pedig -128 – 127.

A teljes képes konvertáláshoz használd az Image to_* metódusait, amelyek sokkal gyorsabbak, mint ezeket a segédfüggvényeket ciklusban hívni.

image.binary_to_grayscale(value: int) int

Bináris érték konvertálása szürkeárnyalatos értékké.

image.binary_to_rgb(value: int) Tuple[int, int, int]

Bináris érték konvertálása RGB tuple-lé.

image.binary_to_lab(value: int) Tuple[int, int, int]

Bináris érték konvertálása LAB tuple-lé.

image.binary_to_yuv(value: int) Tuple[int, int, int]

Bináris érték konvertálása YUV tuple-lé.

image.grayscale_to_binary(value: int) int

Szürkeárnyalatos érték konvertálása bináris értékké.

image.grayscale_to_rgb(value: int) Tuple[int, int, int]

Szürkeárnyalatos érték konvertálása RGB tuple-lé.

image.grayscale_to_lab(value: int) Tuple[int, int, int]

Szürkeárnyalatos érték konvertálása LAB tuple-lé.

image.grayscale_to_yuv(value: int) Tuple[int, int, int]

Szürkeárnyalatos érték konvertálása YUV tuple-lé.

image.rgb_to_binary(value: Tuple[int, int, int]) int

RGB tuple konvertálása bináris értékké.

image.rgb_to_grayscale(value: Tuple[int, int, int]) int

RGB tuple konvertálása szürkeárnyalatos értékké.

image.rgb_to_lab(value: Tuple[int, int, int]) Tuple[int, int, int]

RGB tuple konvertálása LAB tuple-lé.

image.rgb_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]

RGB tuple konvertálása YUV tuple-lé.

image.lab_to_binary(value: Tuple[int, int, int]) int

LAB tuple konvertálása bináris értékké.

image.lab_to_grayscale(value: Tuple[int, int, int]) int

LAB tuple konvertálása szürkeárnyalatos értékké.

image.lab_to_rgb(value: Tuple[int, int, int]) Tuple[int, int, int]

LAB tuple konvertálása RGB tuple-lé.

image.lab_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]

LAB tuple konvertálása YUV tuple-lé.

image.yuv_to_binary(value: Tuple[int, int, int]) int

YUV tuple konvertálása bináris értékké.

image.yuv_to_grayscale(value: Tuple[int, int, int]) int

YUV tuple konvertálása szürkeárnyalatos értékké.

image.yuv_to_rgb(value: Tuple[int, int, int]) Tuple[int, int, int]

YUV tuple konvertálása RGB tuple-lé.

image.yuv_to_lab(value: Tuple[int, int, int]) Tuple[int, int, int]

YUV tuple konvertálása LAB tuple-lé.

Jellemzőleírók

image.HaarCascade(path: str, stages: int = -1) Cascade

Betölt egy Haar Cascade-et, és visszaad egy Cascade kezelőt az Image.find_features() használatához.

A path lehet:

  • a "frontalface" vagy "eye" literális karakterlánc a firmware ROM-jába beépített két cascade egyikének betöltéséhez, vagy

  • egy fájlrendszerbeli elérési út egy egyéni .cascade bináris fájlhoz, amelyet az OpenMV cascade-konvertáló eszközei állítanak elő.

A stages azt választja meg, hány cascade-szakaszt értékeljen ki az észlelés során. A -1 a fájlban tárolt összes szakaszt használja. Ezen érték csökkentése gyorsítja az észlelést, cserébe több téves találattal.

image.load_descriptor(path: str) kp_desc | lbp_desc

Betölt egy leírót a path helyen lévő fájlból, és visszaadja. A fájl belső típuscímkéje választja meg, hogy melyik leíróosztály épül újra:

image.save_descriptor(descriptor: kp_desc | lbp_desc, path: str) None

Sorosítja a descriptor objektumot (egy ORB kulcspont- vagy LBP leírót) a path helyen lévő fájlba az OpenMV leírófájl-formátumban. Ugyanez a fájl később újratölthető az image.load_descriptor() segítségével.

image.match_descriptor(descriptor0, descriptor1, threshold: int = 85, filter_outliers: bool = False) int | kptmatch

Két azonos típusú leíró összevetése.

  • Két LBP leíró esetén – egész Hamming-távolságot ad vissza közöttük (az alacsonyabb érték közelebbi egyezés).

  • Két ORB kulcspont-leíró esetén – egy kptmatch objektumot ad vissza, amely az egyező kulcspontok fürtjét írja le, vagy None értéket, ha egyik egyezés sem éri el a threshold küszöböt.

A threshold (0 – 100) azt állítja be, mennyire szigorú az ORB-egyeztetés egy kulcspontpár elfogadásakor. Az alacsonyabb értékek szigorítják az egyeztetést azzal, hogy elutasítják a gyenge legközelebbi-szomszéd egyezéseket.

A filter_outliers engedélyezi a RANSAC-jellegű kilógó pontok elvetését az egyező kulcspontok halmazán. Akkor használd, ha egyetlen merev transzformációt vársz a két nézet között; tiltsd le, ha az egyező kulcspontok több objektumot fognak át.

Folt-geometria segédfüggvények

Ezek a segédfüggvények egy Blob objektumot (az Image.find_blobs() által visszaadottat) vesznek át, és igény szerint számítanak ki további geometriai tulajdonságokat. Modulszinten élnek – nem a Blob osztályon –, így az alap find_blobs() útvonal nem fizet értük, hacsak nem kéred őket.

image.get_solidity(blob: blob) float

Visszaadja a blob tömörségét (blob.pixels / convex_hull_area). Float, 0 – 1; az 1.0 azt jelenti, hogy a folt teljesen kitölti a konvex burkát.

image.get_convexity(blob: blob) float

Visszaadja a blob konvexitását (convex_hull_perimeter / blob.perimeter). Float, 0 – 1; az 1.0 tökéletesen konvex folt.

image.get_major_axis_line(blob: blob) line

Visszaad egy Line objektumot a blob főtengelye mentén (a minimális területű forgatott téglalap két főtengelye közül a hosszabbat).

image.get_minor_axis_line(blob: blob) line

Visszaad egy Line objektumot a blob melléktengelye mentén (a minimális területű forgatott téglalap két főtengelye közül a rövidebbet).

image.get_enclosing_circle(blob: blob) circle

Visszaad egy Circle objektumot, amely körülveszi a blob objektumot.

image.get_enclosed_ellipse(blob: blob) Tuple[int, int, int, int, int]

Visszaad egy 5 elemű (cx, cy, a, b, rotation) tuple-t, amely a blob köré írt minimális területű forgatott téglalapba beírt ellipszist írja le:

  • cx / cy – az ellipszis középpontja képpontban (egész).

  • a / b – féltengelyhosszak képpontban (egész).

  • rotation – az ellipszis elforgatása fokban (egész).

Ez egy egyszerű tuple, nem attrtuple, így a mezők csak index alapján érhetők el.

Konstansok

Képpontformátumok

Add át az alábbiak bármelyikét pixformat argumentumként az Image konstruktornak vagy a csi.CSI.pixformat() metódusnak.

image.BINARY: int

1 bit/képpont bitkép. A legkisebb formátum – belsőleg a küszöbölés és morfológia használja, ritkán rögzítik közvetlenül az érzékelőről.

image.GRAYSCALE: int

8 bit/képpont szürkeárnyalatos (egy bájt képpontonként). A leggyorsabb formátum a legtöbb gépi látás algoritmushoz (AprilTag, élkeresés, optikai áramlás).

image.RGB565: int

16 bit/képpont szín, 5 bit piros / 6 bit zöld / 5 bit kék elrendezésben. Az alapértelmezett színformátum.

image.BAYER: int

8 bit/képpont nyers Bayer-adat közvetlenül az érzékelőről. A legtöbb képfeldolgozó metódus nem érhető el Bayer képeken; akkor használd, ha igény szerint szeretnél debayerelni, vagy több képpontot tárolni kevesebb memóriában.

image.YUV422: int

4:2:2 króma-aldmintavételezett szín, két bájt képpontonként, képpontpáronként Y1, U, Y2, V elrendezésben. Csak néhány képfeldolgozó metódus működik közvetlenül YUV422-n.

image.JPEG: int

Tömörített JPEG puffer. A képpontszintű műveletek előbb Image.to_grayscale() vagy Image.to_rgb565() hívást igényelnek.

image.PNG: int

Tömörített PNG puffer. A képpontszintű műveletek előbb Image.to_grayscale() vagy Image.to_rgb565() hívást igényelnek.

Színpaletták

Add át az alábbiak bármelyikét a Image.to_rainbow(), Image.to_ironbow(), Image.draw_image() (color_palette=) metódusnak vagy a csi.CSI.color_palette() metódusnak egy szürkeárnyalatos kép színezéséhez.

image.PALETTE_RAINBOW: int

Sima szivárvány-színkör. Az OpenMV alapértelmezett palettája hőképekhez.

image.PALETTE_IRONBOW: int

Nemlineáris „ironbow” paletta, amely a FLIR Lepton hőkamera keresőjének megjelenését utánozza.

image.PALETTE_DEPTH: int

Mélységkép-paletta. Csak mélységérzékelő-támogatással rendelkező buildeken érhető el (a ToF folyamat – pl. OpenMV Cam AE3 vagy bármely kamera csatlakoztatott ToF Pmoddal).

image.PALETTE_EVT_DARK: int

Paletta a GENX320 eseménykamera képkockáinak sötét háttéren való megjelenítéséhez. Add át a csi.CSI.color_palette metódusnak, hogy a GENX320 illesztőprogram hisztogram módban színezett RGB565 képkockákat bocsásson ki, vagy a Image.draw_image() color_palette= argumentumának egy szürkeárnyalatos eseménykép színezésekor.

Csak GENX320-támogatással rendelkező buildeken érhető el (OpenMV Cam AE3 és a GENX320 Pmod).

image.PALETTE_EVT_LIGHT: int

Paletta a GENX320 eseménykamera képkockáinak világos háttéren való megjelenítéséhez. Ugyanaz a diszpécselés és elérhetőség, mint a PALETTE_EVT_DARK esetén.

Skálázási módok

Add át az alábbiak bármelyikét hint argumentumként a Image.draw_image(), Image.scale() vagy hasonló skálázási metódusoknak.

image.AREA: int

Területátlagoló skálázó. Kicsinyítéskor használatos; nagyításhoz a legközelebbi-szomszéd (Nearest-Neighbor) módszert használja.

image.BILINEAR: int

Bilineáris skálázó. Kicsinyítéskor aldmintavételez.

image.BICUBIC: int

Bikubikus skálázó. Magasabb minőségű, mint a BILINEAR, de lassabb. Kicsinyítéskor aldmintavételez.

Rajzolási / draw_image tippek

Bitenkénti VAGY-old össze ezek bármelyikét, és add át a Image.draw_image() hint argumentumaként.

image.VFLIP: int

Függőlegesen tükrözi a forrást rajzolás közben.

image.HMIRROR: int

Vízszintesen tükrözi a forrást rajzolás közben.

image.TRANSPOSE: int

Transzponálja (felcseréli az x/y-t) a forrást rajzolás közben.

image.CENTER: int

A forrást a célhoz középre igazítja. Az explicit x/y eltolások ezután a középponttól, nem pedig a bal felső saroktól számított eltolásokká válnak.

image.EXTRACT_RGB_CHANNEL_FIRST: int

Amikor egy RGB csatornát vonsz ki a Image.draw_image() metódussal, a csatornát a skálázás előtt vonja ki. E tipp nélkül a csatorna a skálázás után kerül kivonásra.

image.APPLY_COLOR_PALETTE_FIRST: int

Amikor színpalettát alkalmazol a Image.draw_image() metódussal, a palettát a skálázás előtt alkalmazza. E tipp nélkül a paletta a skálázás után kerül alkalmazásra.

image.SCALE_ASPECT_KEEP: int

A forrást úgy skálázza, hogy a célon belülre férjen a képarány megtartásával (eltérő arányok esetén fekete sávokat tesz).

image.SCALE_ASPECT_EXPAND: int

A forrást úgy skálázza, hogy kitöltse a célt a képarány megtartásával (eltérő arányok esetén levág).

image.SCALE_ASPECT_IGNORE: int

A forrást úgy skálázza, hogy kitöltse a célt, figyelmen kívül hagyva a képarányt.

image.BLACK_BACKGROUND: int

Közli az alfa-keverő útvonallal, hogy a cél ismerten fekete, így kihagyhatja a célképpont visszaolvasását. Felgyorsítja az alfa-effekteket frissen törölt puffereken.

image.ROTATE_90: int

Rövidítés a VFLIP | TRANSPOSE kombinációra (forgatás 90 fokkal az óramutató járásával megegyezően).

image.ROTATE_180: int

Rövidítés a HMIRROR | VFLIP kombinációra (forgatás 180 fokkal).

image.ROTATE_270: int

Rövidítés a HMIRROR | TRANSPOSE kombinációra (forgatás 270 fokkal az óramutató járásával megegyezően).

JPEG aldmintavételezés

Add át az alábbiak bármelyikét subsampling argumentumként a Image.to_jpeg(), Image.compress() vagy Image.save() metódusnak JPEG írásakor.

image.JPEG_SUBSAMPLING_AUTO: int

A króma-aldmintavételezést automatikusan választja a JPEG minőségbeállítás alapján.

image.JPEG_SUBSAMPLING_444: int

Kényszerített 4:4:4 króma-aldmintavételezés (nincs krómatömörítés).

image.JPEG_SUBSAMPLING_422: int

Kényszerített 4:2:2 króma-aldmintavételezés. Akkor ajánlott, amikor MJPEG-et streamelsz olyan harmadik féltől származó videolejátszókhoz, amelyek a 4:2:0-val hibásan viselkednek.

image.JPEG_SUBSAMPLING_420: int

Kényszerített 4:2:0 króma-aldmintavételezés.

Sablonegyeztetés

Add át az alábbiak egyikét search argumentumként a Image.find_template() metódusnak.

image.SEARCH_EX: int

Kimerítő keresés – a ROI minden pozícióját kiértékeli. A leglassabb, de garantáltan megtalálja a legjobb egyezést.

image.SEARCH_DS: int

Gyémánt keresés – durvától finomig haladó keresés, amely sokkal gyorsabb, mint a SEARCH_EX, de erősen önhasonló sablonokon elvétheti a globális optimumot.

Élkeresés

Add át az alábbiak egyikét algorithm argumentumként a Image.find_edges() metódusnak.

image.EDGE_CANNY: int

Canny élkereső – gradiensnagyság + nem-maximum elnyomás + hiszterézis. Magasabb minőségű, lassabb.

image.EDGE_SIMPLE: int

Küszöbölt felüláteresztő szűrős élkereső. Gyorsabb, de vastagabb, zajosabb éleket állít elő, mint az EDGE_CANNY.

ORB sarokdetektorok

Add át az alábbiak egyikét corner_detector argumentumként a Image.find_keypoints() metódusnak.

image.CORNER_FAST: int

FAST sarokdetektor. Gyorsabb, mint a CORNER_AGAST, de kevésbé pontos.

image.CORNER_AGAST: int

AGAST sarokdetektor. Lassabb, mint a CORNER_FAST, de stabilabb kulcspontokat állít elő.

AprilTag családok

Bitenkénti VAGY-old össze az alábbiak bármely kombinációját, és add át families argumentumként a Image.find_apriltags() metódusnak. Minden családot a saját build-opciója kapcsol be a firmware-ben; a nem támogatott családok futásidőben hiányoznak, nem pedig mindig-nullák.

image.TAG16H5: int

AprilTag 16h5 család (30 egyedi azonosító, 0 bites hibajavítás).

image.TAG25H9: int

AprilTag 25h9 család (35 egyedi azonosító, akár 3 bites hibajavítás).

image.TAG36H10: int

AprilTag 36h10 család (2320 egyedi azonosító, akár 3 bites hibajavítás).

image.TAG36H11: int

AprilTag 36h11 család (587 egyedi azonosító, akár 4 bites hibajavítás). A leggyakoribb család.

image.TAGCIRCLE21H7: int

AprilTag Circle21h7 család.

image.TAGCIRCLE49H12: int

AprilTag Circle49h12 család.

image.TAGCUSTOM48H12: int

AprilTag Custom48h12 család.

image.TAGSTANDARD41H12: int

AprilTag Standard41h12 család.

image.TAGSTANDARD52H13: int

AprilTag Standard52h13 család.

Vonalkód-szimbológiák

A BarCode.type mezőben jelentett értékek a Image.find_barcodes() által visszaadott bejegyzésekhez.

image.EAN2: int

EAN-2 kiegészítő vonalkód.

image.EAN5: int

EAN-5 kiegészítő vonalkód.

image.EAN8: int

EAN-8 vonalkód.

image.UPCE: int

UPC-E vonalkód.

image.ISBN10: int

ISBN-10 vonalkód.

image.UPCA: int

UPC-A vonalkód.

image.EAN13: int

EAN-13 vonalkód.

image.ISBN13: int

ISBN-13 vonalkód.

image.I25: int

Interleaved 2-of-5 vonalkód.

image.DATABAR: int

GS1 DataBar vonalkód.

image.DATABAR_EXP: int

GS1 DataBar Expanded vonalkód.

image.CODABAR: int

Codabar vonalkód.

image.CODE39: int

Code 39 vonalkód.

image.PDF417: int

PDF417 2D rétegzett vonalkód. A konstans a teljesség kedvéért létezik, de a vonalkód-dekódoló jelenleg nem valósítja meg a PDF417-et – az Image.find_barcodes() nem ad vissza ilyen típusú észleléseket.

image.CODE93: int

Code 93 vonalkód.

image.CODE128: int

Code 128 vonalkód.