Streszczenie

W tym artykule zbadamy, w jaki sposób Microsoft Kinect można zmodyfikować, aby funkcjonować jako kamera na podczerwień (IR). Kinect jest zwykle znany jako kamera głębokości, ale przy niektórych modyfikacjach może przechwytywać obrazy IR. Blokując projektora IR i dodając zewnętrzne lampy IR, możemy umożliwić Kinect wykrywanie i rejestrowanie światła podczerwieni. Oto kluczowe punkty omówione w tym artykule:

  1. Kinect jest peryferyjną konsoli Xbox 360, która umożliwia użytkownikom interakcję bez korzystania z kontrolera.
  2. Kinect to kamera głębokości, co oznacza, że ​​może obliczać odległości między sobą i obiektami w polu widzenia.
  3. Modyfikując Kinect, możemy go użyć jako kamery IR do przechwytywania obrazów IR.
  4. Komponenty Kinect obejmują projektor IR, kamerę IR i kamerę RGB.
  5. Projektor IR emituje siatkę kropek IR na obiektach, które kamera IR wykrywa do obliczania obrazów głębokości.
  6. Szczegółowy opis Kinect i jego potencjalnych zastosowań można znaleźć w książce „Making Things See” Grega Borensteina.
  7. Aby podłączyć Kinect z komputerem, musimy zainstalować określone oprogramowanie i biblioteki, takie jak Openni, Nite, Sensor i Sensorkinect.
  8. Po instalacji możemy zweryfikować sukces, uruchamiając przykładowe skrypty podczas przetwarzania.
  9. Aby zablokować projektor IR, możemy utworzyć opaskę na oczy za pomocą taśmy klejącej i rzepli.
  10. Ponieważ blokowanie projektora IR wpływa na widoczność IR, należy dodać zewnętrzne lampy IR, aby zapewnić wystarczające oświetlenie IR.
  11. Aby zbudować lampy IR, możemy podążać za schematem obwodu i obliczyć wartości rezystancji dla diod LED.

Pytania i odpowiedzi

P1: Czego jest znana przede wszystkim?

A1: Kinect jest znany przede wszystkim jako kamera głębokości, zdolna do obliczania odległości między obiektami i siebie.

Q2: Jak można zmodyfikować kinektu, aby funkcjonować jako kamera na podczerwień?

A2: Kinect można zmodyfikować, blokując projektor IR i dodanie zewnętrznych lamp IR w celu przechwytywania obrazów podczerwieni.

P3: Jakie są elementy kinektu?

A3: Składniki Kinect obejmują projektor IR, kamerę IR i aparat RGB.

Q4: W jaki sposób obrazy głębokości obliczeniowej Kinect?

A4: Kinect oblicza obrazy głębokości, emitując siatkę kropek IR na obiektach, które kamera IR wykrywa i używa do obliczania odległości.

P5: Czy są jakieś zalecane zasoby do dowiedzenia się więcej o Kinect?

A5: Tak, „Making Things See” Grega Borensteina zawiera szczegółowy opis Kinect i jego potencjalnych zastosowań.

P6: Jakie oprogramowanie i biblioteki są zobowiązane do podłączenia kinect do komputera?

A6: Niezbędne oprogramowanie i biblioteki obejmują Openni, Nite, Sensor i Sensorkinect.

P7: Jak możemy zweryfikować udaną instalację oprogramowania Kinect?

A7: Uruchamiając przykładowe skrypty w przetwarzaniu, takie jak głębokość i głębokość, możemy sprawdzić, czy instalacja się powiodła.

P8: Jak można zablokować projektor IR Kinect?

A8: Opaski można utworzyć za pomocą taśmy klejącej i rzepli do przykrycia i blokowania projektora IR.

P9: Dlaczego konieczne jest dodanie zewnętrznych lamp IR?

A9: Blokowanie projektora IR zmniejsza widoczność IR, więc zewnętrzne lampy IR są konieczne, aby zapewnić wystarczające oświetlenie IR do przechwytywania obrazów IR.

P10: Jak możemy zbudować lampy IR w celu poprawy widoczności IR?

A10: Po schemacie obwodu i obliczaniu wartości rezystancji dla diod LED, możemy zbudować lampy IR, aby zwiększyć widoczność IR.

Wniosek

W tym artykule zbadałem, w jaki sposób Microsoft Kinect można zmodyfikować, aby funkcjonować jako kamera na podczerwień. Dzięki odpowiednim modyfikacjom i dodatkom Kinect może uchwycić obrazy w podczerwieni i zapewnić nowe możliwości dla różnych projektów. Ten projekt pozwala nam wykorzystać potencjał Kinect poza jego tradycyjnymi zastosowaniami, pokazując jego wszechstronność i możliwość rozszerzenia.

Korzystanie z Kinect jako kamery na podczerwień

