프로젝트

[프로젝트] 나랑 키배 뜰 사람? 가상 피아노!

klee9 2025. 2. 1. 21:11

1. 들어가며

컴퓨터 비전 분야에는 물체의 위치를 찾는 Object Detection, 픽셀 단위로 이미지를 범주화하는 Image Segmentation, 새로운 이미지를 만드는 Image Generation 등 다양한 태스크가 있습니다. 저희는 이 중에서 사람 손 자세를 추정해 동작을 인식하는 Hand Pose Estimation에 집중했습니다.

 

1.1. Hand Pose Estimation을 선택한 이유

우리가 세상과 상호작용 하는 방식은 다양합니다. 언어와 제스처를 통해 다른 사람들과 의사소통하거나 키보드나 마우스를 사용해 컴퓨터를 다루기도 합니다. AI 시대에 접어들면서 세상과 상호작용 하는 방식은 더 다양해졌습니다. 특히, 최근 몇 년 사이 손 관절의 위치를 추측하여 이를 바탕으로 손동작을 인식하는 Hand Pose Estimation 기술이 크게 발전했습니다.

 

이제 우리는 단순히 버튼을 누르거나 스크린을 터치하는 것을 넘어서, 손 동작만으로 기기를 제어할 수 있는 시대에 살고 있습니다. 예를 들어, 간단한 손 동작만으로 화면을 스크롤 하거나 이미지를 편집하는 작업이 가능해졌고, 이는 게임, VR(가상 현실), AR(증강 현실) 등에서 더 풍부한 상호작용 방식을 제공합니다. 또한 이러한 기술은 장애인을 위한 접근성을 개선하고 사람과 기계 사이의 소통을 더 유기적으로 연결하는 데 중요한 역할을 합니다.

 

 

2024년 11월, 애플이 출시한 Vision Pro는 Hand Pose Estimation 기술을 잘 활용한 대표적인 사례로 볼 수 있습니다. Meta Quest 3S와 유사한 VR 기기이지만 컨트롤러 없이 사용자의 손을 사용한다는 차이점이 있습니다. 손가락의 미세한 움직임과 제스처를 실시간으로 인식하고 이를 기반으로 기기를 조작할 수 있는 방식이며, 덕분에 사용자는 단순히 화면을 보는 데 그치지 않고 디지털 세계와 자연스럽게 상호작용할 수 있습니다.

 

예를 들어, 위 그림처럼 손가락을 꼬집는 동작 만으로 메뉴를 선택하거나 키보드를 칠 수 있습니다. 그렇다면 이 기술을 다른 데에도 적용할 수 있지 않을까요? 이를 조금 더 넓게 보면 단순하게 기기를 조작하는 것을 넘어서 세밀한 제어 또는 가상 환경이 필요한 작업에서 중요하게 사용됩니다. 특히, 의료나 교육 같은 분야에서 큰 역할을 할 것입니다. 의료 분야에서는 외과 의사가 가상 수술 시뮬레이션을 통해 연습할 수 있고, 교육에서도 학생들이 손동작으로 과학 실험을 시뮬레이션하거나 가상 현실에서 기계를 조립해 보는 등 다양한 경험을 할 수 있습니다.

 

 

 

그뿐만 아니라, Hand Pose Estimation 기술의 발전은 로봇 원격 조작(Robot Teleoperation) 분야에서 혁신적인 변화를 일으키고 있습니다. Hand Pose Estimation을 통해 사용자의 손동작을 로봇에 그대로 반영할 수 있습니다[3]. 이는 마치 자신의 손처럼 로봇을 다룰 수 있게 한다는 뜻입니다. 이렇게 되면 사람이 접근하기 어려운 위험한 환경에서도 로봇이 대신 작업할 수 있습니다. 예를 들어, 재난 구조 현장에서 구조 대원이 안전한 거리에서 로봇을 조작해 무너진 건물을 탐색하거나 피해자를 구할 수 있고, 의료 현장에서는 의사가 먼 거리에서 로봇 팔을 이용해 수술할 수 있습니다. 나아가 미래에는 화성 같은 우주 환경에서 로봇이 탐사를 진행하고, 기지 건설과 같은 중요한 작업을 대신하게 될 수도 있습니다.

 

