Project GameFace로 누구나 게임에 접근 가능

6월 12, 2023
Avneet Singh Product Manager Google Partner Innovation
Sisi Jin UX Designer Google PI
Lance Carr Collaborator

I/O 2023에서 Google은 사람들이 머리 움직임과 얼굴 동작으로 컴퓨터의 커서를 제어할 수 있는 오픈소스, 핸즈프리 게임 ‘마우스’인 Project Gameface를 출시했습니다. 사용자가 눈썹을 올리는 동작으로 마우스를 클릭하고 드래그하거나 입을 벌려 커서를 움직일 수 있어 게임의 접근성이 더욱 높아집니다.

이 프로젝트는 근육이 약화되는 진행성 질환인 근육위축병을 앓는 사지마비 비디오 게임 스트리머인 Lance Carr의 사연을 접한 것을 계기로 진행되었으며 Lance와 협력하여 Project Gameface가 탄생했습니다. 제품에 얽힌 전체 스토리는 여기의 Google Keyword 블로그에서 확인할 수 있습니다.

이처럼 새로운 방식으로 마우스 커서를 제어하는 방법에 대해 생각해 보는 것은 매우 흥미로운 경험이었습니다. 많은 실험을 거쳐 머리 움직임과 표정이 마우스 커서를 프로그래밍하는 독특한 방법이 될 수 있음을 발견했습니다. 어떤 개발자라도 MediaPipe의 블렌드 셰이프(blendshape) 옵션이 있는 새로운 Face Landmarks Detection API를 사용하여 478개의 3차원 얼굴 랜드마크와 52개의 블렌드 셰이프 점수(얼굴 표정을 나타내는 계수)를 활용하여 상세한 얼굴 표면을 실시간으로 유추할 수 있어 가능한 일이었습니다.

제품 구성 및 세부 정보

이 기사에서는 Project Gameface를 개발한 방법과 흥미로운 제품을 만들려고 활용한 다양한 오픈소스 기술에 대한 기술적 세부 사항을 공유합니다!

머리 움직임을 사용한 마우스 커서 이동

캡션: 머리 움직임으로 마우스 커서를 움직이고 다양한 화면 해상도에 맞춰 커서 속도 사용자 설정하기.

이 프로젝트를 통해 머리 움직임으로 마우스 커서를 움직이는 기능의 개념을 탐구했습니다. 이마와 홍채를 두 랜드마크 위치로 삼아 초점을 맞추었습니다. 이마와 홍채 랜드마크는 모두 안정성이 뛰어난 것으로 유명합니다. 하지만 Lance는 홍채 랜드마크를 사용하는 동안 커서가 잘 작동하지 않는다는 점을 알아차렸습니다. 사람들이 눈을 깜빡일 때 홍채가 살짝 움직여 커서가 의도치 않게 움직일 수 있기 때문이었습니다. 따라서 이마 랜드마크를 기본 추적 옵션으로 사용하기로 결정했습니다.

사람들은 특정 방향으로 머리를 움직이는 것이 어려울 수 있습니다. 예를 들어, Lance는 왼쪽보다는 오른쪽으로 머리를 더 빠르게 움직일 수 있습니다. 이 문제를 해결하기 위해 사용자 친화적 솔루션, 즉 각 방향에 대해 별도의 커서 속도로 조정하는 기능을 도입했습니다. 이 기능을 사용하면 기본 설정을 통해 커서의 움직임을 사용자 설정할 수 있어 보다 부드럽고 편안하게 탐색할 수 있습니다.

휴대용 컨트롤러처럼 매끄러운 그런 사용 환경을 구현하고 싶었습니다. 주로 극복하고자 했던 문제 중 하나가 바로 마우스 커서의 불안정성입니다. 커서의 흔들림은 사용자 설정, 카메라, 잡음 및 조명 조건을 포함한 다양한 요인의 영향을 받습니다. 사용자가 쉽고 편하게 이 기능을 특정 설정에 가장 적합하도록 미세 튜닝할 수 있는 조정 가능한 커서 스무딩 기능을 구현했습니다.

얼굴 표정을 사용하여 마우스 동작 및 키보드 누름 수행

아주 초창기부터 기본적으로 파악하고 있었던 사항 중 하나는 사람마다 다양한 얼굴 표정을 지을 때 느끼는 편안함의 수준이 제각기 다르다는 점이었습니다. 어떤 사용자에게는 쉬운 동작이 다른 사용자에게는 의도적으로 수행하기가 매우 까다로울 수 있습니다. 예를 들어, Lance는 쉽사리 두 눈썹을 서로 따로 움직일 수 있지만 다른 팀원들은 그 동작을 따라 하기 어려워했습니다. 그래서 사람들이 마우스 제어에 사용하는 표정을 맞춤 설정할 수 있는 기능을 만들기로 했습니다.

캡션: 얼굴 표정으로 마우스 제어하기

마우스 동작에 대응하는 동작을 사용자 설정 방식으로 바인딩한다고 생각하면 됩니다. 제품에 포함해야 할 마우스 동작을 고려할 때 마우스 왼쪽 버튼과 오른쪽 버튼 클릭으로 위아래로 스크롤하는 동작과 같은 일반적인 시나리오를 포착하려고 했습니다. 그러나 머리로 마우스 커서 움직임을 제어하는 것은 기존 방식과는 다른 경험입니다. 얼굴 동작으로 마우스 커서가 화면 중앙에 오도록 재설정하는 옵션도 사용자에게 제공하고 싶었습니다.

캡션: 얼굴 표정으로 키보드 제어하기

