Flash기반으로 웹캠을 통해 객체추적(Object Tracking)을 해야 할 일이 생겨, 자료수집한 내용을 정리해봤습니다.  얼굴인식은 '영상처리' 혹은 Computer Vision이라는 전문 분야가 있었고, 저는 이 분야에 관해 지식이 전무한 상태에서 자료수집을 한 내용입니다. 그래서 잘못된 정보가 있을 수 있으니 참고하시고 읽어주시길 바람니다. 잘못된 정보에 관한 지적은 언제든지 환영입니다.^^

* Object Tracking : 웹영상에서 특정 부분을 추적하는 행위. 예를들면 얼굴의 눈을 찾는다던지, 입을 찾는 행위.


1. 영상처리(Computer Vision)


영상처리를 하는 기술인 OpenCV는 가장 널리 쓰이고 있으며, 이를통해 QR코드, Bar코드, 얼굴인식(Face Recognition), 증강현실(AR, Augmented Reality) 등의 기반이 되는 기술입니다.   OpenCV는 C로 만들어져있으며 Windows, Linux, Max, Android, iOS를 지원합니다.  

* OpenCV : http://opencv.org/


2. 용어정리


자료수집을 하면서 용어의 의미를 몰라 어려움이 많았습니다. 영상처리분에서 기본적인 용어정리를 해봤습니다. 이 분야 종사자가 아니라도 기본 교양으로 알고계시면 좋을 듯 합니다.


* 공개소스 컴퓨터 비전 (Open Source Computer Vision) : 인텔사의 실시간 컴퓨터 영상 프로그램 라이브러리. 공개 소스 컴퓨터 비전(Open CV) 코드는 객체ㆍ얼굴ㆍ행동 인식, 독순(讀脣:입술 읽기), 모션 추적 등의 응용 프로그램에서 사용된다. 컴퓨터가 인간처럼 입체적으로 볼 수 있도록 만들 수 있는 소프트웨어로 많은 이미지 기능을 포함한 도구 박스가 행동 인식, 사물 추적, 얼굴 인식 등을 포함하는 컴퓨터 비전 응용 프로그램 개발을 지원한다.

[출처] http://terms.naver.com/entry.nhn?docId=863371&cid=2636&categoryId=2636


OpenCV(Open Computer Vision) : OpenCV(Open Computer Vision)은 오픈 소스 컴퓨터 비전 C 라이브러리이다. 원래는 인텔이 개발하였다. 윈도, 리눅스 등의 여러 플랫폼에서 사용할 수 있다. 실시간 이미지 프로세싱에 중점을 둔 라이브러리이다. 인텔 CPU에서 사용되는 경우 속도의 향상을 볼 수 있는 Intel Performance Primitives (IPP)를 지원한다.

[출처] http://ko.wikipedia.org/wiki/OpenCV



안면 인식 시스템(facial recognition system) : 안면 인식 시스템(facial recognition system)은 디지털 이미지를 통해 각 사람을 자동으로 식별하는 컴퓨터 지원 응용 프로그램을 말한다. 이는 살아 있는 이미지에 나타나는 선택된 얼굴 특징과 안면 데이터베이스를 서로 비교함으로써 이루어진다.

이는 일반적으로 보안 시스템으로 사용되며 지문이나 동공 인식 시스템과 같은 다른 생체 인식(biometrics)과 비교될 수 있다.

[출처] http://ko.wikipedia.org/wiki/%EC%95%88%EB%A9%B4_%EC%9D%B8%EC%8B%9D



* 화자 인식(Speaker Recognition) : 화자 인식(Speaker Recognition)은 입력 받은 음성 데이터를 미리 저장된 데이터베이스와 비교하여 화자가 누군인지 식별하는 기술을 말한다. 음성 인식 분야의 가장 어려운 분야 중 하나이며, 이론상으로는 완벽한 식별은 불가능하다고 알려져 있다. 음성 인식 보안 솔루션에 많이 가장 많이 응용되고 있다.

[출처] http://ko.wikipedia.org/wiki/%ED%99%94%EC%9E%90_%EC%9D%B8%EC%8B%9D



FERET(Facial Recognition Technology) : FERET 데이터베이스는 안면 인식 시스템 평가의 사실상 표준이다. 안면 인식 기술(FERET) 프로그램은 미국 방위고등연구계획국(DARPA)과 국립표준기술연구소(NIST)가 관리하고 있다. 안면상의 데이터베이스는 1993년 12월부터 1996년 8월 사이에 수집되었다. 2003년 DARPA에서 이들 안면상의 고해상도, 24비트 컬러 버전을 내놓았다. 시험된 데이터세트는 856명의 개인을 대표하는 2,413의 정지 안면상을 포함한다.

FERET 프로그램은 조지 메이슨 대학교의 알고리즘 개발자 해리 웩슬러 박사가 이 데이터베이스의 수집을 감독하도록 선택된 것과 별개로 수집되는 대량의 안면상 데이터베이스를 수립하기 시작했다. 데이터베이스 수집은 웩슬러 박사와 필립스 박사의 공동 노력이었다.

--> 얼굴 인식률 테스트 할 때 사용.

[출처] http://ko.wikipedia.org/wiki/FERET_%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4


AAM (Active Appearance Model)