1.2. 왜 악기일까?

 

VR 내에서, 또는 AR을 통해 악기를 연주하는 가상 악기(Virtual Instrument) 기술은 이용자가 물리적 세계의 제약에서 벗어나 악기와 상호작용을 할 수 있는 혁신적인 수단입니다. 2023년 가상 악기 시장 규모는 약 5억 달러로 평가되었으며, 2032년까지 10억 달러에 이를 것으로 예상되는 유망한 분야입니다[4]. 가상 악기 기술은 현실과 가상 세계의 경계를 모호하게 만들어 디지털 시대에 음악적 표현과 엔터테인먼트의 가능성을 확장하고, 음악적 기술과 시청각 기술을 결합하여 이용자에게 감각적 참여를 강화한다는 특징을 가집니다.

 

하지만 가상 악기 프로그램을 제작하는 데에는 몇 가지 한계가 존재합니다. 같은 악기라도 연주자에 따라 스타일이 달라지며, 악기 연주의 움직임이 복잡하고 섬세하여 분석이 본질적으로 까다롭습니다. 또한 악기를 연주하는 동안 손의 Occlusion(폐색, 물체에 의해 가려짐) 문제가 자주 발생합니다. 악기별 특징을 처리하는 것도 중요한 과제 중 하나입니다. 더불어 가상 악기 프로그램은 악기 연주 소리를 실시간으로 출력해야 하며, 복잡한 악기 연주 소리를 정확하게 출력해야 합니다.

 

결론적으로, 가상 악기 프로그램을 구현하기 위해서는 최첨단 동작 인식 프로그램, 음향 모델링 기술, 그리고 고급 AI 알고리즘이 필요합니다. 이러한 이유로 AI 기반 가상 악기의 부상이 가상 악기 시장 성장을 견인할 것이라 평가받고 있습니다. 따라서 저희는 단순한 기술적 진보를 넘어 우리가 세상과 상호작용을 하는 방식을 혁신적으로 변화시키고 있는 Hand Pose Estimation 기술과 악기를 통해 물리적 세계와 디지털 세계를 연결하며 새로운 가능성을 열어가는 가상 악기 기술을 구현하기 위해 Pose Estimation을 통한 가상 악기 프로젝트를 진행했습니다.

 

 

2. Task

Hand Pose Estimation을 설명하기 위해, Pose Estimation을 설명하겠습니다.

 

2.1. Pose Estimation (자세 추정)

Pose Estimation은 이미지 및 비디오와 같은 입력 데이터에서 인체 부위를 찾고 신체 골격과 같은 인체 표현을 구축하는 것을 목표로 합니다. 그중 인간의 포즈를 추정하는 것을 Human Pose Estimation(HPE)이라고 합니다.

 

Pose Estimation은 여러 가지 분류 기준이 존재합니다. 관절, 주요 신체 부위 등을 나타내는 랜드마크의 위치를 추정한 좌표에 따라 2D, 3D로 나누기도 하며, 한 번에 추정하는 사람 수에 따라 Single-Person, Multi-Person으로 분류되기도 합니다. 특히 3D Pose Estimation의 경우에는 입력 데이터의 유형에 따라 단안 RGB(Monocular RGB) 카메라 및 비디오 또는 관성 센서 등의 센서 데이터, 다중 카메라(Multiple Views)로 나누어지기도 합니다.

 

Pose Estimation에서의 Regression Methods와 Heatmap-based Methods

 

랜드마크를 탐지하는 방법에서도 그 방법이 나누어집니다. Heatmap을 생성하여 이를 바탕으로 랜드마크의 위치를 찾는 Detection-based Methods(탐지 기반 방법)와 랜드마크의 위치를 직접적으로 추정하는 Regression-based Methods(회귀 기반 방법)가 있습니다.

 

Convolutional Pose Machine(CPM)의 Stage별 Heatmap

 

Detection-based Methods에서 모델은 각 관절에 대한 Heatmap을 생성합니다. 즉, 추정하는 관절 수만큼의 Heatmap을 형성한 뒤, argmax 함수를 적용하여 각 관절의 정확한 위치를 추정합니다. 이 방식을 사용한 대표적인 사례로 Convolutional Pose Machine(CPM)이 있습니다. CPM은 CNN을 사용하여 추정하기 쉬운 랜드마크(예: 머리)를 먼저 추정한 뒤, 영역을 좁혀가면서 추정하기 어려운 랜드마크를 추정합니다.

 