MediaPipe Face Landmarks Detection의 가장 최근 릴리스는 블렌드 셰이프 출력이라는 흥미로운 추가 기능을 제공합니다. 이 향상된 기능으로 해당 API는 왼쪽 눈썹을 올리거나 입을 벌리는 것과 같은 52가지 얼굴 동작 표현을 나타내는 52개의 얼굴 블렌드 셰이프 값을 생성합니다. 이러한 값을 효과적으로 매핑하여 다양한 기능을 제어함으로써 사용자에게 확대된 사용자 설정 및 조작 가능성을 제공할 수 있습니다.

동일한 기능을 확장하고 키보드 바인딩 옵션도 추가할 수 있었습니다. 이를 통해 얼굴 동작으로 비슷한 바인딩 방식으로 일부 키보드 키를 누를 수 있습니다.

마우스/키보드 동작을 트리거할 시점을 확인하는 동작 크기 설정

캡션: 동작을 트리거할 동작 크기 설정

소프트웨어를 테스트하는 동안 사람들의 얼굴 표정이 저마다 어느 정도 뚜렷한 특징이 있다는 사실을 발견했습니다. 그래서 사람들이 마우스 동작을 트리거하기 위해 동작을 취해야 하는 정도를 제어할 수 있는 동작 크기라는 아이디어를 소프트웨어에 도입했습니다. 이때 블렌드 셰이프 계수가 도움이 되었으며, 이제는 서로 다른 사용자가 각자의 특정한 표정에 대해 제각기 다른 기준점을 설정할 수 있으므로, 자신에게 편안하게 사용 환경을 맞춤화할 수 있습니다.

카메라 피드를 계속 사용할 수 있도록 설정

Lance로부터 얻은 또 다른 유용한 주요 정보는 게이머들이 카메라를 여러 대 보유한 경우가 많다는 점이었습니다. 머신러닝 모델이 최적으로 작동하려면 적절한 조명으로 사용자의 얼굴로 직접 향하는 카메라를 사용하는 것이 가장 좋습니다. 따라서 사용자가 올바른 카메라를 선택하여 프레임을 구성하고 최적의 성능을 제공할 수 있는 기능을 포함시켰습니다.

당사 제품의 사용자 인터페이스는 라이브 카메라 피드를 통합하여 사용자에게 머리 움직임과 동작을 실시간으로 보여줍니다. 이 기능은 몇 가지 이점을 제공합니다. 첫째, 사용자가 자신의 움직임을 직접 관찰함으로써 기준점을 보다 효과적으로 설정할 수 있습니다. 시각적으로 확인할 수 있으므로 정보에 기반하여 적절한 기준점 값을 결정할 수 있습니다. 또한 라이브 카메라 피드를 통해 사용자가 자신의 움직임을 애플리케이션의 해당 동작과 시각적으로 연관시킴에 따라 다양한 동작에 대한 사용자의 이해도가 높아집니다. 전반적으로, 카메라 피드는 사용자 경험을 크게 향상시켜 정확한 기준점 설정과 동작에 대한 더 깊은 이해를 촉진합니다.

제품 패키징

다음 단계는 사용자 설정 논리를 사용하여 마우스와 키보드를 제어하는 기능을 만드는 것이었습니다. Python 애플리케이션 내에서 마우스 및 키보드 제어를 활성화하기 위해 마우스 제어를 위한 PyAutoGUI와 키보드 제어를 위한 PyDirectInput의 두 가지 라이브러리를 활용합니다. 강력한 마우스 제어 기능을 위해 선택하는 PyAutoGUI를 사용하여 마우스 움직임, 클릭 및 기타 동작을 시뮬레이션할 수 있습니다. 다른 한편으로는, 게임과 DirectX에 의존하는 애플리케이션을 포함한 다양한 애플리케이션과의 향상된 호환성을 제공하는 PyDirectInput을 키보드 제어에 활용합니다.

애플리케이션 패키징을 위해 PyInstaller를 사용하여 Python 기반 애플리케이션을 실행 파일로 전환하여 사용자가 Python 또는 추가 종속 항목을 설치할 필요 없이 소프트웨어를 더 쉽게 실행할 수 있도록 했습니다. PyInstaller는 애플리케이션을 배포할 수 있는 안정적이고 효율적인 수단을 제공하여 원활한 사용자 경험을 보장합니다.

이 제품에는 마우스 커서 처리와 같은 중요한 기능에 사용자를 참여시키고자 새로운 폼 팩터를 도입합니다. 제품과 UI를 직관적이고 쉽게 만드는 것이 디자인 팀과 엔지니어링 팀의 최우선 과제였습니다. 저희는 Lance와 긴밀히 협력하여 그의 피드백을 UX 고려 사항에 포함했으며 CustomtKinter가 Python에서 대부분의 UI 고려 사항을 처리할 수 있다는 점을 알았습니다.

Project GameFace의 잠재력을 확인하게 되어 기쁘게 생각하며 개발자와 기업이 이를 활용하여 새로운 사용 환경을 개발하기를 고대하겠습니다. GameFace의 코드는 여기 Github에서 오픈소스로 제공됩니다.


감사의 말

Lance Carr, David Hewlett, Laurence Moroney, Khanh LeViet, Glenn Cameron, Edwina Priest, Joe Fry, Feihong Chen, Boon Panichprecha, Dome Seelapun, Kim Nomrak, Pear Jaionnom, Lloyd Hightower 등 이 프로젝트에 참여해 귀중한 공헌을 해주신 여러분께 감사드립니다.