키넥트 및 프로세싱 시작하기

마이크로소프트 키넥트 센서는 웹캠처럼 작동하는 주변 장치입니다. 그러나 심도 맵도 제공합니다. 의미 센서에서 볼 수있는 모든 픽셀에 대해 키 넥트는 센서로부터의 거리를 측정합니다. 이것은 배경 제거,얼룩 탐지,그리고 더 쉽고 재미있게 같은 컴퓨터 비전 다양한 문제를 만든다!

키넥트 센서 자체는 색상과 깊이만 측정합니다. 그러나 해당 정보가 컴퓨터에 있으면”해골”추적(즉,사람의 모델을 감지하고 움직임을 추적)과 같이 더 많이 수행 할 수 있습니다. 스켈레톤 추적을 수행하려면 토마스 렝 글링의 윈도우를 사용해야합니다. 당신이 맥에있어 당신이 원하는 모든 키 넥트에서 원시 데이터 인 경우,당신은 운에 있습니다! 이 라이브러리는 그러한 문제를 표준화된 프로그래밍 인터페이스를 제공함으로써 해결합니다.

어떤 하드웨어가 필요합니까?

먼저”독립형”키 넥트가 필요합니다. 당신은 엑스박스를 살 필요가 없습니다.

  • 독립형 키넥트 센서. 나는 당신이 다음에 나열된 별도의 어댑터가 필요하지 않도록이 하나가 전원 공급 장치와 함께 제공 믿습니다. 그러나 키넥트 센서의 전원 공급 장치는 포함되지 않습니다.
  • 독립형 키넥트 센서 2. 당신은 또한 아마 윈도우 용 키 넥트 어댑터가 필요합니다. 그것은 윈도우 말한다 있지만,떨어져 던져하지 마십시오,이것은 당신이 당신의 맥에 연결할 수 있습니다. 마지막으로,당신은 또한 당신의 컴퓨터가 3 를 지원하는지 확인하는 것이 좋습니다. 대부분의 현대 기계는,그러나 당신이 확실하지 않은 경우에 당신은 맥 오에스 텐을 위해 여기에서 더 많은 것을 알아낼 수 있다.

다른 모형에 관하여 몇몇 추가 주:

  • 키 넥트 1414:이 원래 키 넥트이며,처리 3.0 베타 시리즈에서이 페이지에 설명 된 라이브러리와 함께 작동합니다.
  • 키 넥트 1473:이 1414 동일 보이지만 업데이트 된 모델입니다. 이 라이브러리와 함께 작동해야하지만 테스트 할 라이브러리가 없습니다. 그것이 또는하지 않는 경우 알려 주시기 바랍니다!
  • 윈도우 버전 1 에 대한 키 넥트:???? 도움? 이 하나 작동 합니까?
  • 윈도우 버전 2 에 대한 키 넥트:이 엑스 박스 원 키 넥트에있는 모든 기능을 가진 새로운 키 넥트 때리기 브랜드입니다. 이 도서관에서도 작동합니다!

단순 페니

당신은 또한 단순 페니 라이브러리를 사용하는 것을 고려하고 그렉 보렌 슈타인의 만드는 것을 볼 책을 읽을 수 있습니다. 기능(스켈레톤 추적,제스처 인식 등)이 있습니다.)이 라이브러리에서 사용할 수 없습니다. 불행하게도,오픈 니는 최근 애플에 의해 구입 한,나는 그것이 종료 된 생각하는 동안,아래로 부활하는 몇 가지 노력이 나타납니다!. 그것은 미래가 오픈 페니 및 단순 페니 될 것입니다 무엇 불분명.

나는 지금 시작할 준비가

라이브러리를 설치하는 가장 쉬운 방법은 처리 기여 관리자 스케치입니다. “설치”라고 표시된 버튼이 나타납니다.수동으로 설치하려는 경우 가장 최근 릴리스를 다운로드하여 라이브러리 폴더에 압축을 풉니다. 다시 시작 처리,예제 폴더의 예제 중 하나를 열고 당신은 갈 수 있습니다!

처리 란 무엇입니까?

프로세싱은 이미지,애니메이션 및 상호 작용을 생성하려는 사람들을위한 오픈 소스 프로그래밍 언어 및 환경입니다. 처음에는 소프트웨어 스케치북으로 봉사하고 시각적 컨텍스트 내에서 컴퓨터 프로그래밍의 기초를 가르치기 위해 개발 된 처리는 완성 된 전문 작업을 생성하는 도구로 발전했습니다. 오늘날에는 학습,프로토 타이핑 및 제작에 처리를 사용하는 수만 명의 학생,예술가,디자이너,연구원 및 애호가가 있습니다.

처리를 사용하지 않으려면 어떻게 해야 합니까?