Deep Pose의 단계별 Regression Block

 

Regression-based Methods는 각 관절 좌표를 직접 추정합니다. 이미지에서 관절 좌표를 예측하여 진행하는 방식이며, 더 좋은 특징 정보를 학습하기 위해 Multi-task Learning을 적용하기도 합니다. 직접 추정하기 때문에 21개 랜드마크 모델을 사용하는 경우에 마지막 층이 예측을 수행하기 위해 3(x, y, z) * 21(랜드마크 개수)이 존재해야 하며, 대표적인 모델로 Deep Pose가 있습니다.

 

Regression-based Methods는 비선형적인 랜드마크를 추정해야 하므로, 더 많은 데이터와 Epoch(모델 반복 횟수)가 필요합니다. 그렇기 때문에 2D 추정에 있어서 Detection-based Methods를 주로 사용합니다. 하지만, 각 랜드마크에 대한 3D Heatmap을 생성하는 것은 컴퓨팅적인 측면에서 무거운 일이므로 Regression-based Methods는 3D 추정에 주로 사용됩니다. 저희는 프로젝트에서 2.5D 추정을 진행하기 때문에 이중에서 Regression-based Methods를 적용하였습니다.

 

2.2. Hand Pose Estimation (손 자세 추정)

Hand Pose Estimation은 Pose Estimation의 하위 분야로, 우리의 손을 어떤 부분(예: 손바닥과 손가락)의 집합으로 모델링하고 손 이미지에서 해당 위치(2D)를 찾는 프로세스, 또는 3D 공간에서 손 부분의 위치를 시뮬레이션하는 프로세스입니다.

 

21개의 랜드마크

 

데이터셋에서 손을 모델링하는 데 사용되는 관절 수와 관련된 규칙은 없습니다. 하지만 가장 많이 사용되는 것은 21개 관절 모델이며, 대부분의 데이터셋과 사전 학습된 모델에서 이 방식을 사용합니다.

 

Hand Pose Estimation은 Depth Map을 기반으로 하는 방법과 RGB 이미지를 기반으로 하는 방법, 그리고 이 두 가지를 모두 사용하는 방법이 있습니다. Depth Map을 기반으로 하는 경우에는 깊이를 추정하는 방식을 도입하여 2.5D 랜드마크 좌표를 예측합니다. RGB 이미지를 기반하는 경우는 Depth Map을 기반으로 하는 경우보다 경향성을 학습하는 데 필요한 데이터가 더 많이 요구됩니다.

 

3. Methods

프로젝트의 전체적인 파이프라인

 

Hand Pose Estimation을 바탕으로 프로젝트를 진행하기 위한 대략적인 파이프라인은 위의 그림과 같습니다.

 

3.1. MediaPipe Hands

Mediapipe Pipeline을 활용한 Hand Pose Estimation 결과. (왼쪽): 상대적 깊이가 다른 음영으로 표현된 손 랜드마크. 원이 밝고 클수록 카메라와 랜드마크가 가깝습니다. (오른쪽): Pixel3(Android 기기)에서 실시간 다중 손 자세 추정.

 

손을 통해 악기를 연주하기 위해서 Hand Pose Estimation을 통해 손의 주요 랜드마크를 예측하는 것이 필요합니다. 또한, 악기이기 때문에 실시간으로 동작이 가능하고 높은 정확도를 가진 모델을 만들어야 했습니다. 따라서 저희는 이러한 조건에 부합하는 MediaPipe Hands를 사용했습니다.

 

Mediapipe Hands는 원활한 손의 랜드마크 추정을 위해 아래의 그림과 같은 파이프라인을 제안합니다.

 

 

Mediapipe Hand는 단일 RGB 카메라에서 사람의 손 골격을 예측하는 Real time, On-device Hand Pose Estimation 파이프라인을 제시합니다. 제안한 Pipeline은 1. 손의 위치를 탐지하고, 2. 손의 주요 관절인 랜드마크 위치를 추정하는 모델로 구성됩니다.

 

