개요

프로젝트 프라하란?

Project Prague는 손 제스처 입력에 따라 NUI(자연 사용자 인터페이스) 환경을 만들 수 있는 SDK(소프트웨어 개발 키트)입니다. C#, C++(UWP 및 .NET Core 버전 포함)용 API(애플리케이션 프로그래밍 인터페이스)를 제공하여 사용자 지정 손 제스처를 쉽게 디자인 및 구현하고 애플리케이션에 통합할 수 있습니다. GitHub 샘플 리포지토리를 방문하여 손 제스처 환경을 살펴보고 프로그래밍 모델에 대해 알아보세요.

제스처의 구성 요소는 손 포즈와 손 동작입니다. 직관적인 언어로 지정된 간단한 제약 조건을 사용하여 손 포즈와 원하는 손 동작을 정의할 수 있습니다. 손 포즈와 손 동작 시퀀스를 함께 문자열링하여 제스처를 지정할 수 있습니다. 제스처가 정의되고 런타임에 등록되면 사용자가 손으로 제스처를 수행했음을 감지할 때마다 알려 드립니다. 이 시점에서 원하는 논리를 실행하여 검색된 제스처에 응답할 수 있습니다.

Project Prague를 사용하면 사용자에게 손 제스처를 제공하여 음악 및 비디오 재생을 직관적으로 제어하고, 책갈피를 지정하고, 웹 콘텐츠와 같이 메신저 대화(인스턴트 메시징) 애플리케이션에서 이모지 보내기, 디지털 도우미와 상호 작용, PowerPoint 슬라이드쇼 만들기 및 실행, 3차원 개체 조작, 손만으로 게임 플레이 등을 수행할 수 있습니다.

Project Prague 시작

지원되는 깊이 카메라

컴퓨터에서 Project Prague를 실행하려면 깊이 카메라가 있어야 합니다. 현재 지원 중인 카메라 브랜드는 다음과 같습니다.

브랜드 제스처 검색 범위 환경
Intel® RealSense™ SR300 카메라 20-60 [cm] 가장 좋음
Intel® RealSense™ F200 카메라 20-60 [cm] 좋음
Kinect for Windows v2 60-110 [cm] 좋음

최적의 성능을 위해 Intel® RealSense™ SR300 카메라를 사용하는 것이 좋습니다.

하드웨어 및 소프트웨어 요구 사항

Project Prague 설정을 진행하기 전에 시스템이 다음 요구 사항을 충족하는지 확인하세요.

범주 권장 최소
CPU Intel® Core™ i7 시리즈, 논리 코어 8개 Intel® Core™ i5 시리즈, 4개의 논리 코어
무료 RAM 2GB 이상 1GB
운영 체제 크리에이터 업데이트가 설치된 Windows 10 윈도우 10

컴퓨터에서 Project Prague 설정

컴퓨터에서 Project Prague를 실행하려면 다음을 수행해야 합니다.

  1. 아래 이미지와 같이 깊이 카메라를 USB 3.0 포트에 연결하고 컴퓨터의 모니터 아래에 배치합니다.

    RealSense 카메라 데스크톱 설정

  2. 다운로드 및 설치aka.ms/gestures/download 프로젝트 프라하 런타임. 설치는 컴파일된 데모 애플리케이션 을 가리키는 바탕 화면에 바로 가기 를 배치합니다.


    데모 애플리케이션은 다음과 같습니다.

    애플리케이션 Description
    Microsoft.Gestures.Service
    | [제스처 검색 서비스](getting-started-gestures-service.md)를 실행합니다.
    Microsoft.Gestures.DiscoveryClient
    | Windows 셸, PowerPoint, Skype 등에 대한 제스처 통합 제공
    Microsoft.Gestures.Camera.Viewer
    | 카메라에서 RGB 스트림을 표시하고 제스처 트리거를 추가합니다.
    애니메이션 오버레이
    울프리 ()
    | Unity®로 만든 제스처 기반 게임 실행
  3. 설치가 완료되면 Microsoft Gestures Service 라는 창이 시작됩니다. 실시간 제스처 및 포즈 감지 대시보드입니다. 아래와 같이 손가락이 성공적으로 감지되었는지 확인합니다.

    제스처 검색 대시보드

참고

기본적으로 오른손 검색만 사용하도록 설정됩니다. 두 손을 사용하도록 설정하려면 제스처 서비스 창의 시스템 섹션에서 두 손 사용 상자를 선택합니다.

  1. Project Prague 설치 프로그램은 Windows 시작 시 시작되고 백그라운드에서 실행되도록 다음 두 애플리케이션을 구성했습니다.

    • Microsoft.Gestures.Sync - 제스처 서비스를 계속 실행하고 업데이트를 게시할 때 끌어온다.
    • Microsoft.Gestures.DiscoveryClient - Windows 셸, PowerPoint, Skype, YouTube, 사진 및 Visual Studio와 같은 다양한 컨텍스트에 대한 제스처 통합을 제공합니다.

    언제든지 작업 관리자의 시작 탭에서 이 구성을 수정할 수 있습니다.