Shape 정보와 Texture 정보를 이용하여 통계적인 방법으로 학습하여 얼굴의 윤곽을 찾는 방법.

AAM 방법은 Active Shape Model (ASM) 방식을 개선한 방법으로 AAM(Active Appearance Model)은 기존 ASM의 물체의 형태 정보와 물체의 텍스쳐 정보를 이용하여 이미지내의 물체를 찾는 방법이다. 이 방법은 물체의 형태 정보와 텍스쳐 정보를 이용하여 물체의 형태를 유지하면서 학습된 텍스쳐 정보를 기반으로 가장 유사한 텍스쳐를 가지는 부분을 검색하여 보다 정확하게 물체의 형태 및 위치를 찾을 수 있도록 한다. 하지만 이미지내의 텍스쳐 정보는 방대하여 찾고자 하는 물체의 이미지 크기에 따라 연산속도에 영향을 미치게 된다.

[출처] http://blog.naver.com/kpetera?Redirect=Log&logNo=70145198734




3. 객체추적(Object Tracking)


웹캠 영상의 얼굴에서 실시간으로 눈을 추적하는 방법은 어떻게 구현이 될까요?  대략적인 방법은 눈 위치에 대한 Data를 xml파일에 저장시켜 놓습니다. 그리고 이 Data를 기반으로 실시간 영상을 분석해서 눈을 추적합니다.  이는 수학적 알고리즘이 기반이 되고, 여러가지 방법들이 있고, 많은 논문들이 나와있습니다.  


* 얼굴 화상 검색 시스템 및 얼굴 화상 검색 방법 : http://cctvnews.co.kr/atl/view.asp?a_id=2004

* 얼굴인식 - 특징점 추출 : http://bluelimn.tistory.com/entry/%EC%96%BC%EA%B5%B4%EC%9D%B8%EC%8B%9D-%ED%8A%B9%EC%A7%95%EC%A0%90-%EC%B6%94%EC%B6%9C

* Motion detection 알고리즘 : http://blog.naver.com/PostView.nhn?blogId=mhk807&logNo=150027154743&redirect=Dlog&widgetTypeCall=true

* 홍채인식기술 : http://www.yhj.pe.kr/iris/what_is_iris_recognition.htm

* 유료 솔루션 : http://www.luxand.com/facesdk/

* OpenCV Haar/cascade training 튜토리얼 : http://darkpgmr.tistory.com/70

* ★얼굴인식 라이브러리 링크 모음 : http://blog.mashape.com/post/53379410412/list-of-50-face-detection-recognition-apis


4. Java에서 OpenCV


OpenCV를 Java에서 사용하기 위한 라이브러리입니다. 하지만 퍼포먼스 문제로 많이 쓰이지 않고 있습니다.

https://code.google.com/p/javacv/

* JavaCV설치 : 




5. Flash에서 영상처리 

 Flash에서의 영상처리는 어떻게 할까요? 기본적으로 영상Data를 Bitmap으로 받아와서, 이 Data를 기반으로 영상처리를 합니다. 아직 소스분석을 해보지 않아 어떠한 원리로 동작되는지는 파악이 안되고, 수집한 예제를 남깁니다.  


* 참고1 : http://www.adobe.com/mena_fr/devnet/flash/articles/webcam_motion.html

* 참고2 : http://www.brianhadaway.com/getting-started-with-flash-webcam-motion-tracking/

* 참고3 : https://github.com/chinchang/AS3-Motion-Tracker

* 손으로 그림페이지 넘기는 예제 : http://www.position-relative.net/creation/gesture/

* 손 추적하는 예제 : http://nocreativity.com/blog/webcam-motion-detection-coolness

* AIR OpenCV Extension : https://github.com/wouterverweirder/AIR-OpenCV-Extension


위의 예제들은 BitmapDataAPI만으로 구현된 예제들이라 입맛대로의 영상처리는 외부 프레임워크를 쓰지 않는 이상 구현에 어려움이 많을 것으로 판단하여 Flash플랫폼에 돌아가는 프레임워크를 찾아보니 Marilena라는 오픈소스 프로젝트가 있었습니다.


6. Marilena


Ohtsuka Masakazu 라는 일본 개발자가 OpenCV를 Actionscript에서 이용하기 위해 만든 것.  Spark Project 의 code네임 Marilena라고 불림.


* Marilena Source Code : https://code.google.com/p/face-recognition-library-as3/downloads/list

* AS3 libraries for face detection 링크모음 : http://www.flexflashforum.com/viewtopic.php?f=5&t=1085

* 예제1 : http://blog.inspirit.ru/?p=416  

* 예제2 : http://www.quasimondo.com/archives/000687.php 

* 예제3 : http://www.francois-tarlier.com/blog/tag/marilena/


 









* 필독서 : http://book.naver.com/bookdb/book_detail.nhn?bid=6702518

* 대표 커뮤니티 : http://cafe.naver.com/opencv 

* deface(Actionscript 3 visual object detection/tracking) : https://code.google.com/p/deface/

* Computer Vision 동영상 강의(영문) : http://videolectures.net/Top/Computer_Science/Computer_Vision/

* FACE RECOGNITION HOMEPAGE : http://www.face-rec.org/




 

 

AND