MediaPipe Hands Pipeline의 순서

 

이미지에서 바로 랜드마크를 추정하는 것이 아니라 2-Stage로 진행되는 이유로는 2가지가 있습니다. 첫 번째로, 정확하게 자른 손 이미지를 원본 이미지 대신 사용한다면, 데이터 증강(회전, 변환 및 크기 조정 등)의 필요성이 크게 줄어들고 대신 랜드마크 좌표 예측에 전념할 수 있습니다.

 

또한, 손 예측이 매 프레임마다 진행되지 않습니다. 이전 프레임에서 식별된 손 랜드마크를 기반으로 손을 추적하며, Landmark 모델이 더 이상 손 존재를 확인할 수 없는 경우에만 손을 감지하여 손을 다시 위치화합니다. 따라서, 모든 프레임을 사용하지 않기 때문에 더 효율적이고 빠른 성능을 보장할 수 있습니다.

 

3.1.1. Hand Detector: BlazePalm

 

손을 탐지하는 모델로, BlazeFace라는 Face Detection 모델을 손바닥에 적용한 BlazePalm 모델을 사용합니다. BlazePalm은 FPN과 비슷한 네트워크를 가지고 있으며, BlazeBlock이라는 블록으로 이루어져 있습니다. (이에 대한 더 자세한 설명은 해당 글을 참고해 주세요!)

 

또, 손을 탐지하는 것이 아니라 손바닥을 탐지합니다. 왜 굳이 손바닥을 탐지하는 걸까요? 우선 손바닥은 대체로 정사각형에 가까운 형태를 하고 있습니다. 엄밀히 말하면 손바닥 주변에 바운딩 박스를 그린다면 정사각형을 사용할 수 있기 때문에 정사각형 앵커 박스만 사용해도 된다는 장점이 있습니다. 이를 통해 앵커 박스의 수를 3~5배 가량 줄일 수 있습니다.

 

그리고 손바닥은 정방형이기 때문에 악수나 사물에 가려졌을 때도(Occlusion) 탐지에 용이합니다. 또한, 우리의 손은 많은 관절을 가지고 다양한 자세를 취할 수 있습니다. 따라서 손을 탐지하는 것보다 일정한 모양을 가진 손바닥을 탐지하는 것이 더 간단합니다. 

 

3.1.2. Landmark Detector

MediaPipe Hands의 랜드마크 추출 모델은 BlazePalm의 출력인 손 영역을 입력으로 사용합니다. 손 영역은 손바닥 영역을 기준으로 회전 정도, 크기 등을 고려해 결정됩니다. 

 

손 랜드마크 모델의 아키텍처. 모델은 특징 추출기를 공유하는 세 개의 출력을 가지고 있으며, 각 헤드는 같은 색상으로 표시된 해당 데이터셋에 의해 훈련됩니다.


위 그림은 랜드마크 추출 모델의 구조입니다. 가상 이미지, 실제 이미지 데이터셋을 통해 학습되었으며, 21 3D Landmarks, Hand Presence, Handedness, 총 3가지 출력이 생성됩니다. 

  1. 21 3D Landmarks: x, y, 상대적 깊이로 구성된 21개의 손 랜드마크
  2. Hand Presence: 입력 이미지에 손이 존재할 확률을 나타내는 플래그
  3. Handedness: 손의 이진 분류(왼손, 오른손)

손의 존재 확률을 측정하는 이유는 MediaPipe Hands 파이프라인을 확인하면 알 수 있습니다. 손 추적 실패 시 필요한 것으로, 가능성이 작다면 손바닥 탐지 모델(BlazePalm)에서 다시 손바닥을 추적합니다.

 

또한 Handedness를 측정하는 이유는 VR/AR에서 손을 사용한 효과적인 상호 작용은 중요한 요소이기 때문에 이를 위해 손 이진 분류기를 이용해 오른손과 왼손을 분류하는 것입니다.

 

Hand Landmark Detection까지 수행한 결과

 

3.2. OpenCV