프로젝트 프라하의 제스처 이해

제스처 작성을 시작하기 전에 손 포즈 및 손 동작과 같은 제스처의 기본 구성 요소에 익숙해져야 합니다.

손 포즈

손 포즈는 지정된 순간에 손의 스냅샷을 나타냅니다. 손 포즈에는 손바닥 상태와 해당 스냅샷의 손가락에 대한 완전한 설명이 포함되어 있습니다. API에서 손 포즈는 아래 그림과 같이 다양한 제약 조건으로 구성된HandPose 클래스로 표시됩니다.

HandPose 및 제약 조건

아래 그림과 같이 해당 포즈와 관련된 모든 제약 조건을 특성화하여 손 포즈를 표현할 수 있습니다.

HandPose 예제

위의 예제에서는 왼쪽의 스냅샷과 합리적으로 연결할 수 있는 모든 제약 조건을 보여 줍니다. 이 예제는 Project Prague 언어로 제약 조건을 지정하는 데 사용되는 다양한 용어의 의미를 보여주기 위해 교육용으로만 제공됩니다. 실제로 손 포즈를 지정하기 위해 이러한 많은 수의 제약 조건을 사용하지 않을 것입니다. 대신 손 포즈의 본질을 포착하는 최소한의 제약 조건을 찾아야 합니다. 다음 예제는 동일한 포즈를 설명하는 실용적인 방법입니다.

간소화된 HandPose 예제

이 마지막 예제에서는 스냅샷에서 포즈의 본질을 잘 캡처합니다. 엄지 손가락과 인덱스 손가락으로 수행되는 손가락 모으기 동작입니다. 손가락 모으기 동작에 참여하지 않으므로 포즈의 본질을 표현할 필요가 없기 때문에 가운데, 반지 및 분홍색 손가락은 손 포즈의 설명에 없습니다.

손 포즈(예: 과잉 맞춤)를 정의할 때 너무 많은 제약 조건을 사용하면감지하기 어려운 포즈를 생성할 수 있습니다. 사용자가 모든 제약 조건을 충족하기 위해 매우 구체적인 자세로 손을 조정해야 하기 때문입니다. 손 포즈(예: 언더핏)를 정의할 때 너무 적은 제약 조건을 사용하면 포즈가 감지되기가 너무 쉬워지고 사용자가 의도치 않게 포즈를 수행할 수 있습니다.

손 동작

손을 움직이면 손끝이 공간을 통해 곡선을 추적합니다. 이 곡선을 "손 동작"으로 지칭하며, API에서 HandMotion 클래스로 표시됩니다. 손 동작은 손 부분(손바닥의 중심 또는 손끝 중 하나)과 연결되고 동작 구성 요소의 시퀀스로 구성됩니다. 사용 가능한 구성 요소는 다음과 같습니다.

HandMotion 구성 요소

보듯이 모든 구성 요소는 2차원 동작을 설명합니다. 즉, 전체 동작이 단일 평면 내에 포함됩니다. 제약이 없는 3차원 손 동작을 정확하게 실행하기 어려울 수 있으므로 더 나은 사용자 환경을 제공하기 위해 이러한 제한을 의도적으로 도입했습니다. 아래 그림과 같이 손 동작을 포함하도록 사용 가능한 세 평면 중 하나를 선택할 수 있습니다.

손 동작 평면

동작을 실행할 손 부분을 결정하고 이를 포함할 평면을 선택한 후에는 동작을 동작 구성 요소의 시퀀스로 지정하기만 하면 됩니다. 예를 들면 다음과 같습니다.

동작 - 간단한 예제

제스처

제스처는 손 포즈, 손 동작 또는 기타 제스처를 나타내는 상태 시스템이라고 생각합니다. 이 상태 컴퓨터에는 초기 상태 및 수신 상태가 있습니다. 초기 상태로 시작하여 수신 상태로 끝나는 경로는 해당 제스처의 검색을 트리거하기 위해 사용자가 수행해야 하는 작업(손 포즈, 손 동작 및 손 제스처)의 시퀀스를 나타냅니다.

API에서 제스처는 제스처 클래스로 표시됩니다. 다음 예제에서는 상태 머신이 간단한 손 포즈 및 손 동작 시퀀스인 제스처를 보여 줍니다.

제스처 예제

