Azure Kinect SDK(v1.1.0) 사용 시도(가져오기~Unity에서 사용)

7860 단어 KinectUnity

입문


TMCN 주최Azure Kinect DK 터치회.에 참가하여 Azure Kinect DK의 실기를 만질 수 있습니다.
회의의 목표는 실제로 SDK를 사용하여 자신이 만든 코드를 이동하는 것이지만 무엇을 이동할 수 있기 때문에 잊지 않았을 때 기사로 정리되었다.아직 접할 기회가 없는 것 같아요.

구현 환경


다음 환경에서 해봤어요.
  • Windows 10 (1903)
  • Visual Studio 2019 (16.2.0)
  • Unity 2019.1.11f1
  • Azure Kinect SDK v1.1.0
  • 이번에는 카메라만 Body Tracking을 시도하지 않았습니다.

    준비


    Azure Kinect SDK 바이너리 파일을 다운로드하여 설치합니다.
  • Azure Kinect SDK 1.1.0
  • 그런 다음 GitHub에서 SDK의 소스 코드를 가져옵니다.
  • microsoft/Azure-Kinect-Sensor-SDK
  • 다음 섹션에서는 소스 코드에서 SDK를 구성합니다.그럼 SDK의 바이너리를 설치할 필요가 없겠죠?비록 이렇게 생각하지만, 설치 프로그램에 있어서 비개원은 필수적이다.dll이 포함되어 있기 때문에 설치해야 합니다.물론 설치 프로그램으로 넣으면 여러 가지 도구류가 있기 때문에 우선 동작을 확인해야 한다.

    SDK 구축


    Unity에서 갑자기 하면 이 항목은 건너뛸 수 있지만 Windows Forms/WPF 버전의 샘플을 시도하고 싶으므로 우선 SDK 구축을 추천합니다.

    C SDK 구축


    C# 프로젝트(src\csharp\K4a.sln)를 구축할 때 C 로컬에서 구축한 바이너리 파일을 요청합니다.설치 프로그램의 바이너리 파일을 적절하게 설정해도 제거될 것 같지만, 적당한 설정을 잘 모르기 때문에 원본부터 구축합니다.
    C SDK는 CMake의 구축입니다.그러나 Windows의 경우 Visual Studio의 CMake 지원 기능을 사용하여 CMake를 별도로 설치하지 않아도 Visual Studio에서만 구축할 수 있습니다.
    (Visual Studio Installer의 단일 구성 요소 - 컴파일러, 빌드 도구 및 실행 시)
  • Visual Studio 2019를 시작하여 로컬 폴더 열기 를 선택합니다.

  • Azure Kinect Sensor SDK를 체크 아웃할 폴더 선택
  • 잠깐만
  • 구성 유형을 선택한 후 "Win-x64-Release-Ninja"를 선택합니다.

  • 구축
  • 설치된 Azure Kinect SDK의 "depthengine_1_0.dll"(C:\Program Files\Azure Kinect SDK v1.1.0\sdk\windows-desktop\amd64\release\bin\depthengine_1_0.dll)을 "build\Win-x64-Rlease-Ninja\bin"
  • 으로 복사
    "Win-x64-Rlease-Ninja"는 C#Wrapper에서 참조하는 설정이므로 이를 구축 대상으로 하지만 다른 설정은 필요에 따라 적절하게 구축하십시오.

    C#Wrapper 구축


    "C++SDK 구축"이 완료되면 "src\csharp\K4a.sln"을 열어 구축할 수 있습니다.실수는 없을 겁니다.
    C# 프로젝트는 컴파일할 때 로컬 DLL을 참조하지 않는 것이 원칙이기 때문에 C++ 구축이 없어도 어느 정도 구축을 통과할 수 있습니다.그러나 추가 작업을 포함하여 C++를 사용하여 구성해야 합니다.

    Unity에서 사용


    Unity에서 SDK에 포함된 C#Wrapper는 Unity에서 직접 사용할 수 있습니다.
    이번에는 다음과 같은 설정을 해 보았다.
  • Assets/K4A/Scripts ← SDK "Src\csharp"아래의 *.전체 cs 복제
  • Assets/K4A/Plugins/x86_64 ← k4a.dll 및 depthengine_1_0.dll 복제
  • ※ (2019/7/31 추적) 구축된 DLL을 사용할 경우 GitHub의 소스 코드 측면과 일치하는 버전을 참고하십시오.

    코드를 쓰다.
    using UnityEngine;
    using KinectSensor = Microsoft.Azure.Kinect.Sensor;
    
    public class KinectCapture : MonoBehaviour
    {
        private KinectSensor.Device _device = null;
    
        private void Awake()
        {
            _device = KinectSensor.Device.Open();
            _device.StartCameras(new KinectSensor.DeviceConfiguration
            {
                ColorFormat = KinectSensor.ImageFormat.ColorBGRA32,
                ColorResolution = KinectSensor.ColorResolution.r720p,
                DepthMode = KinectSensor.DepthMode.NFOV_2x2Binned,
                SynchronizedImagesOnly = true,
            });
        }
    }
    
    실행을 시도하면 Device를 얻을 수 있지만 Device.StartCameras가 실패했습니다.
    "depthengine_1_0.dll을 로드할 수 없습니다."때문입니다.depthengine_1_0.dll은 k4a입니다.dll에서 불러온 것이기 때문에 Unity의 본 플러그인의 DLL 경로의 규칙이 아니라 Windows의 규칙에 따릅니다.그러니까 유니티 규칙을 따르는 k4a.dll과 같은 위치에 놓아도 로드되지 않습니다. 따라서 depthengine_1_0.dll의 의미가 없습니다.
    번거롭기 때문에 설치된 SDK 바이너리 폴더 ("C:\Program Files\Azure Kinect SDK v1.1.0\sdk\windows-desktop\amd64\release\bin") 를 통해 문제를 해결했습니다.
    (2019/8/10 추적)
    수중에 실기가 없어서 확인할 수는 없지만 depthengine의 경로 문제는 GitHub에 대책이 있는 것 같습니다.
  • Add the current module path to the search path #545
  • 그리고 C#샘플을 참고하여 코드를 작성하면 Unity에서 실행할 수 있습니다.API의 수량 자체가 매우 적고 이해하기 쉽기 때문에 먼저 이동하기만 하면 어렵지 않지만 현지 이동에 적합하기 위해서는 여러 가지 노하우가 필요한 것 같다(이런 말을 들었다).
    노력했지만 Depth 처리가 원활하지 않아...#TMCN#AzureKinect-TANY(@TANY_FMPMD)pic.twitter.com/P2LEhYqGCS
    구현에서 카메라의 색과 깊이를 RenderTexture의 ARGB32와 R16, Shader 측으로 내보냅니다.
    Depth는 Vertex Shader에서 값을 보고 Z 방향으로 이동하지만 Kinect에서 얻을 때의 처리가 맞지 않아 잘 반영되지 않습니다.나는 이 부근에서 조금만 더 시간이 있으면 처리할 수 있을 것이라고 생각한다.

    끝내다


    회의에서 접촉하는 시간은 제한되어 있지만 사전에 준비를 했기 때문에 아무것도 하지 않고 끝났다.
    Unity에서 시도한 소감으로 C#Wrapper를 사용하면 기본적으로 Azure Kinect의 기능을 문제없이 사용할 수 있지만, C#Wrapper는 기능적으로 매우 낮은 수준의'CAPI를 거의 그대로 유지한다'는 정의에도 불구하고설치 자체가 잘 모르는 지루한 설치처럼 보여 기분이 좋지 않다.
    호로라보 씨는 혼자서 C#Wrapper를 개발한 것 같지만, 여기는 간단하고 낭비되지 않는 설치용 C#가 된 것 같습니다. 개발된 상황은 이쪽을 기초로 하는 것이 좋습니다.
  • July 27, 2019
  • 개인적으로 유니티를 사용하는 경우, 예를 들어 카메라의 영상을 무늬에 반영하는 것은 사실상 불가피한 자연 브래지어이기 때문에 처음부터 C#Wrapper를 사용하지 않고 Kinect에 대한 처리는 로컬로 쓴 것 같다.또는 내부 실행에 구애받지 않고 Kinect 자체도 다른 프로세스에서 실행할 수 있습니다.
    어쨌든 실기가 없으면 아무것도 할 수 없으니 일본에서 일찍 정상적으로 샀으면 좋겠어요.

    좋은 웹페이지 즐겨찾기