가상 악기 프로그램의 편의를 높이기 위해 종이와 같은 평면 물체를 인식하여 악기 AR을 띄우는 방안을 선택했습니다. 이제, 종이만 있다면 언제, 어디서나 악기를 연주할 수 있습니다! (물론 아직은 피아노 한정입니다)

 

악기 AR을 띄우기 위해 Python의 OpenCV 라이브러리를 이용했습니다. OpenCV는 수백 개의 컴퓨터 비전 알고리즘을 포함하는 오픈 소스 라이브러리입니다. 이 프로젝트에서는 악기 이미지 파일 읽기 및 전처리, 종이 모서리 검출 및 이미지 변환에 모두 OpenCV를 이용했습니다.

 

3.2.1. 종이 인식

종이를 인식하기 위해서는 웹캠으로 입력받은 이미지에서 직선의 형태를 띠고 있는 종이 영역을 검출하는 작업이 필요했습니다. 이를 위해 Contour(경계 값)를 추출할 수 있는 여러 함수에 대해 알아보았고, 최종적으로 Canny Edge Detection을 적용하였습니다. 이때, 임계값은 min=30, max=150으로 설정하였습니다.

 

Canny Edge Detection을 통해 Contour를 출력할 수 있었지만, Contour의 선이 얇아 끊기는 지점이 생기는 문제가 발생하였습니다. 그래서, Morphological Transformation에서 Dilation(팽창)을 적용하여 Contour를 더 넓게 연결하였습니다. 단, 탐지해야 하는 영역이 종이의 가장자리라는 직선 영역이었기 때문에 cv2.MORPH_RECT를 사용하여 사각형의 형태로 더 넓히는 방식을 사용하였습니다.

 

Contour 중에서, 종이로 인식하는 공간을 초록색 Box의 형태로 인식하고 있는 것을 확인할 수 있습니다. 이는 Contour로 측정한 공간에서 닫힌 공간을 면적이 큰 순서대로 상위 5개를 목록화한 다음, 순서대로 사각형의 최소 각도가 30°보다 큰 사각형을 종이로 인식하는 공간으로 합니다. 이때, 30°는 Virtual Instrument를 연주하기에 적절한 종이의 각도로 지정한 것입니다. 각도는 내적의 사잇값 공식을 통해 구했습니다.

 

3.2.2. 악기 이미지를 종이에 맞게 변환하기

AR 가상 악기를 화면에 나타내기 위해서는 직사각형 형태인 악기 이미지를 검출한 종이 영역에 맞게 변환하는 과정이 필요합니다. 이를 위해 Perspective Transformation을 적용하였습니다.

 

 

 

Perspective Transform 원리
핀홀 카메라 원리

 

Perpective Transformation이란 가까운 것은 크게 보이고, 먼 것은 작게 보이는 원근법을 적용한 방식이라고 이해하면 쉽습니다. 자세히 말하면 핀홀 카메라(Pin-hole Camera) 모형을 사용하여 2차원 이미지를 변환하는 방법인데, 4개의 점을 기준으로, 핀홀 카메라를 통과하였을 때 어떻게 보이는지를 생각하면, 변환의 형태를 쉽게 생각할 수 있습니다. 아래의 이미지가 핀홀 카메라의 이미지에 투영되는 부분이고, 피사체로는 정사각형이 존재한다고 할 때, 파란 사각형의 꼭짓점의 위치가 변함에 따라 다른 픽셀도 변화하는 것을 관찰할 수 있습니다. 

 

 

검출한 종이 영역이 직사각형의 형태를 띠지 않은, 사다리꼴 또는 평행사변형 형태를 띠기 때문에 악기 이미지의 4개의 꼭짓점과 검출된 종이 영역의 4개의 꼭짓점에 대응했습니다.

 

3.3. Interaction

시도했던 누름 정의 방법

 

Hand Pose Estimation을 사용해 손을 감지하고, 가상의 건반을 OpenCV를 통해 띄우는 것은 가능했지만, 가상 악기를 연주하는 데 있어 가장 중요한 손과 가상 악기 사이의 상호작용은 여러 시도를 거쳤습니다. 이 중에서 ‘이전 프레임과 y값 변화량 비교’ 방식과 ‘초기 y값을 설정하여 변화량 비교’ 방식을 조합하여 사용하였습니다.

 

