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 visszaadottImageerre a pufferre hivatkozik.Fájlból. Adj át egy elérési utat az
Imagekonstruktornak (image.Image("/sd/photo.jpg")); a támogatott lemezformátumok a BMP, PPM/PGM, JPEG, PNG és az OpenMVImageIOfelvételi formátuma.ndarray-ből. Adj át egy float32
(h, w)vagy(h, w, 3)ndarrayobjektumot azImagekonstruktornak. A képpontok0.0 -- 255.0tartományból GRAYSCALE, illetve RGB565 képre vannak skálázva. Ezt arra használhatod, hogy azml(vagy bármelyulabfolyamat) tenzorkimenetét visszahozd egy rajzolható képbe.Üres puffer. Hozz létre egy
Imageobjektumot 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()vagyImage.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¶
- class Image – Image objektum
- class ImageIO – ImageIO objektum
- HaarCascade osztály – jellemzőleíró
- class Similarity – Similarity objektum
- Histogram osztály – Histogram objektum
- class Percentile – Percentile objektum
- Threshold osztály – Threshold objektum
- class Statistics – Statistics objektum
- Blob osztály – Blob objektum
- class Line – Line objektum
- Circle osztály – Circle objektum
- class Rect – Rectangle objektum
- class QRCode – QRCode objektum
- class AprilTag – AprilTag objektum
- DataMatrix osztály – DataMatrix objektum
- BarCode osztály – BarCode objektum
- Displacement osztály – Displacement objektum
- kptmatch osztály – Kulcspont-egyezés objektum
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 –
int0 – 1.szürkeárnyalatos –
int0 – 255.RGB –
(r, g, b)8 bites egészek tuple-ja (mindegyik 0 – 255).LAB –
(l, a, b)tuple, aholL0 – 100, azA/Bpedig -128 – 127.YUV –
(y, u, v)tuple, aholY0 – 255, azU/Vpedig -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.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_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_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_grayscale(value: Tuple[int, int, int]) int¶
YUV tuple konvertálása szürkeárnyalatos értékké.
Jellemzőleírók¶
- image.HaarCascade(path: str, stages: int = -1) Cascade¶
Betölt egy Haar Cascade-et, és visszaad egy
Cascadekezelőt azImage.find_features()használatához.A
pathlehet: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, vagyegy fájlrendszerbeli elérési út egy egyéni
.cascadebináris fájlhoz, amelyet az OpenMV cascade-konvertáló eszközei állítanak elő.
A
stagesazt választja meg, hány cascade-szakaszt értékeljen ki az észlelés során. A-1a 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
pathhelyen 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:ORB kulcspont-leíró – az
Image.find_keypoints(), majd azimage.save_descriptor()mentette.LBP leíró – az
Image.find_lbp(), majd azimage.save_descriptor()mentette.
- image.save_descriptor(descriptor: kp_desc | lbp_desc, path: str) None¶
Sorosítja a
descriptorobjektumot (egy ORB kulcspont- vagy LBP leírót) apathhelyen lévő fájlba az OpenMV leírófájl-formátumban. Ugyanez a fájl később újratölthető azimage.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
kptmatchobjektumot ad vissza, amely az egyező kulcspontok fürtjét írja le, vagyNoneértéket, ha egyik egyezés sem éri el athresholdkü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_outliersengedé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
blobtö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
blobkonvexitá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
Lineobjektumot ablobfő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
Lineobjektumot ablobmellé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
Circleobjektumot, amely körülveszi ablobobjektumot.
- image.get_enclosed_ellipse(blob: blob) Tuple[int, int, int, int, int]¶
Visszaad egy 5 elemű
(cx, cy, a, b, rotation)tuple-t, amely ablobkö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, Velrendezé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()vagyImage.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()vagyImage.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_palettemetódusnak, hogy a GENX320 illesztőprogram hisztogram módban színezett RGB565 képkockákat bocsásson ki, vagy aImage.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_DARKeseté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.
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.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.
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).
Sablonegyeztetés¶
Add át az alábbiak egyikét search argumentumként a Image.find_template() metódusnak.
É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.
Vonalkód-szimbológiák¶
A BarCode.type mezőben jelentett értékek a Image.find_barcodes() által visszaadott bejegyzésekhez.
- 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.