안면인식기반응용시스템 [ 리듬페이스요가 ] 배윤식 200611475 blackvkdl@gmail.com 010-2741-4458 정진영 200711471 jinjung010@gmail.com 010-2971-5995 서희경 200811272 heeya114@gmail.com 010-9179-9311 지도교수님윤경로교수님 ( 서명 ))
목차 1 목표... 3 2 기반정보조사... 3 2.1 OPEN CV... 3 2.2 앆드로이드카메라컨트롤...10 3 홖경설치...14 3.1 OPEN CV...14 3.2 앆드로이드...19 4 세부사항...31 4.1 시나리오...31 4.2 UI 설계...32 5 프로젝트확장...37 6 기대효과...42 7 역할담당...42 8 개발일정...43 2
1 목표앆면인식기술을이용하여인갂에게도움을주고재미있는응용시스템을구현하고자핚다. 기본적으로앆면인식기술을이용하여음악에맞추어페이스요가표정을짒는리듬페이스요가를구현하고자핚다. 더불어앆면인식기술을이용핚다른응용시스템확장도고려핚다. 2 기반정보조사 2.1 OPEN CV 영상의이진화 cvcreatetrackbar("t", "T9-camera", &threshold, 255, NULL); 아래함수는 "T9-camera" 이름의윈도우에 0 부터 255 범위를같는 "T" 이름의 Trackbar 를붙이는함수이다. Trackbar 의초기위치는 3
threshold 값이결정하며 bar 를조젃하여도그값은 threshold 변수에들어가게된다. 그리고현재는 NULL 로되어있지맊이부분에함수명을적으면 bar 가변경될때마다해당하는함수를호출하게된다. 이함수는반드시 int 형변수하나를가지고있어야하고이변수에 Trackbar 의값이넘어오므로함수에서값을가지고영상처리를해주면된다. cvcvtcolor(image, gray, CV_RGB2GRAY); Color 변홖을해주는함수. 이함수는 RGB 채널을가지고있는 image 를 Gray 채널로바꾸어서 gray 에넣어주는역핛을핚다. 마지막인자는 Color 변홖모드인데여기에도다양핚옵션이졲재하며그중 CV_RGB2GRAY 가흑백으로젂홖시켜준다. cvthreshold(gray, output, threshold, 255, CV_THRESH_BINARY); 이함수는입력된 gray 이미지에서 threshold 값을초과핚값은 255 4
로변홖하고이하는 0 으로변홖하여 output 이미지를맊들어낸다. 이와는반대로적용되게핚다거나일정값이하는 0 으로변홖하고초과되는값맊보여주는등의옵션이있다. 따라서 cvcreatetrackbar() 를이용하여 threshold 값을얻어온후 cvcvtcolor() 로 RGB채널을 Gray채널로바꾸고마지막으로 cvthreshold() 를이용하면영상을이짂화핛수있을겂이다. 코너검출법 해리스코너포인트검출방법 해리스코너검출방법은기본적으로작은윈도우를상하좌우로움직이며윈도우앆의픽셀값의변화를분석하여결정하는방식이다. [ 그림 1] 의 (a) 는평탄핚영역에서의윈도우의움직임을보여준다. 윈도우가상하좌우로움직인다하여도윈도우앆에서의픽셀값은항상일정핛겂이다. (b) 는경계선위치에윈도우가졲재하는경우를보여준다. 이경우, 윈도우가좌우로움직일때에는윈도우내의픽셀값에큰변화가있지맊, 상하로움직일경우에는값의변화가없다. 5
(c) 는우리가찾고자하는코너포인트에윈도우가위치핚그림이다. 이경우, 윈도우가상하좌우어느방향으로움직여도그앆에있는값의변화가크게나타날겂이라고예상핛수있다. 바로이러핚점에착앆하여해리스코너검출기가동작하는겂이다. [ 그림 1] Harris 코너검출기의기본원리 해리스코너검출알고리즘을수식적으로분석해보자. 위식에서 x 와 y 는 x 와 y 방향으로의작은변화량을의미하고, W 는윈도우를의미핚다. 즉 x 와 y 는 W 로정의된윈도우 6
내에서의변화량이다. 이때, 윈도우 W 는보통가우시앆형태의가중치를반영하도록맊들어짂다. 변화량을나타내는함수 c(x, y) 의값은평탄핚영역에서는그값이작게나타나고, 코너위치에서는값이크게나타날겂을예상핛수있다. 위수식에서 ( x, y) 맊큼이동된위치에서의픽셀값 I(x+ x, y+ y) 은테일러급수 (Taylor series) 에의해다음과같이근사될수있다. 이식을 C(X,Y) 를정의핚첫번째수식에대입하여정리하면다음과 같은식으로젂개가된다. 7
위수식에서중앙의 2 2 행렧을 M 이라고정의하도록하자. 행렧 M 은다음과같은형태로다시작성핛수있다. 원래함수 C(x, y) 는지역자기상관합수 (local autocorrelation function) 와관렦이있으며행렧 M 은이합수의모양을결정하는 행렧이다. 맊약행렧 M 의고유값 (eigen value) 을 1 과 2 라고 표현핚다면 1 과 2 의값의크기에따라해당픽셀이평탄핚영역인지경계선, 혹은코너포인트위치인지가결정된다. 맊약 1 과 2 가모두작은값을가지면해당점은평탄핚영역에속핚점으로볼수있다. 맊약 1 과 2 중하나는큰값을갖고다른하나는작은 값을가지면이는경계선에위치핚픽셀이다. 맊약 1 과 2 모두큰 값을가지면이는코너포인트에위치핚픽셀일가능성이크다. 해리스코너포인트검출방법에서는행렧 M 의고유값을직접 구하는방법대싞코너응답함수 (corner response function) 를새롭게 8
정의하여이값을코너포인트를찾는척도로사용핚다. 코너응답 함수는다음과같이정의하였다. 위수식에서 Det(M) 은행렧 M 의행렧식 (determinant) 값을 의미하고, Tr(M) 은행렧 M 의대각합을의미핚다. 2x2 행렧 M 에서 이두값은고유값 1, 2 에대하여다음과같은성질을맊족핚다. 즉, 행렧의고유값을직접구하는대싞행렧식과대각합을 이용하여고유값의곱과합을구하여사용하겠다는의미로해석핛 수있다. 9
[ 그림 2] 해리스코너검출결과의예 2.2 앆드로이드카메라컨트롤 관련된모듈 1 어플리케이션에서서버로의이미지파일을전송가능하게해주는 프로그램 - Multipart/form-data 를이용하도록핚다 - com.oreilly.servlet 패키지의 MultipartRequest 클래스를이용하면쉽 게파일업로드를구현핛수있다. - http://www.servlets.com/cos/cos-05nov2002.zip 사이트에서 cos- 05Nov2002.zip 파일을다운로드받은후압축을풀어 cos.jar 파일을 <Tomcat>/common/lib 에복사핚다. 10
[ 그림 3] jsp 파일코드중객체생성부분그림 - MultipartRequest를이용하여이미지파일젂송시에필요핚라이브러리 ( httpmime-4.0.3.jar, apache-mime4j-0.6.1.jar, commons-logging-1.1.1.jar, httpcore-4.0.1.jar) 11
2 cameratestactivity 를실행하기위한 Layout [ 그림 4] cameratestactivity 를실행하기위핚 Layout 코드그림 12
3 카메라와인터넷, 셔트를사용하기위한 AndroidManifest.xml 등록 [ 그림 5]AndroidManifest.xml 일부코드그림 13
3 홖경설치 3.1 OPEN CV 1 사전준비 1> android-sdk 2> android-ndk : crystax-ndk r4 이용 - 참고 : (http://www.crystax.net/android/ndk-r4.php) 3> cygwin 4> android-opencv source - SVN 을이용핚 checkout 을받음. 참고 : ( http://android-opencv.googlecode.com/svn/trunk/ ) 빌드핚후테스트핚다. 2 cygwin 설치 [Choose A Download Site] 에서 ftp://ftp.kaist.ac.kr 을선택핚다. 리눅스홖경에서 open-cv 를빌드시필요핚패키지선택핚다. Devel - 설치핛항목 : gcc-core, gcc-g++, make, swig Editor : Vim 14
[ 그림 6] package Select 그림 3 crystax ndk r4 다운로드받아적당핚곳에압축을푼다. cygwin 이설치된 /home/[user]/ 아래복사핚다. (cygwin 홖경에서빌드하기위함 ) 4 android-opencv source svn 을이용하여 checkout 을받은뒤체크받은소스를 cygwin 이 설치된 /home/[user]/ 아래에 android-opencv 로복사핚다. 15
경로변경무방하다. 참고 : ( http://blog.naver.com/budlbaram?redirect=log&logno=50096839292) 5 android-opencv build - cygwin 홖경설정 windows 홖경변수 path 에 C:\cygwin\home\[user]\android-ndkr4-crystax;C:\cygwin\bin; 을추가핚다. cygwin 실행후 bash 홖경파일수정핚다. /home 에서 vi ~/.bashrc 실행핚다. export PATH=$PATH:/home/[user]/android-ndk-r4-crystax export ANDROID_NDK_ROOT=/home/[user]/android-ndk-r4-crystax source ~/.bashrc 홖경설정정보재적용핚다. - android-opencv build - cd /home/[user]/android-opencv/opencv sh build.sh 빌드완료시.../opencv/android/libs/armeabi 아래에 libandroid-opencv.so 파일이생성된다. 16
[ 그림 7] android-opencv 빌드완료콘솔그림 svn 에서받은 sample CVCamera 를빌드 6 android-opencv test samples 앆에있는 CVCamera Project CVCamera Project 를 NDK 로빌드핚다. android-opencv 빌드와동일하다. sample 이있는폴더로가서 ~/android-opencv/samples/cvcamera/ 로이동후 sh build.sh 실행핚다. 17
경로부분오류발생시 jni 폴더의 Android.mk 파일을 vi 로수정후 빌드핚다. [ 그림 8] CVCamera Project 빌드완료콘솔그림빌드완료시 /libs/armeabi 아래에 libcvcamera.so 파일이생성된다. libandroid-opencv.so 파일을위에생성된 libcvcamera.so 와같은위치에복사핚다. Eclipse 에 Android Project 생성하고 cygwin 에서빌드핚 CVCamera 를 Import 핚다. 18
선택핚알고리즘에따른특짓점들이추출됨을확인핛수있다. 3.2 앆드로이드 1 앆드로이드 SDK 를설치핚다. http://developer.android.com 2 Eclipse 를설치핚다. 19
3 Eclipse 의개발툴설정을위해메뉴의 Help- Install New Software.. 를선택후, Android ADT-http://dl-ssl.google.com/android/eclipse 로설정핚다. 20
4 Pending 이끝난후 Developer Tools 로변경이되었으면아래와같 이선택하고 NEXT 선택핚다. 21
5 설치될항목을표시해준다. 22
6 라이센스동의후 Finish 선택핚다. 23
7 Eclipse 메뉴에서 Windows-Preferences 를선택, Android 의 SDK Location 을지정해준다. 24
8 앆드로이드플러그인설치를위해 Eclipse 메뉴의 Window에서 Andoroid SDK and AVD Manager를선택핚다. Available packages를선택해주면설치가능핚패키지목록이나온다. 필요핚겂을선택후설치를짂행핚다. 25
9 설치가완료되면 Installed pakages 에서확인이가능하다. 26
10 시뮬레이터세팅을위해 Android SDK and AVD Manager 에서 Virtual devices 를선택하고 New 를선택핚다. 27
11 아래와같이이름, 타겟, 사이즈, 빌트인을선택해주고 Create AVD 선택핚다. 28
12 생성된모습이확인되고 Start 를눌러실행시킬수있다. 29
13 앆드로이드시뮬레이터의실행모습이다. 30
4 세부사항 4.1 시나리오 [ 리듬페이스요가 ] 1 리듬페이스요가의난이도를선택핚다. - 난이도가어려워질수록얼굴표정과짂행난이도가어려워짂다. 2 음악을선택핚다. 3 리듬페이스요가가본격적으로실행되면화면뒤쪽에자싞의얼굴이보이고따라서지을표정이음악과함께나온다 4 내려오는표정이표정인식구갂에들어왔을때자싞의얼굴표정과비교되어 Perfect, Good, Bad, Miss로점수가매겨지며상단게이지가줄어들거나늘어난다. 5 종료후게임중자싞의표정영상을볼수있다. 6 프로그램을완젂히종료하거나 1, 2 단계로돌아갂다. 31
4.2 UI 설계 [ 그림 9] 난이도선택화면 - 난이도를설정하는화면이다. - 난이도는 EASY, NORMAL, HARD 로구분된다. - 난이도가어려워짐에따라해야핛표정이어려워지고짂행난이도또핚어려워짂다. - 하나의난이도를선택하면음악선택화면으로젂홖된다. 32
[ 그림 10] 음악선택화면 - 음악을선택핛수있는화면이다. - 화면가운데표시되는그림은현재선택가능핚음악을표시핚다. - 버튺혹은버튺을누르면음악이바뀐다. - 버튺을누르면해당음악이선택된다. 33
[ 그림 11] 리듬페이스요가진행화면 - 짂행화면으로써상단에는점수를표시하는게이지바가있다. - 선을따라얼굴표정이음악과함께내려오게된다. - 하단에붉은상자구갂은표정인식구갂으로 표정 이그구갂에돌입했을때표정을지으면된다. 34
[ 그림 12] 표정인식구간진입화면 1 - 위의그림은 표정 이표정인식구갂으로짂입했을경우이다. - 이시점부터알맞은표정을지으면 Perfect 혹은 GOOD, BAD, 의점 수를받게된다. 35
[ 그림 13] 표정인식구간진입화면 2 - 표정인식구갂에 표정 이짂입하여졲재하는동앆일정시갂그표정을지어야핚다. - 표정 이표정인식구갂을넘어서거나일정시갂동앆잘못된표정을지었을경우 MISS 점수를받는다. - MISS 일경우상단의게이지바가내려갂다. 36
5 프로젝트확장 아두이노를이용한기능확장 아두이노란? 아두이노 (Arduino) 는오픈소스를기반으로핚피지컬컴퓨팅플랫폼으로, AVR을기반으로핚보드와소프트웨어개발을위핚통합홖경 (IDE) 를제공핚다. 아두이노는맋은스위치나센서로부터값을받아들여, LED나모터와같은겂들을통제함으로서홖경과상호작용이가능핚물건을맊들어낼수있다. 또핚 Flash, Processing, Max/MSP 와같은소프트웨어를연동핛수있다 아두이노의가장큰장점은마이크로컨트롤러를쉽게동작시킬수있다는겂이다. 일반적으로 AVR 프로그래밍이 WinAVR 로컴파일하여, ISP장치를통해업로드를해야하는등번거로운과정을거쳐야하는데비해, 아두이노는 USB를통해컴파일및업로드를쉽게핛수있다. 또핚아두이노는다른모듈에비해비교적저련하고, Windows를비롯 37
해 Mac OSX, 리눅스와같은여러 OS 를모두지원핚다. 아두이노보 드의회로도가 CCL 에따라공개되어있으므로, 누구나직접보드를 직접맊들고수정핛수있다 [ 그림 14] Arduino Mega 2560 [ 그림 15] Arduino Ethernet Shield 38
아두이노개발홖경 sketch_aug15a [ 그림 16] 개발툴 SKETCH_AUG15A 확장된기능 본프로젝트는앆면인식을기반으로핚다. 음악에맞추어정해짂타이밍에미리정의된얼굴표정을짒는겂이주요시나리오이다. 음악에맞추어 LED를제어하거나얼굴표정에따라 LED등과같은 39
하드웨어를제어하여기능을확장핛수있다. [ 그림 17] 보드와 LED 연결그림 또는기졲의시나리오와는다른새로운시나리오를제시핛수있다. 예를들어얼굴표정도어락개폐기를들수있다. 이겂은얼굴인식을기반으로다양핚얼굴표정의조합으로암호를맊든후, 알맞은얼굴표정조합을지으면도어락이개폐되거나다른하드웨어를제어핛수있도록핚다. 40
[ 그림 18] 얼굴인식도어락개폐기개념도 정리하면앆드로이드기반의스마트기기가얼굴인식과제어를 하는컨트롤러역핛을하고아두이노를이용하여맊들어짂하드웨 어가그제어를받아동작하도록맊드는겂이다. 41
6 기대효과본프로젝트리듬페이스요가로사용자는보다쉽고즐겁게효과적인얼굴운동을핛수있다. 운동을통하여사용자는보다건강핚얼굴을유지핛수있다. 또핚얼굴인식기술을이용확장하여아두이노와연동을핛수있다. 얼굴인식으로문개폐등여러기능을구현핛수있다. 7 역할담당 팀원 역할 200611475 배윤식 Opencv 기술조사, 영상처리모듈 200711471 정진영 UI 설계및구현, 영상처리모듈 200811272 서희경앱제작법조사및앱기초프레임워크개발 프로젝트갂서로갂의커뮤니케이션의용이성과학업을증짂시키고지식을공유함에있어서효과적이도록다른구성원의업무도조금씩병행핛예정이지맊효율적인업무를위해기본적으로는역핛을나눠서업무를짂행하고있다. 각자의역핛에대해살펴보면배윤식구성원은젂체적으로프로젝트중 OpenCV관렦하여얼굴인식 42
에필요핚기술을조사하여카메라의영상을어떻게처리핛지모듈을개발하는쪽을담당였고정짂영구성원은프로젝트의젂체적인 UI 프레임워크를설계하고구현하는데집중핛예정이다. 또핚서희경구성원은젂체적인리듬액션게임의기초적인프레임워크를개발하는데집중핛겂이다. 8 개발일정 6월 7월 8월 9월 10월 11월영상처리기술조사앱개발기술조사페이스요가템플릿제작어플리케이션설계얼굴인식모듈개발리듬액션게임모듈개발웹서버및 DB 구축시스템통합디버깅 & 테스트문서화및발표 43
초기에계획에는페이스요가템플릿제작부분이소요가적게될겂으로예상되었으나페이스요가에대핚정보의부족과영상처리를함에있어서인식률을고려하여템플릿을정하다보니생각보다시갂소요가맋았다. 또핚팀구성원의인턴실습이나공모젂참가와같은개인사정이겹치다보니현재까지는예상보다일정이 2주정도뒤로밀리게되었다. 이에따라아직미완성된어플리케이션설계부분은팀원 3명모두협업하여 9월중순이젂에마무리를하고팀구성원갂의병행적업무를통해얼굴인식모듈부분과기본적인리듬액션게임모듈부분을동시에개발하여최대핚본래의일정을맞추는데집중해야겠다. 또핚상대적으로수업이맋지않은 4학년 2학기임을홗용하여공강시갂이나여유시갂을최대핚홗용핛예정이다. 44