당신이 편안 경우 씨++난 당신이 키 넥트와 오픈 프레임 워크 또는 콘크리트를 사용하는 것이 좋습니다. 이러한 환경에는 몇 가지 추가 기능이 있으며 깊이 데이터 등을 처리 할 때 속도 이점을 얻을 수 있습니다.:

  • 나는 어떤 코드를 작성합니까?이 문제를 해결하기 위해 어떤 코드를 작성해야합니까?

    먼저 코드 맨 위에 적절한 가져오기 문을 포함하는 것입니다:

    import org.openkinect.processing.*;

    Kinect객체에 대한 참조,즉

    Kinect kinect;

    그런 다음setup()에서 해당 키 넥트 객체를 초기화 할 수 있습니다:

    void setup() { kinect = new Kinect(this); kinect.initDevice();}

    키 넥트 2 를 사용하는 경우,대신 키 넥트 2 개체를 사용합니다.

    Kinect2 kinect2;void setup() { kinect2 = new Kinect2(this); kinect2.initDevice();}

    이 작업을 수행 한 후에는 키 넥트 센서에서 데이터에 액세스 할 수 시작할 수 있습니다. 현재 라이브러리는 다섯 가지 방법으로 데이터를 사용할 수 있습니다:

    • PImage (RGB) 키 넥트 비디오 카메라에서.
    • PImage (grayscale)키넥트 적외선 카메라.
    • PImage (grayscale)각 픽셀의 밝기가 깊이에 매핑됩니다(밝음=더 가까움).
    • PImage (RGB)각 픽셀의 색조가 깊이에 매핑됩니다.
    • int array원시 깊이 데이터(0 에서 2048 사이의 11 비트 숫자).

    한 번에 하나씩 살펴 보겠습니다. 당신은 단지 일반 오래된 웹캠처럼 키 넥트를 사용하려면,당신은 피마로 비디오 이미지에 액세스 할 수 있습니다!

    PImage img = kinect.getVideoImage();image(img, 0, 0);

    그러나videoEvent()를 사용하여 새 이미지를 사용할 수있는시기를 알 수 있다면draw()에서이 이미지를 간단히 요청할 수 있습니다.

    void videoEvent(Kinect k) { // There has been a video event!}

    당신은 적외선 이미지를 원하는 경우:

    kinect.enableIR(true);

    비디오 이미지와 적외선 이미지를 모두 얻을 수 없습니다. 그래서 가장 최근에 활성화 된 중 하나는 당신이 얻을 것이다 하나입니다. 그러나 키 넥트 버전 2 와 함께,그들은 모두 별도의 방법으로 사용할 수 있습니다:

    PImage video = kinect2.getVideoImage();PImage ir = kinect2.getIrImage();

    이제 깊이 이미지를 원하는 경우 회색조 이미지를 요청할 수 있습니다:

    PImage img = kinect.getDepthImage();image(img, 0, 0);

    뿐만 아니라 원시 깊이 데이터로:

    int depth = kinect.getRawDepth();

    키 넥트 1 의 경우 원시 깊이 값의 범위는 0 에서 2048 사이이며,키 넥트 2 의 경우 범위는 0 에서 4500 사이입니다.

    색 농도 이미지의 경우kinect.enableColorDepth(true);를 사용합니다. 그리고 비디오 이미지와 마찬가지로 필요한 경우 액세스 할 수있는 깊이 이벤트가 있습니다.

    void depthEvent(Kinect k) { // There has been a depth event!}

    이 응용 프로그램은 당신에게 아름다운 욕실 꾸미기의 갤러리를 보여줍니다. 한 이미지의 픽셀은 오른쪽 1 인치 카메라의 이미지에서 동일하지 않습니다. 이 응용 프로그램은 당신에게 아름다운 욕실 꾸미기의 갤러리를 보여줍니다. 다음과 같이 액세스 할 수 있습니다:

    PImage img = kinect2.getRegisteredImage()

    마지막으로,키 넥트 버전 1(하지만 버전 2)에 대한,당신은 또한setTilt()방법으로 카메라 각도를 조정할 수 있습니다.

    float angle = kinect.getTilt();angle = angle + 1;kinect.setTilt(angle);

    그래서,당신이 그것을 가지고,여기에 당신이 처리 키 넥트 라이브러리를 사용해야 할 수도 있습니다 모든 유용한 기능은 다음과 같습니다:

    • initDevice() — 모든 것을 시작하십시오(비디오,깊이,적외선)
    • activateDevice(int) – 여러 장치가 연결되면 특정 장치 활성화
    • initVideo() — 비디오 만 시작
    • enableIR(boolean) — 적외선 카메라 이미지 켜기 또는 끄기)
    • initDepth() — 시작 깊이 만
    • enableColorDepth(boolean) — 색상 이미지로 깊이 값을 켜거나 끕니다
    • enableMirror(boolean) — 이미지 및 깊이 데이터 미러링)
    • PImage getVideoImage() — 비디오 이미지를 캡처합니다.
    • PImage getIrImage() — 적외선 이미지를 잡아(버전 2 만)
    • PImage getDepthImage() — 깊이 맵을 잡아 이미지
    • PImage getRegisteredImage() — 등록 된 깊이 이미지를 잡아(버전 2 만)
    • int getRawDepth() — 원시 깊이 데이터를 잡아
    • float getTilt() — 현재 센서 각도(0 도에서 30 도 사이)를 가져옵니다.)
    • setTilt(float) — 센서 각도 조정(0 도에서 30 도 사이))

    다른 모든 것을 위해,당신은 또한 자바 독 참조 좀 걸릴 수 있습니다.

    예제

    버전 1 과 버전 2 모두에 대한 네 가지 기본 예가 있습니다.이 문제를 해결하려면 다음 단계를 따르세요./:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/:/::이 예제에서는 위에 나열된 모든 기능을 사용하여 키넥트 센서의 데이터를 표시합니다.이 응용 프로그램은 여러 장치를 지원합니다.포인트 클라우드에 대한 자세한 내용은 포인트 클라우드에 대한 자세한 내용을 참조하십시오.이 경우 포인트 클라우드에 대한 자세한 내용은 포인트 클라우드에 대한 자세한 내용을 참조하십시오. 첫째,우리는 3 차원 처리능력을 이용하여 공간에 점을 그립니다. 당신은 번역(),회전(),푸시 매트릭스(),팝 매트릭스()에 익숙해 할 수 있습니다. 이 튜토리얼은 또한 시작하기에 좋은 장소입니다. 또한 이 예제에서는 3 차원 공간의 한 점을 설명하기 위해 보호기를 사용합니다. 자세한 내용은 여기를 참조하십시오.

    이 예제의 실제 작업은 전혀 나에게 오지 않습니다. 키 넥트의 원시 깊이 값은 물리적 깊이에 직접 비례하지 않습니다. 오히려,이 공식에 따라 깊이의 역수로 확장됩니다:

    depthInMeters = 1.0 / (rawDepth * -0.0030711016 + 3.3309495161);

    이 계산을 항상 수행하는 대신 2048 개의 깊이 값만 있기 때문에 조회 테이블에서 이러한 모든 값을 미리 계산할 수 있습니다.

    float depthLookUp = new float;for (int i = 0; i < depthLookUp.length; i++) { depthLookUp = rawDepthToMeters(i);}float rawDepthToMeters(int depthValue) { if (depthValue < 2047) { return (float)(1.0 / ((double)(depthValue) * -0.0030711016 + 3.3309495161)); } return 0.0f;}

    위의 공식에 대한 매튜 피셔 덕분에. (참고:결과가 더 정확하게하려면,당신은 당신의 특정 키 넥트 장치를 보정 할 필요가 있지만,공식은 나를 위해 충분히 가까이 그래서 지금은 그것을 고집하고 있습니다. 순간 교정에 대한 자세한.)

    마지막으로 미터 단위의 깊이 값을 기반으로 몇 가지 점을 그릴 수 있습니다:

     for(int x = 0; x < w; x += skip) { for(int y = 0; y < h; y += skip) { int offset = x + y * kinect.width; // Convert kinect data to world xyz coordinate int rawDepth = depth; PVector v = depthToWorld(x, y, rawDepth); stroke(255); pushMatrix(); // Scale up by 200 float factor = 200; translate(v.x * factor, v.y * factor, factor-v.z * factor); // Draw a point point(0,0); popMatrix(); } }

    평균 포인트 추적

    키 넥트의 진정한 마법은 컴퓨터 비전 기능에 있습니다. 깊이 정보,말 처럼 재미 있는 것 들의 모든 종류를 할 수 있습니다.:”배경 5 피트 넘어 아무것도. 그것을 무시!”깊이가 없으면 배경 제거에는 모든 종류의 근면 한 픽셀 비교가 포함됩니다. 이 아이디어의 빠른 데모로,여기에 주어진 깊이 임계 값 앞에 모든 픽셀의 평균 위치를 계산하는 아주 기본적인 예입니다.다음 예제에서는 소스 추적에 대한 정보를 제공합니다.: 2

    이 예제에서는 두 개의 변수를 선언하여 적절한 모든 변수를 합산하고 하나의 변수를 선언하여 얼마나 많은 변수가 있는지 추적합니다.

    float sumX = 0;float sumY = 0;float count = 0;

    그런 다음 주어진 점을 찾을 때마다 그 준수 우리의 임계 값,나는 추가 엑스 과 와이 합계에:

     if (rawDepth < threshold) { sumX += x; sumY += y; count++; }

    우리가 완료되면,우리는 평균을 계산하고 점을 그립니다!

    if (count != 0) { float avgX = sumX / count; float avgY = sumY / count; fill(255, 0, 0); ellipse(avgX, avgY, 16, 16);}

    무엇이 누락 되었습니까?이 문제를 통해 모든 것을 추적할 수 있습니다.심도 이미지(1)에 그림자가 있는 이유는 무엇입니까? 키 넥트 그림자 다이어그램

  • 키 넥트가 볼 수있는 깊이의 범위는 무엇입니까? (1)~0.7–6 미터 또는 2.3–20 피트. 참고 너무 멀리 있고 너무 가까운 두 요소 모두에서 검은 색 픽셀(또는 원시 깊이 값 2048)을 얻을 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다.