[모션인식게임] 기본 이론 및 라이브러리 설치

이 시리즈에서는 웹캠을 이용한 모션인식 게임을 만들어보고자 한다. 다만 유명 회사에서 개발한 것과 같이 사람 그 자체를 인식해서 스켈레톤을 따오는 방식을 단기간에 구현하기에는 무리가 따를 것 같아서 마커를 사용하는 간단한 방식의 모션 인식을 구현해볼 것이다.

마커는 카메라가 인식할 수 있는 특정 패턴을 의미한다. 보통 흰색과 검은색 사각형의 조합을 사용하며, 그 종류가 매우 다양하다. 흰색과 검은색 상자 사이의 점 또는 선을 카메라가 인식함으로써 마커가 존재하는 3차원 위치를 컴퓨터가 인식할 수 있게 된다. 마커를 인식할 수 있게 하는 다양한 라이브러리가 있는데, Visual C++에서 OpenCV를 이용해 모션인식 프로그램을 구현해보고자 한다.

OpenCV는 마커 인식 뿐만이 아니라 카메라를 인식하는 다양한 함수를 지원함으로써 머신러닝과 같은 분야에서도 널리 사용되고 있다. C++ 이외에도 파이썬과 같은 다양한 언어를 지원하고 있으며, 유명한 만큼 관련 위키에 내용이 자세히 적혀있다는 점도 있다.

라이브러리를 사용하기 위해서 홈페이지에서 라이브러리를 내려받았다. Visual Studio에서 이 라이브러리를 사용하기 위해서 설정을 해주어야 하는데 OpenCV는 그렇게 복잡하지 않게 설정할 수 있다. 하지만 CMake를 이용하면 간단한 명령어 몇 줄로 컴파일러에 적합하도록 라이브러리를 설정할 수 있다.

라이브러리는 위처럼 설정하였고 다음으로 카메라를 선정하였다. 후보군으로 뽑을 만한 카메라는 RGB, 모노 카메라, 스테레오 카메라가 있다. RGB 카메라는 말그대로 색을 RGB로 나누어 인식하는 카메라이고, 모노 카메라는 렌즈가 하나인 일반 카메라, 스테레오 카메라는 키넥트나 PS Camera 같은 렌즈가 두 개인 카메라다. RGB 카메라는 3D 좌표 인식에 취약해 후보군에서 가장 우선적으로 제외하였다. 나머지 두 개의 후보는 하고자 하는 작업에 따라 골라야 한다.

우선 모노 카메라를 사용할 경우, 비교적 간단하고 3D 좌표에 대한 계산량이 적어서 프로그램의 속도가 빨라진다. 다만 카메라의 초점을 한 번 정하고 나면 바꾸기가 힘들다는 단점이 존재한다. 스테레오 카메라의 경우는 그 배경 이론 습득과 구현이 비교적 복잡하다. 초점 변화에 있어서는 모노 카메라보다 자유롭고, 카메라 2개를 사용하기 때문에 더 정확하게 계산할 수 있다는 장점이 존재한다.

모션 인식보다는 게임을 만드는 것이 우선이므로 사용이 간편한 모노 카메라를 사용하기로 하였다. 사용을 위해서는 모노 카메라의 특성을 알아야 한다. 가장 먼저 카메라의 초점을 고정시킨다. 요즘 나오는 웹캠들은 자동으로 초점을 조절하기 때문에 별도의 프로그램을 이용해서 고정시킨다. 카메라의 특성을 알아내는 것은 가상의 3차원 공간 상에서 카메라가 중심의 좌표계를 만들기 위해서 반드시 필요한 과정이다. 또한 이 과정을 통해 카메라 렌즈에 의한 왜곡을 프로그램을 통해 보정해주는 것도 가능하다. 이 과정을 통틀어서 칼리브레이션이라고 한다. 다음 글에서는 칼리브레이션 과정에 사용하는 OpenCV의 함수들을 이용해 칼리브레이션을 구현해보고자 한다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.