3.3.1 속도 기반 방식

 

이전 프레임과 비교하여, 손끝 랜드마크의 수직 좌표값이 하락한 경우을 누른다고 인식한 방법입니다. 각 랜드마크의 구분이 중요하기 때문에 오른손과 왼손을 구분하여 랜드마크 좌표를 기록하였습니다. 이전 프레임과 비교한다는 것에서 알 수 있듯이, 속도을 사용한 방법입니다.

 

하지만 위의 비디오에서 확인할 수 있듯이, 손이 가만히 있어도 추정한 랜드마크가 흔들리는 것을 확인할 수 있었습니다. 그래서 단순히 흔들리는 것 뿐만 아니라, 측정한 속력이 10을 넘어야 눌렀다고 인식하도록 했습니다.

 

(왼쪽) 노이즈를 보정하기 전 (오른쪽) 노이즈를 보정한 후

 

하지만 속력 임계값을 10으로 설정해도 유사한 문제가 발생했습니다. 그래서, 앞서 언급한 랜드마크의 위치 차이를 이용하는 방법에서 노이즈를 보정하는 부분을 추가했습니다. 실시간 웹캠으로 손가락의 랜드마크 값을 계산해야 하므로 손이 가만히 있더라도 약간의 떨림이 발생하는 등의 노이즈가 발생했는데요, 이러한 노이즈로 인한 랜드마크의 위치 변화가 눌림 감지에 영향을 주었기 때문에 노이즈를 보정하는 부분을 추가했습니다. 하지만 여전히 한 손가락이 움직일 때 옆에 있는 손가락이 함께 움직여 동시에 눌린 것으로 판단하거나, 움직임이 작은 손가락은 제대로 눌림을 탐지하지 못하는 등의 문제가 발생했습니다.

 

3.3.2 기준선 기반 방식

그렇다면, 단순히 누르는 것이 아니라 ‘종이에 그려진 선을 가리는 것은 어떠 할까’라는 생각하게 되었습니다. 저희가 가상 악기를 연주하기 위해 제안한 웹캠 각도에서는 손이 종이 위에 그려진 선보다 앞으로 나가지 않으며, 선을 누르는 것이 곧 악기를 누르는 것임을 깨달았습니다.

 

선을 누르는 장면을 위, 옆에서 본 모습

 

선이 끊기는지 여부를 확인한다면, 손끝 랜드마크의 좌표가 선 위에 있는지만 확인하면 되기 때문에 더 간단하게 구현할 수 있겠다고 생각했습니다. 또한, 앞으로 더 많은 악기를 추가하고 싶은 입장에서, 기타와 같은 현악기 구현에 있어 더 앞서갈 방법이라 생각했습니다. 하지만, 이 경우에는 종이 위의 선을 일정하게 인식하는 것이 어려웠습니다. 인식한 선이 계속 바뀌는 문제가 발생한 것입니다.

 

 

그래서 이번에는 가상의 선을 그리고, 이를 중심으로 눌림 감지를 진행하고자 했습니다. 하지만, 종이 위에 그려진 선과 다르게 가상의 선은 선보다 랜드마크가 아래로 내려오는 경우가 있어, 오탐지 되는 문제가 발생했습니다. 이 방법으로는 손의 움직임을 제대로 반영하지 못하기 때문에 눌림 탐지 방법으로 적절하지 않다고 판단했습니다.

 

3.3.3. 실제 건반 모방 방식

 

피아노 건반이 눌리는 방식에서 고안한 아이디어입니다. 모든 손끝 랜드마크의 수직 좌푯값인 y좌표를 특정 값으로 초기화하고 y좌표의 변화량(dy)을 사용해 건반의 눌림을 모방하는 원리입니다. 실제 건반은 일정 힘이 가해져야 누를 수 있기 때문에 이와 비슷하게 변화량이 일정값 k보다 큰 경우에만 변화량이 반영되어 눌림을 탐지하도록 하였으며, 변화량이 음수이거나 k보다 작다면 0으로 설정했습니다.

 

