Microsoftin Kinect-anturi on oheislaite (suunniteltu XBox-ja windows-tietokoneille), joka toimii paljon Verkkokameran tavoin. RGB-kuvan lisäksi se tarjoaa kuitenkin myös syvyyskartan. Merkitys jokaisen pikselin nähnyt anturi, Kinect mittaa etäisyyttä anturin. Tämä tekee erilaisia tietokoneen näköongelmia, kuten taustan poisto, möykky havaitseminen, ja helpompaa ja hauskaa!
Kinect-anturi mittaa itse vain väriä ja syvyyttä. Kuitenkin, Kun tämä tieto on tietokoneessa, paljon muuta voidaan tehdä, kuten ”luuranko” seuranta (eli havaita malli henkilö ja seuranta hänen/hänen liikkeitä). Voit tehdä luurankoseurannan käyttämällä Thomas Lenglingin windows-vain Kinect v2 processing libray. Kuitenkin, Jos olet Mac ja kaikki mitä haluat on raakadataa Kinect, olet onnea! Tämä kirjasto käyttää libfreenect-ja libfreenect2-avoimen lähdekoodin ajureita näiden tietojen käyttämiseen Mac OS X: lle (windows-tuki tulossa pian).
- mitä laitteistoa tarvitsen?
- joitakin Lisähuomautuksia eri malleista:
- SimpleOpenNI
- olen valmis aloittamaan juuri nyt
- mitä on jalostus?
- mitä jos en halua käyttää prosessointia?
- mitä koodia kirjoitan?
- esimerkkejä
- Näytä RGB -, IR-ja Syvyyskuvat
- useita laitteita
- Point Cloud
- Keskimääräinen Pisteseuranta
- mitä puuttuu?
- FAQ
mitä laitteistoa tarvitsen?
ensin tarvitaan ”stand-alone” – kinekti. Sinun ei tarvitse ostaa Xboxia.
- itsenäinen Kinect-anturi v1. Uskon, että tämä tulee virtalähteen kanssa, joten et tarvitse erillistä adapteria, joka on lueteltu seuraavaksi. Jos sinulla on kuitenkin Xboxin mukana tullut kinect v1, se ei sisällä Kinect-anturin virtalähdettä.
- itsenäinen Kinect-anturi v2. Tarvitset todennäköisesti myös Kinect-sovittimen Windowsille. Älä heitetään pois, vaikka siinä lukee windows, tämän avulla voit liittää sen Maciin USB: n kautta. Lopuksi, sinun kannattaa myös varmistaa, että tietokone tukee USB 3. Useimmissa nykyaikaisissa koneissa on, mutta jos olet epävarma, voit lukea lisää täältä Mac OS X: lle.
joitakin Lisähuomautuksia eri malleista:
- Kinect 1414: tämä on alkuperäinen kinect ja toimii tällä sivulla dokumentoidun kirjaston kanssa Processing 3.0 beta-sarjassa.
- Kinect 1473: tämä näyttää identtiseltä 1414: n kanssa, mutta on päivitetty malli. Sen pitäisi toimia tämän kirjaston kanssa, mutta minulla ei ole sellaista testattavana. Kerro minulle, jos se tekee tai ei!
- Kinect for Windows version 1:???? Apua? Toimiiko tämä?
- Kinect for Windows-versio 2: Tämä on upouusi kinect kaikkine XBox One-Kinectistä löytyvine ominaisuuksineen. Toimii myös tämän kirjaston kanssa!
SimpleOpenNI
voisi myös harkita SimpleOpenNI-kirjaston käyttöä ja lukea Greg Borensteinin Making Things See-kirjan. Opennissa on ominaisuuksia(luurankoseuranta, eleentunnistus jne.) jotka eivät ole saatavilla tässä kirjastossa. Valitettavasti, Openni on äskettäin ostanut Apple ja, vaikka luulin, että se oli suljettu, alas siellä näyttää olevan joitakin pyrkimyksiä elvyttää sitä!. On epäselvää, mikä on Opennien ja Simpleopennien tulevaisuus.
olen valmis aloittamaan juuri nyt
helpoin tapa asentaa kirjasto on Processing Contributions Manager Sketch → tuo kirjastot → lisää kirjasto ja etsi ”Kinect”. Painike näkyy merkitty ”asentaa”.Jos haluat asentaa sen manuaalisesti lataa viimeisin julkaisu ja pura se kirjastot-kansioon. Käynnistä käsittely uudelleen, avaa yksi esimerkeistä esimerkit-kansiossa ja olet hyvä mennä!
mitä on jalostus?
Processing on avoimen lähdekoodin ohjelmointikieli ja-ympäristö ihmisille, jotka haluavat luoda kuvia, animaatioita ja vuorovaikutuksia. Alun perin kehitetty toimimaan ohjelmiston luonnoskirja ja opettaa perusteet tietokoneohjelmoinnin sisällä visuaalisessa kontekstissa, käsittely on myös kehittynyt työkalu tuottaa valmiin ammatillisen työn. Nykyään on kymmeniätuhansia opiskelijoita, taiteilijoita, suunnittelijoita, tutkijoita ja harrastajia, jotka käyttävät prosessointia oppimiseen, prototyyppeihin ja tuotantoon.
mitä jos en halua käyttää prosessointia?
jos olet sinut C++: n kanssa, kannattaa harkita openframeworksin tai Cinderin käyttöä Kinectin kanssa. Näissä ympäristöissä on joitakin lisäominaisuuksia ja saatat myös saada C++ – nopeusedun syvyystietojen käsittelyssä jne.:
- ofxKinect
- Kinect CinderBlock
- lisää resursseja: OpenKinect-projekti
mitä koodia kirjoitan?
ensimmäinen asia on sisällyttää oikeat tuontilausunnot koodin alkuun:
sekä viittaus Kinect
kohteeseen, ts.
sitten setup()
voit alustaa kyseisen kinect-olion:
jos käytät Kinect v2: ta, käytä sen sijaan Kinect2-objektia.
kun olet tehnyt tämän, voit aloittaa pääsyn kinect-anturin tietoihin. Tällä hetkellä kirjasto tuo aineistoa saataville viidellä tavalla:
-
PImage (RGB)
kinect-videokamerasta. -
PImage (grayscale)
kinect IR-kamerasta. -
PImage (grayscale)
jokaisen pikselin kirkkaus kartoitettuna syvyyteen (kirkkaampi = lähempänä). -
PImage (RGB)
jokaisen pikselin värisävy kartoitettuna syvyyteen. -
int array
raakojen syvyystietojen kanssa (11 bittinumeroa välillä 0-2048).
katsotaan näitä yksi kerrallaan. Jos haluat käyttää Kinectiä aivan kuten tavallista vanhaa nettikameraa, voit käyttää videokuvaa Pimityksenä!
voit kuitenkin kysyä tätä kuvaa kohdasta draw()
, jos voit käyttää myös numeroa videoEvent()
tietääksesi, milloin uusi kuva on saatavilla.
jos haluat IR-kuvan:
Kinectillä v1 ei saa sekä videokuvaa että IR-kuvaa. Ne molemmat siirretään takaisin kautta getveoimage () joten kumpi oli viimeksi käytössä on yksi saat. Kinect v2: lla ne ovat kuitenkin molemmat saatavilla erillisinä menetelminä:
nyt, jos haluat syvyyskuvan, voit pyytää harmaasävykuvan:
sekä raaka syvyystiedot:
kinect v1: n raw-syvyysarvot ovat välillä 0-2048, kinect v2: n osalta alue on välillä 0-4500.
värisyvyyskuvassa käytetään kinect.enableColorDepth(true);
. Ja aivan kuten videokuvan kanssa, on syvyystapahtuma, johon pääsee tarvittaessa.
valitettavasti b / c RGB-kamera ja IR-kamera eivät fyysisesti sijaitse samassa paikassa, on stereonäköongelma. Pikseli XY yhdessä Kuvassa ei ole sama XY kuvassa kamerasta tuumaa oikealle. Kinect v2 tarjoaa niin sanotun” rekisteröidyn ” kuvan, joka kohdistaa kaikki syvyysarvot RGB-kameran kanssa. Tähän pääsee käsiksi seuraavasti:
lopuksi kinect v1: ssä (mutta ei v2: ssa) kamerakulmaa voi säätää myös setTilt()
– menetelmällä.
joten, siinä sinulla on se, tässä ovat kaikki hyödylliset toiminnot, joita saatat tarvita Processing kinect-kirjaston käyttämiseen:
-
initDevice()
— aloita kaikki (video, syvyys, IR) -
activateDevice(int)
– aktivoi tietty laite, kun useita laitteita yhdistetään -
initVideo()
— käynnistä vain video -
enableIR(boolean)
— IR-kameran kuvan kytkeminen päälle tai pois päältä (vain v1) -
initDepth()
— vain aloitussyvyys -
enableColorDepth(boolean)
— kytke syvyysarvot päälle tai pois päältä värikuvana -
enableMirror(boolean)
— peilaa kuva ja syvyystiedot (vain v1) -
PImage getVideoImage()
— Tartu RGB (tai IR v1) videokuvan -
PImage getIrImage()
— ota IR-kuva (vain v2) -
PImage getDepthImage()
— nappaa syvyyskartta kuva -
PImage getRegisteredImage()
— nappaa rekisteröity syvyyskuva (vain v2) -
int getRawDepth()
— nappaa raa ’ at syvyystiedot -
float getTilt()
— saada nykyinen anturi kulma (välillä 0 ja 30 astetta) (vain v1) -
setTilt(float)
— säädä anturikulma (0-30 astetta) (vain v1)
kaikkea muuta, voit myös katsoa javadoc viittaus.
esimerkkejä
sekä v1: lle että v2: lle on neljä perusesimerkkiä.
Näytä RGB -, IR-ja Syvyyskuvat
koodi v1:Rgbdeptest
koodi v2:RGBDepthTest2
tässä esimerkissä käytetään kaikkia edellä lueteltuja toimintoja kinect-anturin tietojen näyttämiseen.
useita laitteita
sekä v1-että v2-laitteissa on useita kinect-tukia.
Code for v1:MultiKinect
Code for v2: MultiKinect2
Point Cloud
Code for v1: PointCloud
Code for v2: PointCloud
Code for V2: PointCloud
Here, we ’ re doing something a bit fancier. Ensinnäkin käytämme prosessoinnin 3D-ominaisuuksia pisteiden piirtämiseen avaruudessa. Kannattaa tutustua kääntämiseen(), kiertämiseen(), pushmatrixiin (), popmatrixiin (). Tämä opetusohjelma on myös hyvä paikka aloittaa. Lisäksi esimerkissä käytetään Pvektoria kuvaamaan 3D-avaruudessa olevaa pistettä. Lisää täällä: PVector opetusohjelma.
tämän esimerkin varsinainen työ ei kuitenkaan tule minulta ollenkaan. Kinektin raa ’ at syvyysarvot eivät ole suoraan verrannollisia fysikaaliseen syvyyteen. Pikemminkin ne skaalautuvat syvyyden käänteisluvulla tämän kaavan mukaan:
sen sijaan, että tämä laskenta koko ajan, voimme precompute kaikki nämä arvot hakutaulukossa, koska on olemassa vain 2048 syvyysarvoja.
Kiitos Matthew Fisher edellä kaava. (Huomautus: jotta tulokset olisivat tarkempia, sinun pitäisi kalibroida erityinen kinect laite, mutta kaava on tarpeeksi lähellä minua, joten olen kiinni sitä nyt. Lisää kalibroinnista hetken kuluttua.)
lopuksi voidaan piirtää joitakin pisteitä syvyysarvojen perusteella metreinä:
Keskimääräinen Pisteseuranta
Kinectin todellinen taika piilee sen tietokoneen näkökyvyssä. Syvyystietoa, voit tehdä kaikenlaisia hauskoja asioita, kuten sanoa: ”tausta on mitään yli 5 jalkaa. Älä välitä siitä!”Ilman syvyyttä taustojen poistoon liittyy kaikenlaisia huolellisia pikselivertailuja. Nopeana demonstrointina tästä ideasta tässä on hyvin perusesimerkki, joka laskee minkä tahansa pikselin keskimääräisen xy-sijainnin tietyn syvyyskynnyksen edessä.
v1: n lähde: keskiarvo
v2: n lähde: Averagepointracking2
tässä esimerkissä ilmoitan kaksi muuttujaa laskemaan yhteen kaikki asianmukaiset x: t ja y: T ja yhden muuttujan pitämään kirjaa siitä, kuinka monta niitä on.
sitten, aina kun löydämme tietyn pisteen, joka noudattaa meidän kynnys, lisään X ja y summa:
kun olemme valmiita, laskemme keskiarvon ja piirrämme pisteen!
mitä puuttuu?
- kaikkea seurataan github-ongelmien kautta.
FAQ
- mitä syvyyskuvassa (v1) on varjoja? Kinect-Varjodiagrammi
- mikä on Kinectin näkemä syvyysalue? (v1) ~0,7–6 metriä tai 2,3–20 jalkaa. Huomaa, että saat mustia pikseleitä (tai raw-syvyysarvo 2048) molemmissa elementeissä, jotka ovat liian kaukana ja liian lähellä.