a Microsoft Kinect érzékelő egy perifériaeszköz (XBox és windows PC-k számára tervezve), amely webkamerához hasonlóan működik. Az RGB kép biztosítása mellett azonban mélységtérképet is nyújt. A Kinect az érzékelő által látott minden Pixelhez méri az érzékelőtől való távolságot. Ez teszi a különböző számítógépes látás problémák, mint a háttér eltávolítása, blob felismerés, és több egyszerű és szórakoztató!
maga a Kinect érzékelő csak a színt és a mélységet méri. Azonban, ha ez az információ a számítógépen van, sokkal többet lehet tenni, mint a “csontváz” követés (azaz egy személy modelljének észlelése és mozgásának nyomon követése). Ehhez csontváz követés akkor kell használni Thomas Lengling csak windows Kinect v2 feldolgozó libray. Ha azonban Mac-et használ, és csak a Kinect nyers adatait szeretné, akkor szerencséje van! Ez a könyvtár libfreenect és libfreenect2 nyílt forráskódú illesztőprogramokat használ az adatok eléréséhez Mac OS X rendszeren (windows támogatás hamarosan).
- milyen hardverre van szükségem?
- néhány további megjegyzés a különböző modellekről:
- SimpleOpenNI
- készen állok az indulásra
- mi a feldolgozás?
- mi van, ha nem akarom használni a feldolgozást?
- milyen kódot írjak?
- példák
- kijelző RGB, IR, és mélység képek
- több eszköz
- Point Cloud
- átlagos Pontkövetés
- mi hiányzik?
- GYIK
milyen hardverre van szükségem?
először szüksége van egy “önálló” kinectre. Nem kell Xbox-ot vásárolni.
- önálló Kinect érzékelő v1. Úgy gondolom, hogy ez a tápegységgel érkezik, így nincs szüksége külön adapterre a következő listában. Ha azonban Xbox konzolhoz kapott kinect v1-gyel rendelkezik, az nem tartalmazza a Kinect érzékelő tápegységét.
- önálló Kinect érzékelő v2. Valószínűleg szüksége van a Windows Kinect adapterére is. Ne dobja le, bár azt mondja, hogy a windows, Ez lehetővé teszi, hogy USB-n keresztül csatlakoztassa a mac-hez. Végül azt is meg kell győződnie arról, hogy számítógépe támogatja az USB 3-at. A legtöbb modern gép igen, de ha nem biztos benne, többet megtudhat itt a Mac OS X-hez.
néhány további megjegyzés a különböző modellekről:
- Kinect 1414: ez az eredeti kinect, és az ezen az oldalon dokumentált könyvtárral működik a Processing 3.0 béta sorozatban.
- Kinect 1473: ez ugyanúgy néz ki, mint az 1414, de frissített modell. Működnie kell ezzel a könyvtárral, de nincs tesztelnivalóm. Kérem, tudassa velem, ha nem, vagy nem!
- Kinect Windows 1-es verzióhoz: ???? Segíteni? Ez működik?
- Kinect for Windows version 2: Ez a vadonatúj kinect az XBox One Kinect összes funkciójával. Ezzel a könyvtárral is működik!
SimpleOpenNI
megfontolhatja a SimpleOpenNI könyvtár használatát is, és elolvashatja Greg Borenstein make Things See book című könyvét. Az OpenNI rendelkezik funkciókkal (csontvázkövetés, gesztusfelismerés stb.), amelyek nem állnak rendelkezésre ebben a könyvtárban. Sajnos az OpenNI-t nemrégiben vásárolta meg az Apple, és bár azt hittem, hogy leállt, Úgy tűnik, hogy vannak erőfeszítések annak újjáélesztésére!. Nem világos, hogy mi lesz az OpenNI és a SimpleOpenNI jövője.
készen állok az indulásra
a könyvtár telepítésének legegyszerűbb módja a Processing Contributions Manager Sketch (vázlat). Megjelenik egy “telepítés”feliratú gomb.Ha manuálisan szeretné telepíteni, Töltse le a legfrissebb kiadást, majd bontsa ki a könyvtárak mappába. Indítsa újra a feldolgozást, nyissa meg az egyik példát a példák mappában, és jól megy!
mi a feldolgozás?
a Processing egy nyílt forráskódú programozási nyelv és környezet azok számára, akik képeket, animációkat és interakciókat szeretnének létrehozni. Kezdetben kifejlesztett, hogy szolgáljon a szoftver vázlatfüzet és tanítani alapjait számítógépes programozás vizuális kontextusban, feldolgozás is fejlődött egy eszköz generáló kész szakmai munka. Ma több tízezer diák, művész, tervező, kutató és hobbista használja a feldolgozást tanuláshoz, prototípuskészítéshez és gyártáshoz.
mi van, ha nem akarom használni a feldolgozást?
ha jól érzi magát a C++ – ban, azt javaslom, fontolja meg az openFrameworks vagy a Cinder használatát a Kinect segítségével. Ezeknek a környezeteknek van néhány további funkciója, és a C++ sebesség előnye is lehet A mélységi adatok feldolgozásakor stb.:
- ofxKinect
- Kinect CinderBlock
- további források innen: az OpenKinect projekt
milyen kódot írjak?
az első dolog az, hogy tartalmazza a megfelelő import utasításokat a kód tetején:
csakúgy, mint egy Kinect
objektumra való hivatkozás, azaz.
ezután a setup()
– ben inicializálhatja a kinect objektumot:
ha Kinect v2-t használ, használjon inkább Kinect2-objektumot.
miután ezt megtette, elkezdheti elérni az adatokat a kinect érzékelőből. Jelenleg a könyvtár öt módon teszi elérhetővé az adatokat:
-
PImage (RGB)
a kinect videokamerából. -
PImage (grayscale)
a kinect infravörös kamerából. -
PImage (grayscale)
minden pixel fényerejét mélységig leképezve (világosabb = közelebb). -
PImage (RGB)
minden pixel színárnyalatát mélységig leképezve. -
int array
nyers mélységi adatokkal (11 bites számok 0 és 2048 között).
nézzük meg ezeket egyenként. Ha a Kinectet ugyanúgy szeretné használni, mint egy szokásos régi webkamerát, akkor a videoképet PImage-ként érheti el!
egyszerűen kérheti ezt a képet draw()
– ban, azonban ha a videoEvent()
– et is használhatja, hogy megtudja, mikor érhető el új kép.
ha az IR képet szeretné:
a kinect v1 nem tudja megszerezni mind a videoképet, mind az infravörös képet. Mindkettőt a getvideoimage() segítségével adják vissza, így amelyik Legutóbb engedélyezve volt, az lesz az, amit kap. A Kinect v2-vel azonban mindkettő külön módszerként kapható:
most, ha szeretné a mélységi képet, kérheti a szürkeárnyalatos képet:
valamint a nyers mélységi adatok:
a kinect v1 esetében a nyers mélységértékek 0 és 2048 között vannak, a kinect v2 esetében a tartomány 0 és 4500 között van.
a színmélység képhez használja a kinect.enableColorDepth(true);
elemet. Csakúgy, mint a videókép esetében, van egy mélységi esemény, amelyhez szükség esetén hozzáférhet.
sajnos b / c az RGB kamera és az IR kamera fizikailag nem ugyanazon a helyen található, sztereó látási probléma van. Pixel XY egy kép nem ugyanaz XY egy képet egy kamera egy hüvelyk jobbra. A Kinect v2 úgynevezett “regisztrált” képet kínál, amely az összes mélységi értéket igazítja az RGB kamerákhoz. Ez a következőképpen érhető el:
végül a kinect v1 (de nem v2) esetében a kamera szögét a setTilt()
módszerrel is beállíthatja.
tehát itt van, itt található az összes hasznos funkció, amelyre szüksége lehet A Kinect feldolgozó könyvtár használatához:
-
initDevice()
— indítsa el mindent (videó, mélység, IR) -
activateDevice(int)
– egy adott eszköz aktiválása, ha több eszköz csatlakozik -
initVideo()
— csak videó indítása -
enableIR(boolean)
— az infravörös kamera képének be-vagy kikapcsolása (csak v1 esetén) -
initDepth()
— csak indítási mélység -
enableColorDepth(boolean)
— a mélységértékek be-vagy kikapcsolása színes képként -
enableMirror(boolean)
— tükrözze a kép-és mélységadatokat (csak v1) -
PImage getVideoImage()
— fogja meg az RGB (vagy IR for v1) videoképet -
PImage getIrImage()
— fogja meg az IR képet (csak v2) -
PImage getDepthImage()
— fogja meg a mélységtérképet kép -
PImage getRegisteredImage()
— fogja meg a regisztrált mélységi képet (csak v2) -
int getRawDepth()
— fogja meg a nyers mélységi adatokat -
float getTilt()
— szerezd meg az aktuális érzékelő szögét (0 és 30 fok között) (csak v1) -
setTilt(float)
— az érzékelő szögének beállítása (0 és 30 fok között) (csak v1)
minden máshoz megnézheti a javadoc referenciát is.
példák
négy alapvető példa van mind a v1, mind a v2 esetében.
kijelző RGB, IR, és mélység képek
Kód v1: RGBDepthTest
Kód v2:RGBDepthTest2
ez a példa a fent felsorolt összes funkciót használja a kinect érzékelő adatainak megjelenítéséhez.
több eszköz
mind a v1, mind a v2 több kinect támogatással rendelkezik.
a v1 kódja:MultiKinect
a v2 kódja:MultiKinect2
Point Cloud
a v1 kódja: PointCloud
a v2 kódja: PointCloud
itt egy kicsit kedvesebb dolgot csinálunk. Először is, a feldolgozás 3D-s képességeit használjuk, hogy pontokat rajzoljunk az űrben. Érdemes megismerkednie a fordítás(), forgatás(), pushMatrix (), popMatrix (). Ez az oktatóanyag szintén jó hely a kezdéshez. Ezenkívül a példa Pvektort használ a 3D-s tér egy pontjának leírására. További itt: PVector bemutató.
ennek a példának a valódi munkája azonban egyáltalán nem tőlem származik. A kinect nyers mélységértékei nem egyenesen arányosak a fizikai mélységgel. Inkább a mélység inverzével skálázódnak e képlet szerint:
ahelyett, hogy ezt a számítást mindig elvégeznénk, ezeket az értékeket előre kiszámíthatjuk egy keresési táblázatban, mivel csak 2048 mélységérték van.
köszönet Matthew Fishernek a fenti képletért. (Megjegyzés: ahhoz, hogy az eredmények pontosabbak legyenek, kalibrálnia kell az adott kinect eszközt, de a képlet elég közel van hozzám, ezért egyelőre ragaszkodom hozzá. További információ a kalibrálásról egy pillanat alatt.)
végül néhány pontot rajzolhatunk a mélységértékek alapján méterben:
átlagos Pontkövetés
a kinect igazi varázsa a számítógépes látás képességeiben rejlik. A mélységi információkkal mindenféle szórakoztató dolgot megtehet, például azt mondhatja:” a háttér bármi túl van 5 láb. Ne törődj vele!”Mélység nélkül a háttér eltávolítása mindenféle gondos pixel-összehasonlítást magában foglal. Ennek az ötletnek a gyors bemutatásaként itt van egy nagyon alapvető példa, amely kiszámítja bármely Pixel átlagos XY helyét egy adott mélységi küszöb előtt.
forrás a v1-hez: AveragePointTracking
forrás a v2-hez: AveragePointTracking2
ebben a példában két változót deklarálok, hogy összeadjam az összes megfelelő x – et és y-t, és egy változót, hogy nyomon kövessem, hány van.
aztán, amikor találunk egy adott pontot, amely megfelel a küszöbünknek, hozzáadom az X-et és az y-t az összeghez:
ha végeztünk, kiszámoljuk az átlagot és rajzolunk egy pontot!
mi hiányzik?
- minden nyomon keresztül github kérdések.
GYIK
- milyen árnyékok vannak a mélységi képen (v1)? Kinect Árnyékdiagram
- mekkora mélységtartományt lát a kinect? (v1) ~0,7 – 6 méter vagy 2,3-20 láb. Megjegyzés: fekete pixeleket (vagy 2048-as nyers mélységértéket) fog kapni mindkét túl távoli és túl közeli elemnél.