추가로, 화음을 구현하기 위해 손가락의 y좌표가 초기 상태로 돌아와야만 눌렸다고 정의했습니다. 예를 들어, 도-미-솔 화음을 칠 때 검지와 약지는 건반을 누르지 않기 때문에 초기 좌표로 돌아오지 않습니다. 따라서 프로그램이 실행되고 3초 이후 손가락의 초기 상태를 저장한 후, 이와 비교해 손가락이 원래 위치가 아니라면, dy > k여도(손가락이 움직였다 하더라도) 눌리지 않게 됩니다.

 

사용한 방법론 정리와 이로 인해 생긴 효과

 

결론적으로 이전 프레임과 y값 변화량을 비교하는 첫 번째 방법과 초기 y값을 설정하여 변화량을 비교하는 마지막 방법을 합하여 누르는 동작을 정의했습니다.

 

이를 통해 실제 피아노와 같이 손을 수직 방향 아래로 움직였을 때만 피아노가 동작하게 할 수 있었고, 같은 음을 연속하여 치는 연속 연주가 가능해졌으며, 누르려고 의도하지 않은 손가락을 눌렀다고 판단하는 오탐지를 줄일 수 있었습니다.

 

3.4. Play Sound: Pygame

 

악기 소리를 출력하기 위해 Python의 Pygame 라이브러리를 이용했습니다. Pygame 라이브러리는 이름에서 알 수 있듯이 Python을 통해 게임과 멀티미디어 프로그램을 제작하기 위한 라이브러리입니다. 이 중에서 소리를 출력할 수 있는 pygame.mixer 모듈을 이용했습니다.

 

Playsound, Pygame, PyAudio, Sounddevice 등 소리를 출력하기 위한 여러 라이브러리 중 Pygame을 선택한 이유는 간단한 코드를 통해 쉽게 소리 출력이 가능하다는 장점과 pygame.mixer.set_num_channels(channels)를 통해 출력할 수 있는 채널 수를 설정하여 여러 소리를 한 번에 출력하는 ‘화음 출력’이 가능했기 때문입니다.

 

4. Result

간단하게 연주를 진행할 수 있는 프로젝트 데모를 완성했습니다. 프로젝트는 GitHub에 공개되어 있으니 확인해 보시면 좋을 것 같습니다!

 

demo.mov
14.77MB

 

5. Conclusion

프로젝트 세부 파이프라인

 

웹캠의 입력을 받아 Hand Pose Estimation과 AR 기술의 상호작용으로, 실시간으로 작동하는 가상 악기 프로젝트를 만들어내었습니다. 하지만, 결과물과 관련한 작은 아쉬움이 존재합니다.

 

Hand Pose Estimation을 수행하는 데 있어, 특정 각도에서는 잘 진행되지 않는 것을 확인했습니다. 이는 손가락이 서로 비슷하기 때문에 발생하는 문제로 Hand Pose Estimation의 고질적인 문제입니다. 이를 개선하기 위해 다른 모델을 적용해 보기도 하였으나, 이번에는 실시간으로 동작하지 않는 문제가 발생했습니다.

 

그래서 이를 웹캠의 각도 제한과 키보드 입력을 통한 감도 수정 방법을 적용해 해결하고자 했습니다. 웹캠의 각도 제한은 종이를 탐지할 때 적용하는 최소 각도 값을 수정하여 진행하였고, 감도는 경험적으로 제일 잘 된 값을 기본값으로 하여 일정 수준 조절할 수 있도록 했습니다.

 

Interaction에 있어서 누르지 않은 다른 손가락이 누르는 것으로 탐지되는 것 또한 문제였습니다. 정량적인 노력 끝에, 누르지 않은 다른 손가락이 덜 인식되는 매개변수 값을 찾아냈습니다. 그래서 이전에 비해 다른 손가락이 덜 인식되는 것을 확인할 수 있었습니다. 다만, 손을 종이 위에 붙인 상태로 연주하는 것이 가장 정확한 결과를 가지고 오는 것 또한 사실입니다.

 

저희는 Hand Pose Estimation 기술을 바탕으로, 다양한 상호 작용이 요구되는 가상 악기 프로젝트를 진행했습니다. 이 프로젝트를 바탕으로, Pose Estimation 기술과 AR에 대해 알 수 있었음과 동시에 문제를 해결하기 위한 해결 방안을 도출하는 능력을 키울 수 있었습니다.