Borenstein, Greg, Sprawienie, by wszystko się widzi, O’Reilly Media, Inc., 978-1-449-30707-3, styczeń 2012.

Czy Kinect używa podczerwieni

Оjed

Ыы зарегистрир John. С помощю этой страницы ыы сожем оRipееделить, что запросы оRтравляете имено ыы, а не роvert. Почем это могло пRроизойиS?

Эта страница отображается тех слччаях, когда автоматическими системамgz которые наршают усовия исполззования. Страница перестанеura. До этого момента для исползования слжжж Google неоtoś.

Источником запросов может слжить ведоносное по, подкbarów. ыылку заRzy. Еarag ы исползеете общий доступ и интернет, проблема может ыть с компюююеyn с таким жж жж жесом, кк у комszczeюююе000. Обратитеunks к соем системном адинистратору. Подроlit.

Проверка по слову может также появаятьenia, еaсли ы водите сложные ззапры, оind обычно enia оиизи инenia оtoś еами, или же водите заlektora.

Korzystanie z Kinect jako kamery na podczerwień

Ten projekt pokaże, w jaki sposób Microsoft Kinect można zmodyfikować do użycia jako kamera na podczerwień (IR).

  • Wymagany czas: 2-3 godziny
  • Wydrukuj ten projekt

Korzystanie z Kinect jako kamery na podczerwień

Damon Conover

Damon Conover

Kinect to peryferyjna konsoli Xbox 360, która pozwala użytkownikowi interakcja z Xbox 360 bez dotykania kontrolera. Ogólny opis kinecta polega na tym, że jest to kamera głębokości. Oznacza to, że możesz umieścić przed nim obiekty, a on obliczy odległość od niego do obiektów, tworząc w ten sposób obraz głębokości. Dlatego Kinect może zapewnić lokalizacje obiektów na obrazie względem siebie, a informacje te mogą być wykorzystywane w różnych projektach. Ponadto kinekt zawiera wiele komponentów, które z niewielkimi modyfikacjami mogą być używane do nowych celów. Jako przykład ten projekt pokaże, w jaki sposób Kinect może być używany jako kamera na podczerwień (IR).

