티스토리 뷰


이번 논문은 Stanford Univ의 Tang씨가 쓴 논문 비슷한 글이다.(교수인줄 알았는데 학생이네요..) 사실 형식은 논문형식을 취하고 있는데 지금은 교육 자료로 쓰이는 것 같다. 궁금하신 분은 한번 살펴보는게 좋을 듯하다.

http://www.stanford.edu/class/ee368/Project_11/Reports/Tang_Hand_Gesture_Recognition.pdf 


이 논문에서는 기본적으로 Microscale 상에서 gesture Recognition(인식)과 classification(분류)가 이뤄지는 것을 목표로 삼았다. 여기에는 기본적으로 OpenNI나 Kinect SDK에서 제공하는 Skeletal Tracking에서 손의 위치를 찾고 손이라고 생각되는 영역에 대해서만 자를 것이다. 

 우선 고전적으로 언급된 방법을 설명하자면 우선 현재 나와있는 SDK처럼 Skeleton 정보를 제공하지 않았기 때문에 일종의 blob을 취해서 찾는 형식을 택했다. 물론 이 과정은 손의 위치가 어디 정도인지를 찾는 아주 rough한 방법인데 이를 위해서는 DepthMap을 binary로 threshold시키는 것이 필요하다. 기존에 이런 것만 취했던에 비해서 키넥트를 활용하면 싼값에 RGB와 Depth를 같이 이용할 수 있기 때문에 이번 글에서 사용했다. 하지만 싼 값인만큼 resolution 성능이 낮기 때문에 추가적으로 SVM(Supported Vector Machine : http://www.aistudy.co.kr/pattern/support_vector_machine.htm) 알고리즘을 적용해서 성능을 높히고 추가적으로 HMM(Hidden Markov Model : http://www.aistudy.com/linguistics/speech/hidden_markov_model.htm)을 적용해서 gesture Recognition Algorithm을 만들었다.


구현에 있어서 두가지 섹션으로 나눴다.

첫번째는 hand의 location을 잡는 것이고 이를 위해서 다음과 같은 방법을 취했다.

1. 손이라고 추측되는 부분에 대한 픽셀을 뽑아내고 우선 순위를 배정

2. 그 우선 순위에 따라서 각 픽셀들을 SP (superPixel : http://ivrg.epfl.ch/research/superpixels ) 화 시키고 종합화 함.

3. 인접한 두개의 SP에 대한 cluster graph를 작성하고 손의 성향을 추론화함 - > 즉 손이라는 영역을 찾아내는 일련의 과정

4. 그 결과 값을 가지고 threshold시킴

이 방법을 취하면 단순히 OpenCV에서 RGB나 Depth에 기반한 Threshold에 비해서 조금더 세밀하게 손의 위치를 찾아낼 수 있다.


두번째는 gesture를 분류하는 방법이다.

1. hand position에 sequence를 누적시켜서 손의 위치에 따른 제스처를 저장함

2. 각 손의 위치 차이를 알기 위해서 앞에서 언급한 SVM 알고리즘을 적용.

3. HMM과 forward Recursion(http://www.cs.umd.edu/class/fall2002/cmsc214/Tutorial/recursion.html) 기법을 사용해서 손의 제스처를 유추함. 



댓글