Azure Kinect body tracking using C#

choi jihwan·2021년 6월 22일
0

1. 아키텍쳐

- Open: 키넥트 장치와 연결하는 작업

- Configure: 키넥트 모드를 설정하는 작업

- Start: 키넥트 카메라를 동작시키는 작업(키넥트에 red led가 점등 된다면 정상)

- Capture: 이미지를 캡쳐하고 작업 가능

- 컬러 이미지 & Depth 이미지 데이터를 가져올 수 있음

- Stop: 키넥트 카메라의 동작을 중지 (키넥트 카메라의 led가 소등된다면 정상)

- Dispose: 키넥트 장치와의 연결을 해제

2. 프로젝트 생성 및 설정

- 비주얼 스튜디오 실행 후 프로젝트 생성

  • 콘솔 응용 프로젝트로 생성 (콘솔 앱(.NET Core))
  • Debug 옆의 Any CPU 선택 후 구성관리자->새로 만들기->x64 추가
  • Nuget패키지 관리자->솔루션용 NuGet 패키지 관리자->찾아보기->AzureKKinct 검색 후 Microsoft.Azure.Kinect.Sensor 와 Microsoft.Azure.Kinect.BodyTracking 선택->프로젝트 선택 후 SDK 버전 확인 뒤 설치

3. 바디 트래킹

  • 바디는 32개의 joint들로 이루어져 있다.
  • 각 관절의 정보는 index, joint name, parent joint로 구성되어 있다.

4. 동작 확인

1. SDK 추가

2. Console에 "body tracking start"라고 출력한 뒤, 연결된 키넥트 수를 확인. 만약 연결된 device가 없다면 "no device connected" 출력

3. 키넥트 변수 생성 후 0번째 디바이스와 연결. 만약 실패 시 오류 메시지 출력


4. 키넥트 모드 설정, 시작

  • Depth 모드가 off 이거나 적외선을 설정할 시, 신체 추적 기능이 정상적으로 장동하지 않음
  • 설정된 값을 기반으로 키넥트를 동작하는데, 동작에 실패할 시, 오류를 출력

5. 추적기 생성

  • 추적기는 사람의 신체를 추적할 때 사용한다.
  • 일반적으로 GPU, CPU 모드가 존재한다.
  • GPU 모드는 Nvidia GTX 1070 이상일 때 정상적으로 작동된다.
  • CPU 모드는 일반적으로 작동이 매끄럽지 못하여 대개 GPU 모드를 권장
  • 이번 실험의 경우 GPU 모드를 설정하고, 센서의 방향을 Default로 설정하여 추적기를 생성
  • 데이터를 계속 가져올 수 있게 Bool 변수를 생성하여 무한 loop
  • 추적기를 비동기적으로 효율적으로 사용하기 위해 EnqueueCapture 메소드 사용하여 입력 및 송신 queue를 내부적으로 유지한다.
  • 출력된 queue에서 결과를 pop하기 위해 PopResult 메소드 사용
  • pop 데이터에서 골격 데이터 frame을 가져올 수 있음. 이때 우리는 머리에 해당하는 정보를 getJoint 메소드를 통해 가져온다.

6. ESC로 loop 탈출 후 종료


profile
I don't know what I like yet, so I'll just do what I'm attracted to.

0개의 댓글