Aby uzyskać szczegółowy opis działania Kinect i jak można go używać w różnych projektach, zalecam przeczytanie Sprawienie, by wszystko się widzi Greg Borenstein (http: // sklep.Oreilly.com/produkt/06369200…). Obraz w kroku 1 pokazuje komponenty kinektu, które są niezbędne do zrozumienia tego projektu. Projektor IR świeci na kropki IR na obiektach przed nim. Nie jesteśmy w stanie zobaczyć kropek, ale kamera IR może je wykryć. Za pomocą wzoru kropek na każdym obiekcie kinect jest w stanie obliczyć obraz głębokości. Ostatecznym elementem jest aparat RGB podobny do standardowej kamery internetowej.

Kroki projektu

Zainstaluj oprogramowanie niezbędne do podłączenia kinect do komputera

Postępuj zgodnie z instrukcjami specyficznymi dla platformy, aby:

Zainstaluj sterowniki Openni, Nite, Sensor i Sensorkinect

Zainstaluj bibliotekę Simpleopenni do przetwarzania

Sprawdź, czy instalacja się powiodła

Rozpocznij przetwarzanie i uruchom przykłady głębokości i głębokiej podczerwień.

Zapewnij zasilanie Kinect i podłącz ją do komputera za pośrednictwem portu USB.

Przejdź do pliku → Przykłady → Wprowadzone biblioteki → Simpleopenni → Openni.

Kliknij dwukrotnie przykład, który chcesz uruchomić (na przykład głębokofrurowany), a przykładowy skrypt zostanie otwarty.

Kliknij przycisk Uruchom, a obraz pojawi się na ekranie. W przypadku skryptu głębokiego obrazu głębokości będzie po lewej stronie, a obraz IR będzie po prawej stronie, jak pokazano po lewej stronie.

Zablokuj projektor IR

Jak widać w poprzednim kroku, obraz IR wytworzony przez skrypt głębokiej podczerwień zawiera wzór kropek, który chcemy usunąć.

Aby to zrobić, utwórz opaskę na oczy, aby pokryć projektor IR.

Weź dwa paski taśmy klejącej, każdy dłużej niż 9 cali, i umieść jeden tak, aby lekko pokrywa się drugi. Następnie powtórz za pomocą dwóch kolejnych pasków taśmy klejącej.

Weź dwa paski podwójnej taśmy klejącej i umieść je razem.

Wytnij wynikowy pasek do 9 cali długości.

Umieść podkładki Velco na jednym końcu paska, owinąć pasek wokół kinektu, pokrywając projektor IR i umieść przeciwne podkładki Velco, tak aby pasek był mocno trzymany, jak pokazano po lewej stronie.

Zbuduj lampy IR

Teraz, gdy projektor IR został zablokowany, kamera IR nie ma już wystarczającej ilości światła IR, aby wygenerować dobry obraz.

Dlatego należy dodać zewnętrzne oświetlenie IR. Schemat obwodu po lewej stronie pokazuje jeden możliwy konstrukcja dla dwóch lamp IR.

Podłącz zasilanie DC do gniazda zasilania i zmierz jego napięcie (VDC) za pomocą multimetru. W przypadku mojego zasilania VDC = 15.6 v.

Przeglądaj typowe napięcie do przodu (VF) i maksymalny prąd do przodu (jeśli, maks.) LED. Mój był VF = 1.Odpowiednio 5 V i jeśli = 20 mA.

Oblicz rezystancję (r1 = r2 = r3 = r4) niezbędne do ograniczenia prądu przez każdą serię sześciu diod LED. Użyłem rezystorów 360 Ω. R> ((VDC – (# LED)*vf)/if)

Zbuduj lampy IR (ciąg dalszy)

Na połowie płytki drukowanej umieść sześć diod LED i jeden rezystor. Przewody lutownicze łączące diody LED, katoda do anody i rezystora. Powtórz dla drugiej połowy PCB. Następnie lutuj przewód łączący bezpłatne anody i kolejny przewód łączący wolny koniec rezystorów.

Lutować długi, czerwony drut do podłączonych anod i długi, czarny drut do podłączonych rezystorów.

(Opcjonalnie) Użyj Sugru, aby przytrzymać długie przewody na PCB, aby zapewnić pewne odkształcenie.

Poke otwory na dnie plastikowej kubka, zasil przewody otwór i mocno wciśnij PCB do kubka. Jeśli PCB nie pasuje ciasno, użyj Sugru, aby ją przytrzymać.

Powtórz poprzednie cztery kroki dla drugiej lampy.

Zbuduj kontroler intensywności lampy

Użyj zacisków do pomiaru rozmiarów otworów niezbędnych do zamontowania dwóch doniczek, przełączania, uchwytu bezpiecznika i podnośnika.

Wywierć otwory w obudowie projektu i zamontuj sprzęt. Wywierć także dwa małe otwory, aby przewody mogły wejść. Planując, gdzie umieścić każdą dziurę, pamiętaj, gdzie każda część będzie siedziała w obudowie, aby upewnić się, że wszystko pasuje.

Będziesz musiał otworzyć otwór dla gniazda zasilania za pomocą narzędzia Dremel lub nożem.

Umieść Sugru na wewnętrznej i na zewnątrz obudowy, aby utrzymać gniazdo na miejscu.

Zbuduj kontroler intensywności lampy (ciąg dalszy)

Obróć każdy garnek do pozycji, która będzie niskim ustawieniem, a następnie użyj multimetru’S Tester ciągłości w celu znalezienia dwóch pinów, które będą używane w obwodzie (tester będzie dźwiękowy).

Użyj również testera ciągłości, aby określić, które dwa piny na przełączniku są podłączone, gdy przełącznik jest w górę i które są podłączone, gdy przełącznik jest w dół.

Krótkie przewody lutuowe łączące części w obudowie, zgodnie z schematem obwodu.

Przylutować dwa długie, czerwone przewody do garnków i dwa długie, czarne przewody do przełącznika, a następnie wbij je przez dwa małe otwory.

Zakręć obudowę’S Pokrywa i umieść bezpiecznik w uchwycie bezpieczników.

Przekręć przewody wychodzące z lamp wraz z przewodami wchodzącymi do kontrolera (od czerwonej do czerwonego, czarnego), w razie potrzeby przywijać się, a następnie przykryj odsłonięte przewody taśmą elektryczną.

Zamontować kinekty i lampy

Umieść kinekt na powierzchni, skierowany na obiekt, który chcesz wyobrazić sobie.

(Opcjonalnie) Podłącz kinekt z złączem statywu, a następnie do statywu. Podłącz statyw z stojakiem pierścieniowym i ustaw go przed powierzchnią obrazowania.

Zamontować lampy w orientacji tak, aby powierzchnia obrazowania była oświetlona.

(Opcjonalnie) Podłącz lampy do stojaka pierścienia i przytrzymaj je w pozycji za pomocą zacisków, zawiasów i taśmy.

Podłącz zasilacz adaptera ściany do gniazdka, a następnie podłącz go do kontrolera intensywności lampy za pomocą gniazda zasilania.

Wykonaj eksperyment

Weź kawałek papieru budowlanego i narysuj jeden obiekt po lewej stronie, a drugi po prawej stronie, za pomocą ołówka węglowego.

Kolor nad lewym obiektem z niebieskim pastelem i kolorem nad prawym obiektem z pruskim niebieskim pastelem.

Umieść papier przed kamerą.

Otwarte przetwarzanie, utwórz skrypty rgb_save.PDE I ir_save.PDE (Kod znajduje się w załączonym kodzie.PDF), zmodyfikuj kod w taki sposób, aby pliki i nazwy ścieżek były odpowiednie dla komputera, uruchom rgb_save.PDE, a następnie uruchom ir_save.PDE.

Włącz lampy, przerzucając przełącznik, a następnie dostosuj intensywność za pomocą gałek na kontrolerze. Nie będziesz mógł zobaczyć światła IR emitowanego przez diody LED, więc użyj wideo IR przechwyconego przez kamerę, aby określić pożądaną intensywność. Musisz ponownie uruchomić dwa skrypty, po regulacji lamp.

Powstały obraz, pokazany po lewej, powinien pokazać kolorowy obraz u góry i wideo IR na dole. Wyniki pokazują, że dwa pigmenty wyglądają podobnie w części kolorowej widma, ale bardzo różne w części IR.

Aby uzyskać szczegółowy opis nauki stojącej za tym eksperymentem, zalecam przeczytanie artykułów Delaney i in. wymienione w referencjach.

Bibliografia

Simple-Openni Wiki (ostatni dostęp 20 kwietnia 2012). *** Przykłady dołączone do przybornika są szczególnie pomocne.

Borenstein, Greg, Sprawienie, by wszystko się widzi, O’Reilly Media, Inc., 978-1-449-30707-3, styczeń 2012.

Reas, Casey i Ben Fry, Rozpoczęcie pracy z przetwarzaniem, O’Reilly Media, Inc., 978-1-449-37980-3, czerwiec 2010.

Blake, Joshua, “Hakowanie Kinect”, Make:, Volume 29, 124-133, http: // makeProjects.com/wiki/29#sekcja_… (ostatni dostęp 20 kwietnia 2012).

Delaney, John K., Elizabeth Walmsley, Barbara H. Berrie i Colin F. Fletcher, “Obrazowanie obrazów w podczerwieni w celu wykrywania i mapowania niebieskich pigmentów”, (Sackler NAS Colloquium) Badanie naukowe sztuki: nowoczesne techniki w zakresie ochrony i analizy, Proceedings of National Academy of Sciences, 120-136, http: // www.drzemka.EDU/CATALOG/11413.HTML (ostatni dostęp 20 kwietnia 2012 r.), 0-309-54961-2, 2005.

Delaney, John K., Jason G. Zeibel, Mathieu Thoury, Roy Littleton, Kathryn M. Morales, Michael Palmer, E. René de la rie, “Widoczna i w podczerwieni odbijanie obrazowania obrazowania obrazów: mapowanie pigmentu i ulepszona refleksja w podczerwieni”, Q3a: Optyka sztuki, architektury i archeologii II, pod redakcją Luca Pezzati i Renzo Salimbeni, Proc. SPIE VOL. 7391, 2009.

Podziękowanie

Autor chce podziękować dr. Murray Loew z George Washington University i Dr. John Delaney i dr. mi. Melanie Gifford z National Gallery of Art, Washington, D.C., za ich informacje zwrotne dotyczące konfiguracji eksperymentalnej.

Autor chce również uznać wsparcie stypendialne, które otrzymał od Fundacji Osiągnięcia Nagrody dla Naukowców (ARCS).

Wniosek

Uwaga: Po pomyślnym zainstalowaniu oprogramowania do podłączania Kinect z komputerem, jedynymi wymaganymi krokami do ukończenia tego projektu są: 1) blokowanie projektora IR, 2) zbuduj i zamontuj wymiany źródła światła (o środkowej długości fali w pobliżu 830 nm) i 3) eksperymentu. Dostarczone są szczegóły mojego aparatu i eksperymentu, ale zachęcam do modyfikacji szczegółów na podstawie dostępnych części i sprzętu oraz na podstawie rzeczy, które chcesz obrazować. Szczęśliwy budynek!

Jak działa wykrywanie ruchu w Xbox Kinect

Prototyp dla Microsoft’Kinektowa kamera i mikrofon słynna kosztują 30 000 USD. O północy w czwartek rano, ty’Będę mógł go kupić za 150 USD jako peryferyjna Xbox 360. Microsoft przewiduje, że sprzedaje 5 milionów sztuk między teraz a Bożego Narodzeniem. My’LL ma wkrótce więcej szczegółów i przegląd systemu, ale dla […]

Zapisz historię

Zapisz historię

Prototyp do kamery kinekcyjnej i mikrofonu Microsoft kosztował 30 000 USD. O północy w czwartek rano będziesz mógł go kupić za 150 USD jako peryferyjna Xbox 360.

Microsoft przewiduje, że sprzedaje 5 milionów sztuk między teraz a Bożego Narodzeniem. Wkrótce będziemy mieli więcej szczegółów i przegląd systemu, ale na razie warto poświęcić trochę czasu, aby pomyśleć o tym, jak to wszystko działa.

Kamera

Kamera Kinect jest zasilana zarówno sprzętem, jak i oprogramowaniem. I robi dwie rzeczy: wygeneruj trójwymiarowy (poruszający) obraz obiektów w polu widzenia i rozpoznaj (poruszające) ludzi wśród tych obiektów.

Starsze programy wykorzystywały różnice w kolorze i teksturze, aby odróżnić obiekty od ich tła. Primesense, firma, której technologie zasilają Kinect, oraz najnowsze Microsoft Acquisition Canesta używają innego modelu. Kamera przesyła niewidzialne światło bliskiej podczerwieni i mierzy swój „czas lotu” po odbiciu obiektów.

Czas lotu działa jak sonar: Jeśli wiesz, jak długo światło zajmuje powrót, wiesz, jak daleko jest obiekt. Rzuć duże pole, z dużą ilością pingów w tę iz powrotem z prędkością światła, a można wiedzieć, jak daleko jest wiele obiektów.

Korzystanie z generatora podczerwieni również częściowo rozwiązuje problem światła otoczenia. Ponieważ czujnik nie jest zaprojektowany do rejestrowania światła widzialnego, nie ma tak wielu fałszywych pozytywów.

Primesense i Kinect idą o krok dalej i koduj informacje w świetle bliskim IR. Gdy informacje te są zwracane, niektóre z nich są zdeformowane-co z kolei może pomóc w wygenerowaniu drobniejszego obrazu 3-D tekstury, a nie tylko ich głębokości.

Dzięki tej technologii Kinect może rozróżnić głębokość obiektów w odległości 1 centymetra i ich wysokości i szerokości w odległości 3 mm.

Tradycyjny kontroler gry wideo jest indywidualny i szeregowy: to ja i cokolwiek kontroluję na ekranie w porównaniu z tobą i co kontrolujesz. Możemy grać współpracująco, ale w zasadzie jesteśmy odrębni od siebie odrębni, manipulując obiektami w naszych rękach.

Kontroler wideo jest również wysoce wyspecjalizowanym urządzeniem. Może działać lekkie jako zdalne sterowanie, ale przyciski, d-pad, joysticki, akcelerometry, żyroskopy, mechanizmy sprzężenia zwrotnego dotykowego i interfejs z konsolą są zaprojektowane do komunikowania bardzo konkretnych rodzajów informacji.

Kinect to coś innego. Jest wspólny, ciągły i ogólny: naturalny interfejs użytkownika (lub NUI) dla multimediów, a nie GUI do gier.

Ale wykonanie takiego interfejsu wymaga dużo technologii.”

Kinect 2 Hands on Labs

Obraz podczerwieniLab 2: Wyświetlanie danych w podczerwieni

Szacowany czas na zakończenie: 20 minut

To laboratorium jest częścią serii Hands on Labs, które uczą, jak tworzyć system Windows 8.1 Aplikacja do przechowywania, używając prawie każdej dostępnej funkcji Kinect 2. To jest drugie laboratorium z serii. W tym laboratorium nauczysz się, jak pobrać kanał podczerwieni z czujnika Kinect i jak przedstawić kanał w XAML jako obraz.

  • Jak otworzyć czytnik ramy podczerwieni w czujniku Kinect w kodzie.
  • Jak otrzymać ramkę podczerwieni, gdy jest gotowa.
  • Jak przekonwertować dane ramy podczerwieni na monochromatyczną bitmapę
  • Jak przedstawić zmieniającą się bitmapę na XAML.
  • Jak zdobyć i przedstawić dane dotyczące statusu i rozdzielczości Kinect 2.

Ćwiczenie 1 – Wyświetlanie ramki podczerwieni

  1. Otwórz istniejące Kinect 2 próbka Rozwiązanie w Visual Studio lub kopia, którą masz od końca poprzedniego laboratorium.
  2. Najpierw otworzysz Czytnik ramek w podczerwieni Aby pobrać dane w podczerwieni z czujnika Kinect. Otworzyć Strona główna.Xaml.Cs plik z Eksplorator rozwiązania. Kod, który zapisasz. Kiedy kinekt zaczyna dostarczać ramki, masz coś otrzymania danych wejściowych. Aby wyjaśnić następujący kod tutaj opis ważnych zmiennych:
    • InfraredFrameReader – Czytnik ramek podczerwieni
    • Infredframedata – Pośrednie przechowywanie do odbierania danych ramki z czujnika
    • podczerwień – Pośrednie pamięć masowa dla danych ramek przekonwertowanych na kolorowe piksele do wyświetlania
    • Bitmap – Writabilbitmap, który zastąpi zawartość obrazu w XAML

Nowa ramka jest odbierana od czytnika ramy, gdy jest gotowa, zwykle około 30 klatek na sekundę. Każda ramka pojawia się jako dane podczerwieni dla każdego piksela rozdzielczości aparatu. Dane te są konwertowane na zakres kolorów w skali szarości w podczerwieni. Następnie do zapisu do obiektu MAP w podczerwień są używane.

Wszystkie te zmienne muszą zostać zainicjowane z odpowiednim rozmiarem, czyli wielkości ramy podczerwieni pochodzącej z Kinect 2.

Aby poprawnie zainicjować te zmienne, skopiuj podświetlony kod poniżej:

// . inne przestrzenie nazw za pomocą Windows.UI.Xaml.Głoska bezdźwięczna.Obrazowanie; Przestrzeń nazw Kinect2Sample < public sealed partial class MainPage : Page < // Size of the RGB pixel in the bitmap private const int bajtesperpixel = 4; prywatny kinectsensor Kinectsensor = null; private WritebableBitMap Bitmap = null; // Rama podczerwieni private infredframereader infredframeader = null; private ushort [] infredframedata = null; private bajte [] infredpixels = null; Public MainPage () < // one sensor is currently supported this.kinectSensor = KinectSensor.GetDefault(); // get the infraredFrameDescription from the // InfraredFrameSource FrameScription InfredFrameScription = Ten.Kinectsensor.InfredFramesource.Oprawa; // Otwórz czytnik ramek w podczerwieni Ten.InfredFrameReader = Ten.Kinectsensor.InfredFramesource.OpenReader (); // przewodnik drutu do przybycia ramki Ten.InfraredFrameReader.Framearrived += Ten.Czytnik_infraredframearrived; // Przydziela przestrzeń, aby umieścić i przekonwertować piksele // Ten.infredframedata = NOWY USHORT [InfredFredescription.Szerokość * w podczerwień.Wysokość]; Ten.Infredpixels = Nowy bajt [infredFredescription.Szerokość * w podczerwień.Wysokość * bajtesperpixel]; // Utwórz mapę bitową do wyświetlenia Ten.Bitmap = Nowa pamiątka).Szerokość, w podczerwień.Wysokość); // Otwórz czujnik.Kinectsensor.Otwarty(); Ten.InicitizeComponent (); >>>

Strona główna Klasa Public Pieczęci: Strona < // . private void czytnik_infraredframearrived (nadawca obiektu, InfredframearriveVentargs e) < bool infredframeProceded = false; // Infredframe jest identyfikowalny Korzystanie z (infredframe infredframe = mi.Kazerek.Acquireframe ())  if (wrażarnista != null) < FrameScription InfredFrameScription = INFRADEFRAME.Oprawa; // Sprawdź dane i napisz nowe dane ramy podczerwieni // do wyświetlania Bitmap if (((infredFredFrameScription.Szerokość * w podczerwień.Wysokość) == to.Infredframedata.Długość) && (InfredFrameScription.Szerokość == Ten.Bitmap.PixelWidth) && (InfredFrameScription.Wysokość == Ten.Bitmap.Pixelheight))  // Skopiuj dane piksela z obrazu do // INFRADEFRAME.CopyFramedAtatoArray Ten.infredframedata); infredFrameProceded = true; > > > // mamy ramkę, konwertować i renderować if (infraredFrameProced)  ConvertInFredDatopixels (); RenderpixelArray (to.podczerwień); > > >

Strona główna Klasa Public Pieczęci: Strona < /// & ltsummary & gt /// Najwyższa wartość, jaką można zwrócić w podczerwieni. /// jest rzucany na pływak dla czytelności w kodzie wizualizacji. /// & lt/podsumowanie & gt private const float infredSourceValuEMaximum = (Float) Ushort.Maksymalna wartość; /// & lt/podsumowanie & gt /// używane do ustawiania dolnego limitu, przetwarzania końcowego /// Dane w podczerwieni, które będziemy renderować. /// Zwiększenie lub zmniejszenie tej wartości ustawia jasność /// &bdquo;Ściana&rdquo; albo bliżej lub dalej. /// & lt/podsumowanie & gt private const float infredoutputValuEmInimum = 0.01f; /// & ltsummary & gt /// Górny limit, przetwarzanie końcowe, /// Dane w podczerwieni, które będą renderować. /// & lt/podsumowanie & gt private const float infredoutputValuEMaximum = 1.0f; /// & ltsummary & gt /// Wartość podczerwieniowa Wartość określa /// Średnia wartość w podczerwieni sceny. /// Ta wartość została wybrana przez analizę średnią /// intensywność pikseli dla danej sceny. /// Można to obliczyć w czasie wykonywania, aby obsłużyć różne /// IR Warunki sceny (na zewnątrz vs w środku). /// & lt/podsumowanie & gt private const float infredSCeneValueAverage = 0.08f; /// & ltsummary & gt /// Wartość Wartość OfRARDSCENESTADDARDDEVAITIACJE /// Liczba odchyleń standardowych do zastosowania /// InfredSCeneValueAverage. /// Ta wartość została wybrana poprzez analizę danych z danej sceny. /// Można to obliczyć w czasie wykonywania, aby obsłużyć różne /// IR Warunki sceny (na zewnątrz vs w środku). /// & lt/podsumowanie & gt Private Const Float InfredSCeNestandardDeviations = 3.0f; //. Inne zmienne prywatne śledź>

Strona główna Klasa Public Pieczęci: Strona < // Reader_InfraredFrameArrived() before this. Private Void ConvertInFredAdataPixels () < // Konwertuj podczerwień na RGB int ColorPixElindex = 0; dla (int i = 0; i < this.infraredFrameData.Length; ++i) // normalizuj przychodzące dane podczerwieni (USHORT) do // Float, od infredoutputPutValueminimum // do indroredoutputValuEMaximum] przez // 1. Dzielenie wartości przychodzącej przez // źródło maksymalna wartość float IntenserRatio = (float) to.infredframedata [i] / InfredSourceValuEMaximum; // 2. dzielenie przez // (średnia wartość sceny * odchylenia standardowe) Intensyratio /= InfredSCeneValueAverage * InfredSCeNestandardDeviations; // 3. Ograniczenie wartości do infredoutputValuEMaximum Intensyratio = matematyka.Min (infredoutputValuEMaximum, intensyratio); // 4. Ograniczanie niższej wartości infredoutputValueMinimum Intensyratio = matematyka.Max (infredoutputValuEmInimum, intensyratio); // 5. Przekształcenie znormalizowanej wartości na bajt i użycie // Wynik jako komponenty RGB wymagane przez obraz intensywność bajtów = (bajt) (IntensyRatio * 255.0f); Ten.Infredpixels [ColorPixElindex ++] = intensywność; //Niebieski Ten.Infredpixels [ColorPixElindex ++] = intensywność; //Zielony Ten.Infredpixels [ColorPixElindex ++] = intensywność; //Czerwony Ten.Infredpixels [ColorPixElindex ++] = 255; //Alfa > > >

Strona główna Klasa Public Pieczęci: Strona < // konwerturyDatapixels () przed tym. Private Void RenderpixelArray (bajt [] piksele)  piksele.Kopia (to.Bitmap.PixelBuffer); Ten.Bitmap.Unieważnić(); FrameSplayImage.Źródło = to.Bitmap; > >

& LtGrid Tace = "" & GT & ltgrid margin = "30" & gt & LtGrid.Rowdefinitions & gt & LTrowDefinition Height = "70"/& GT & ltrowDefinition Height = "*"/& GT & ltrowDefinition Height = "100"/& GT & LT/Grid.Rowdefinitions> & lttextblock siatka.Row = "0" Style = "" Text = "kinect dla systemu Windows 2"/> & ltimage x: name = "framedisplayimage".Row = "1" Stretch = "mundure"/> & lt/grid> & lt/grid>

Obraz podczerwieni

Dla zabawy spróbuj wyłączyć światła. Światło podczerwieni jest niewidoczne dla ludzi, więc kamera działa nawet w całkowitej ciemności, jest to podstawa działania noktowizyjnej.

  • Jako opcjonalne zadanie, spróbuj zmienić wartości const, które zostały ustawione w kroku 4 tego ćwiczenia i zobacz różnicę, jaką dokonują wynikającego wyjścia ramki. Zobaczysz głębokość widoczności i jasność zmiany obrazu w zależności od tych wartości.
  • Lab 2: Wyświetlanie danych w podczerwieni

    To ćwiczenie pokaże, jak przedstawić przydatne dane debugowania na temat bieżącej ramki podczerwieni, a także aktualnego statusu Kinect. To ćwiczenie pomoże w rozwiązywaniu problemów z kinektem później i podkreślenie różnicy rozdzielczości między ramkami w następnych ćwiczeniach.

    Aby pobrać i wyświetlić dane ramki z Kinect 2, wykonaj poniższe czynności:

    Obraz konfiguracji

    1. Po pierwsze, być może zauważyłeś, że Projektant Podczas oglądania XAML nie jest dostępne podczas budowania architektur x64. To&rsquo;jest w porządku, ponieważ kinect 2 jest również kompatybilny z architekturą x86, do której można przełączyć teraz:
      1. Kliknij ZBUDOWAĆ Następnie Manager konfiguracji… Aby otworzyć menedżer konfiguracji.
      2. Kliknij pola rozwijane pod Aktywne rozwiązanie Platforma: i wybierz x86.
      3. Kliknij Zamknąć.
      4. Teraz otwórz właściwości projektu, klikając prawym przyciskiem myszy projekt Kinect2Sample w eksploratorze rozwiązań, a następnie klikając Nieruchomości.
      5. Kliknij Zbudować zakładka po lewej, a potem obok Platforma: wybierać x86 z rozwijania.
      6. Kliknij PLIK, Następnie Zapisz wszystko lub hit Ctrl + Shift + S Aby zapisać wszystkie pliki.
      7. Buduj i biegnij aplikacja do sprawdzenia błędów.
    2. To, na czym powinieneś się skupić Status kinektu (jeśli odpowiada lub nie) i Obecna rozdzielczość ramki (co jest teraz interesujące, a później, gdy laboratorium zmienia typ ramki). Łatwo jest przekazać te wartości w kodzie. Aby umożliwić XAML powiązanie z wartościami statusu, jeśli się zmienią, musisz zaimplementować InotifyPropertychanged interfejs w Strona główna klasa. Następnie kod wystrzeliwuje zdarzenie właściwości, gdy zmienia się status, a gdy opis ramki się zmienia. Aby to skonfigurować, najpierw skopiuj następujący podświetlony kod w odpowiednich sekcjach Strona główna klasa do zainicjowania i użycia wymiennych właściwości:

      za pomocą systemu.ComponentModel; Przestrzeń nazw Kinect2Sample < public sealed partial class MainPage : Page, InotifyPropertychanged < // . consts and other private variables. private KinectSensor kinectSensor = null; Private String Statustext = null; private WritebableBitMap Bitmap = null; Prywatna oprawiona odsprzedaż CurrentFrameScription; // Zmienne ramy podczerwieni. Public Event PropertyChangedEventHandler PropertyChanged; Publiczny ciąg Statustext  Dostawać ustawić  Jeśli to.Statustext != wartość)  Ten.Statustext = wartość; Jeśli to.Zmierzone != null)  Ten.Nieruchomości (to nowe PropertyChangedEventArgs (&bdquo;Statustext&rdquo;)); > > > > Publiczna oprawa oprawu aktualna  Dostawać ustawić  Jeśli to. CurrentFrameScription!= wartość)  Ten. currentFrameScription = wartość; Jeśli to.Zmierzone != null)  Ten.Nieruchomości (to nowe PropertyChangedEventArgs (&bdquo;CurrentFrameScription&rdquo;)); > > > > // . >>

      Public MainPage () < // . // create the bitmap to display this.bitmap = new WriteableBitmap(infraredFrameDescription.Width, infraredFrameDescription.Height); Ten.CurrentFrameScription = infredFrameScription; // Ustaw powiadomień zdarzenia ISAVailableChanged Ten.Kinectsensor.ISAVAILABLECHANGED += Ten.Sensor_isavailablechanged; // Użyj obiektu okna jako modelu widoku w tym przykładzie Ten.DataContext = this; // Otwórz czujnik.Kinectsensor.Otwarty(); Ten.InicitizeComponent (); > prywatny void sensor_isavaailablechanged (nadawca kinectsensor, ISAVAILABLECHANGEDEVENTARGS Args)  Ten.Statustext = to.Kinectsensor.Jest dostępny ? &bdquo;Running&rdquo;: &bdquo;niedostępny&rdquo;; > 

      & lttextblock siatka.Row = "0" style = "" text = "kinect dla systemu Windows 2"/& GT & LtstackPanel Grid.Row = &bdquo;0&rdquo; orientacja = &bdquo;poziome&rdquo; HoryzontaLalignment = &bdquo;Right&rdquo; VerticalAlignment = "Bottom" & gt & lttextblock text = "Kinect Status:"/& GT & lttextblock text = ""/& gt & lttextblock text = ", framewidth"/& gt & lttextblock text = ", frameheight"/& gt & lt/stackpanel & gt & ltimage x: name = "framedisplayimage".Row = "1" stretch = "mundure"/& gt

      Zbuduj obraz

      Spróbuj odłączyć kinekt i zobacz zmianę statusu. Następnie, jeśli podłączysz kinekt, status będzie aktualizowany, a kanał wróci.

      Streszczenie

      To laboratorium nauczyło cię, jak to zrobić odzyskać i użyj ramki podczerwieni z urządzenia Kinect 2 i Użyj tych danych ramy, aby stworzyć widoczną mapę bitową być Wyświetlane w XAML.

      Warto zauważyć, że większość tego procesu jest ręczna. Dane z INFRADEFRAME nie jest użyteczne, dopóki nie&rsquo;S przekonwertowany na mapę bitową. Jest to oprocentowanie, ponieważ istnieje wiele zastosowań światła w podczerwieni poza przekształceniem go na widoczny obraz. Kinect 2 wykorzystuje kamerę w podczerwieni do obliczania znanych ciał i kształtów w niskich warunkach światła. Właśnie dlatego rozdzielczość w podczerwieni jest tak niska: Pasuje do rozdzielczości widocznej przez głębokość Aby obliczyć, co jest i ISN&rsquo;t osobę.

      W następnym laboratorium zobaczysz różnicę rozdzielczości między ramką kolorów a ramką podczerwieni, gdy wyświetlałeś dane ramki w XAML.

      Dostępny jest kod, który jest wypełnionym rozwiązaniem kodu pracy w tym laboratorium. Następne laboratorium rozpocznie się od tego kodu.