예제의 슬링샷 제스처는 Retract라는 단일 손 동작과 3개의 손 포즈(NotPinching 인스턴스 2개와 Pinch 인스턴스 1개)로 구성됩니다. 슬링샷 제스처는 다음 작업 순서에 해당합니다: 왼손에 새총을 들고 있다고 상상해 보십시오. 이제 오른손의 엄지 손가락과 검지 손가락으로 주머니를 잡고 다시 당겨 새총 밴드를 뻗어 마지막으로 인덱스와 엄지 손가락을 벌리고 주머니를 풀어 허수의 발사체가 날아갑니다.

Project Prague에서 제스처 만들기

이제 Project Prague API를 사용하여 간단한 제스처를 프로그래밍하는 방법을 보여 주는 예제를 제공합니다.

중요

모든 Project Prague .NET 엔터티의 루트 네임스페 이스는 Microsoft.Gestures 이며, 이에 따라 모든 네이티브 엔터티에 대한 Microsoft::Gestures 입니다.

RotateRight 제스처를 구현합니다.

오른쪽 FSM 회전

직관적으로 RotateRight 제스처를 수행할 때 사용자는 포그라운드 애플리케이션의 일부 개체가 오른쪽으로 90도 회전할 것으로 예상할 수 있습니다. 예를 들어 검색 클라이언트에서 PowerPoint 슬라이드 쇼에서 이미지 회전을 트리거하기 위해 이 제스처를 사용했습니다.

다음 코드는 RotateRight 제스처를 정의하는 제안된 방법을 보여 줍니다.

경고

찾으시는 샘플이 이동된 것으로 보입니다. 현재 이 문제를 해결하기 위해 노력하고 있습니다.

Whe는 RotateRight 제스처를 RotateSetRotateGo라는 두 손 포즈의 시퀀스로 지정합니다. 두 포즈 모두 엄지손가락과 인덱스가 열려 있고 앞으로 가리키고 서로 만지지 않도록 해야 합니다. 포즈의 차이점은 RotateSet 이 검지 손가락이 엄지 손가락 위에 있어야 하며 RotateGo 가 엄지 손가락의 오른쪽이어야 한다고 지정한다는 것입니다. 따라서 RotateSetRotateRight 간의 전환은 오른쪽에 있는 손의 회전에 해당합니다.

가운데, 고리 및 핑키 손가락은 RotateRight 제스처의 정의에 참여하지 않습니다. 우리는 어떤 식 으로든이 손가락의 상태를 제한하고 싶지 않기 때문에 이것은 의미가 있습니다. 즉, 이러한 손가락은 RotateRight 제스처를 실행하는 동안 포즈를 자유롭게 가정할 수 있습니다.

제스처를 정의한 후에는 제스처 검색을 나타내는 이벤트를 대상 애플리케이션의 적절한 처리기에 연결 해야 합니다.

경고

찾으시는 샘플이 이동된 것으로 보입니다. 현재 이 문제를 해결하기 위해 노력하고 있습니다.

검색 자체는 Microsoft.Gestures.Service.exe 프로세스에서 수행됩니다 (위에서 설명한 "Microsoft 제스처 서비스" 창과 연결됨). 이 프로세스는 백그라운드에서 실행되며 제스처 감지를 위한 서비스 역할을 합니다. 서비스와 통신하기 위해 GesturesServiceEndpoint 클래스를 제공합니다. 다음 코드 조각은 GesturesServiceEndpoint 개체를 인스턴스화하고 검색을 위해 RotateRight 제스처를 등록합니다.

경고

찾으시는 샘플이 이동된 것으로 보입니다. 현재 이 문제를 해결하기 위해 노력하고 있습니다.

RotateRight 제스처의 검색을 중지하려는 경우 다음과 같이 등록을 취소할 수 있습니다.

경고

찾으시는 샘플이 이동된 것으로 보입니다. 현재 이 문제를 해결하기 위해 노력하고 있습니다.

또한 사용자가 RotateRight 제스처를 실행할 때 처리기가 더 이상 트리거되지 않습니다.

제스처 작업을 마치면 GesturesServiceEndpoint 개체를 삭제해야 합니다.

경고

찾으시는 샘플이 이동된 것으로 보입니다. 현재 이 문제를 해결하기 위해 노력하고 있습니다.

위의 코드를 컴파일하려면 MicrosoftGesturesInstallDir 환경 변수로 표시된 디렉터리에 있는 다음 어셈블리를 참조해야 합니다.

  • Microsoft.Gestures.dll
  • Microsoft.Gestures.Endpoint.dll
  • Microsoft.Gestures.Protocol.dll

RotateRight 제스처를 활용하는 전체 오픈 소스 코드 샘플을 실험하려면 GitHub 샘플 리포지토리RotateSample을 참조하세요. 또한 이 리포지토리에서 C# 및 C++(UWP 및 .NET Core 버전 포함)의 제스처에 대한 애플리케이션을 보여주는 고급 샘플을 찾을 수 있습니다.