블로그 이미지
Kanais
Researcher & Developer 퍼즐을 완성하려면 퍼즐 조각들을 하나 둘씩 맞춰나가야 한다. 인생의 퍼즐 조각들을 하나 둘씩 맞춰나가다 보면 인생이란 퍼즐도 완성되는 날이 오려나...?

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

04-29 00:14

Recent Post

Recent Comment

Recent Trackback

Archive

2015. 4. 17. 15:17 Computer Vision/Face Detection


출처 : IT정보기술

Face Detection 기술 소개
얼굴 검출은 사진과 같은 정지 영상에서 사람의 얼굴 부분의 이미지가 있는지 판단하여 그 부분을 검출해내기 위한 기술이다. 사람의 신원을 파악하거나 얼굴을 보고 사람의 심리 상태를 파악하는 등의 고차원 적인 응용을 구현하기 위해서는 우선적으로 제공된 이미지에서 정확하게 사람의 얼굴 부분을 파악하는 것이 필요할 것이다. 그러므로, 모든 얼굴 인식 처리 기술의 가장 기본이 되는 얼굴 검출 기술은 그 중요성이 매우 크다고 하겠다.


Knowledge-Based Top-Down
지식 기반 (Knowledge-Based) 얼굴 검출 방법은 연구/개발자의 지식에 근거한 규칙에 따라 얼굴 검출 알고리즘을 개발하는 방법이다. 대상 이미지에서 얼굴 후보 이미지는 미리 작성된 규칙에 따라 검출된다.
이 러한 방식의 문제점은 연구/개발자의 지식을 잘 정의된 규칙으로 표현하기가 만만치 않다는 것이다. 만일, 규칙이 너무 세밀하면 얼굴 이미지 부분이 약간의 오차에도 잘 검출이 안되는 문제가 발생할 수 있을 것이고 반대로 규칙이 광범위하면 엉뚱한 이미지를 얼굴로 검출하는 경우도 생길 수 있다.

대표적인 연구 결과로서는 Yang과 Huang이 제안한 계층적 지식 기반의 얼굴 검출 방법이 있다. 이 방법은 3단계의 규칙에 의해 처리된다. Level1에서는 원본 이미지를 해상도를 낮춘 후 사람 얼굴의 명암도 특성을 이용하여 얼굴 이미지 후보군을 찾는다. 이렇게 찾아진 얼굴 이미지 후보 부분을 Level2에서 히스토그램 평활화를 수행한 후 윤곽선 검출을 수행한다. Level3에서는 Level2에서 추려진 얼굴 후보 이미지들의 특징점(눈, 코, 입)들을 파악하여 최종적으로 얼굴을 검출하게 된다.

이러한 지식 기반의 얼굴 검출 방법은 복잡한 배경을 가진 이미지, 여러 명의 사람 얼굴 검출 등에서는 오류가 높은 문제점이 있다.


Bottom-Up Feature-Based
상향식 특징 기반의 얼굴 검출 방법은 얼굴에서 변하지 않는 특징들을 찾아 이를 이용하여 얼굴을 검출한다. 이미지에 위치한 얼굴을 보면 각도라던가 주위 배경 등 여러 속성들이 변한다. 이러한 변화에도 불구하고 언제나 일정한 특징을 찾을 수 있다면 얼굴 검출 성공률을 높일 수 있을 것이다.
특징 기반의 얼굴 검출은 몇 가지 대표적인 연구 방향이 있다. 얼굴의 눈, 코, 입과 같은 특징을 이용한 검출, 얼굴이 가진 특정 질감을 이용한 검출, 얼굴의 색상을 이용한 검출 등 다양한 방법이 있다.

이 방식은 얼굴 부위의 잡음, 밝기 혹은 다른 사물에 의해 가려지는 등의 경우에 이미지 특징들을 찾는 알고리즘이 심각한 수준으로 영향을 받을 수 있다는 것이다.


Template Matching
템플리트 매팅 기반의 얼굴 검출 방법은 특정 함수에 의해 계산된 얼굴에 대한 표준 패턴 정보를 이용하여 입력된 얼굴 이미지와의 상관 정도를 측정하여 검출을 시도하는 방식이다. 이 방식은 상대적으로 구현하기가 쉽다는 장점이 있으나 얼굴 이미지의 크기, 모양, 포즈 등의 다양한 변경 사항에 대해 효율적으로 처리하지 못한 문제점이 있다.


Appearance-Based
외형 기반 얼굴 검출 방법은 여러 얼굴 이미지와 다른 이미지들에서 학습한 얼굴 이미지의 특징을 이용하여 통계적인 분석을 통해 얼굴을 검출하는 방법이다. 입력 이미지에서 얼굴을 검출하기 위해 전체 이미지를 스캔하면서 확률 함수를 이용하여 얼굴 부분과 얼굴이 아닌 부분을 파악한다. 잘 알려진 얼굴 검출 방법으로 Eigenfaces, LDA, Neural networks, support vector machine, hidden Markov 방법등이 있다.

이 중 Eigenfaces는 사람의 얼굴을 검출하기 위하여 사용되는 Eigenvecros의 집합이다. PCA (principal component analysis)라고 하는 수학적인 절차를 여러 사람의 얼굴 이미지에 적용하여 Eigenvectors의 집합을 얻을 수 있다. 이처럼 얻어진 Eigenfaces는 일종의 사람 얼굴에 대한 재료라고 볼 수 있다. 예를 들어, A라고 하는 사람의 얼굴을 표현하기 위해서 Eignefaces에 있는 데이터 1의 60%, 데이터 2의 20%, 데이터 3의 -3% 등으로 표현하여 거의 A의 얼굴과 유사한 근사치를 얻을 수 있다.


Face Detection의 활용 사례
실 생활에서 face detection 기술이 활용되고 있는 사례를 통해 이 기술의 가치에 대해 생각해보자.


Digital Camera
요즘 판매되고 있는 대부분의 디지털 카메라에는 촬영 중 얼굴 검출 기능이 포함되어 있다. 촬영 되는 대상 화면에서 얼굴이 있는지 계속 실시간 scan하여 얼굴 부분에 초점을 맞추어 촬영한 이미지에서 피사체인 사람의 얼굴이 더 잘 나오도록 해주는 기능이다.

Fujifilm 의 프로젝트 메니저인 David Troy에 따르면 디지털 카메라로 촬영하는 피사체의 70%가 인물 사진이라고 한다. 그만큼 인물 사진의 질이 중요하다는 것이다. 또한, 얼굴 검출 기능은 자동 포커스 뿐만 아니라 추후 더 발전될 수 있는 응용 분야가 많다. 예를 들어, 사진을 촬영 후 자동으로 LCD에 인물 얼굴 부분을 확대하여 보여주어 피사체인 인물이 눈을 감고 찍히지는 않았는지를 확인할 수도 있을 것이다.

소니코리아에서 나온 디지털 카메라의 경우 사람의 웃는 얼굴을 자동으로 인식 할 수 있으며 스마일 셔터 버튼을 누르면 자동으로 웃는 얼굴을 촬영할 수 있습니다. 작은 웃음 잡아내는 '높음' 수준에 함박웃음 지을 때 찍히는 '낮음' 수준까지 웃음 인식 감도를 별도로 설정할 수 있어 상황에 따라 적절하게 조정할 수 있으며, 단체사진 촬영때도 한 명만 웃으면 자동으로 사진이 촬영되는 기능을 추가하고 있다.


Apple iPhoto 어플리케이션

Apple의 Mac OS X에 기본적으로 탑재되어 있는 iPhoto 어플리케이션은 디지털 카메라로 촬영한 사진을 다운로드하여 손쉽게 관리할 수 있도록 해준다. 특히, 이 프로그램이 제공하는 기능 중 사진 속의 인물을 찾아내서 그룹핑하고 검색할 수 있도록 해주는 기능은 정말로 탁월하다.

일단, 디지털 카메라 사진을 iPhoto로 다운로드 받은 사진 화면에서 "이름"이라는 메뉴를 선택하면 사진 속의 얼굴을 자동으로 검출하여 사용자에게 인물의 이름을 입력할 수 있도록 한다.
iPhoto 프로그램은 인물 검출에서 더 나아가 일단 이름을 입력한 인물에 대해서는 추후 다른 사진에서 검출되면 face recognition을 수행하여 유사한 인물의 이름을 자동으로 적용하여 보여준다. 그러나, 이러한 자동 인식 기능은 에러율이 좀 높은 편이어서 꼭 사용자가 수동으로 한번 확인을 하는 과정을 거치도록 하여 사용상의 문제점을 해결하였다.

호주의 Smartgate
호주와 뉴질랜드에서 사용하는 스마트게이트는 입국 심사 시 입국자의 얼굴 사진을 촬영한 후 ePassport에 등록되어 있는 이미지와 비교하여 입국 절차를 단순화하고 동시에 보안을 강화하고자 도입된 시스템이다.
이 시스템에 의해 얼굴이 인식된 사람의 경우 별도의 세관 검사 등의 과정을 거치지 않고 빠른 입국 심사가 가능하며 만일 시스템에 의해 인식이 실패하는 경우 보안 및 세관 검사등을 사람이 직접 시행하도록 한다. 이 시스템을 사용하기 위해서는 ePassport가 필수적이므로 ePassport를 보유한 호주 시민이나 혹은 ICAO (International Civil Aviation Organization)이 지정한 ePassport 표준에 합당한 여권을 가진 국가의 시민들이 대상이다.

얼굴인식 시스템(VIP 고객관리)
증권사나 은행 그리고 백화점 매출기여도가 큰 VIP고객에 대한 좀 더 특별한 대우를 위하여 VIP룸과 전담팀을 구성하여 운영하고 있으며 이를 위한 방안으로 CCTV, DVR을 이용한 얼굴인식 VIP 고객관리 솔루션이다.
CCTV를 이용한 얼굴인식 Surveillance 시스템은 거리나 공공장소 등 곳곳에 설치된 CCTV 카메라를 이용하여 카메라에 포착되는 보행자들의 얼굴은 검출, 등록된 얼굴 데이터 DB와 비교하여 동일인을 검색하는 얼굴인식 시스템이며, 이 솔루션은 매장입구에 설치된 복수의 CCTV 카메라를 통해 10~15m 정도의 원거리에서 매장입구에서 들어오는 사람의 얼굴을 검출하여 등록된 VIP 고객 얼굴데이터 D/B와 비교, VIP 고객이 들어오면 내부 전산망을 통하여 담당자나 안내 데스트 또는 지점장의 PC에 알람메시지를 통하여 VIP 고객의 내방을 통지하여 담당자들이 VIP고객을 바로 VIP 룸으로 모시고 가는 등 차별화된 VIP 고객관리 프로세서의 기능을 가지고 있다.


Face Detection Software 개발 방법

이처럼 활용도가 높은 얼굴 검출 기능을 자신의 S/W 개발에 활용하려면 어떻게 해야 할까? 물론, 알고리즘을 모두 개발할 수 있다면 아주 좋겠지만 실상 이런 알고리즘을 모두 개발하기에는 시간적, 비용적인 문제가 있다. 또한, 자신이 개발한 소프트웨어 알고리즘의 성능 혹은 기능에 문제가 없는지 완전히 파악하기에도 문제가 있을 것이다.
이런 문제를 해결하기 위해서는 이미 공개되어 있고 검증된 S/W 솔루션을 활용하여 소프트웨어를 개발하는 것이 좋을 것이다. 이 글에서는 컴퓨터 비전 관련 소프트웨어를 개발하기 위해 널리 사용되고 있는 OpenCV를 이용한 face detection 구현에 대해 살펴보도록 하겠다.


OpenCV
OpenCV는 컴퓨터 비전 관련 처리를 위한 오픈 소스 라이브러리이다. 라이브러리 자체는 C와 C++로 작성되었으며 리눅스, 윈도우즈, Mac OS X 등에서 사용가능하다.
OpenCV 의 목적은 복잡한 컴퓨터 비전 관련 어플리케이션을 비교적 짧은 시간에 최소한의 노력으로 개발 가능하도록 하는 것이다. 이를 위해 컴퓨터 비전 기술과 관련된 500개 이상의 함수를 제공한다. 이 함수들이 제공하는 주요 기능은 다음과 같다.


•공장 생산품 검사 기능
•의학 이미지 처리
•보안
•사용자 인터페이스
•카메라 조정
•스트레오 비전
•로보틱스
•머신 러닝

위와 같은 다양한 기능들을 활용하여 S/W 개발자는 컴퓨터 비전 처리와 관련된 어느 정도의 지식을 가지고 실제 응용 프로그램을 개발 가능하다. 컴퓨터 비전과 관련된 자세한 알고리즘이나 연구 지식이 없어도 개발이 가능하므로 여러 개발자들이 다양한 응용 소프트웨어를 개발 가능하게 한다.

OpenCV를 이용한 얼굴 검출
OpenCV 가 제공하는 Harr classfire를 이용하여 얼굴 검출 프로그램을 개발 할 수 있다. OpenCV의 Harr classfier 관련 함수는 수백장 이상의 샘플 이미지에서 검출하려고 하는 대상 이미지를 미리 학습하여 생성된 classfire를 XML 데이터 파일로 가지고 있다가 로드한 후 검출 대상 이미지에 이 classfier를 적용하여 검출을 시도한다. 이 때 검출을 하려는 이미지의 크기가 변경될 수 있으므로 OpenCV의 검출 함수에서는 검출을 시도하는 scan window의 크기를 인자로 조정할 수 있도록 한다.
일단, 검출이 완료되면 검출 함수에서 반환 값으로 이미지 내에서 검출된 이미지들의 좌표 값의 배열을 반환해준다. 간단한 예제 코드를 살펴보도록 하자.

/* Load harr classfier for front face */
cascade_path = "haarcascade_frontalface_alt.xml"
CvHaarClassifierCascade* cascade =
(CvHaarClassifierCascade*)cvLoad( cascade_path );

/* use the fastest variant */
CvSeq* faces = cvHaarDetectObjects( small_image, cascade, storage, 1.2, 2,
CV_HAAR_DO_CANNY_PRUNING );


위 소스 코드는 OpenCV가 선행 학습으로 얻은 얼굴에 대한 Harr classfier를 로드한 후 이를 이용하여 대상 이미지에서 얼굴에 관련된 이미지의 좌표 값을 얻도록 호출한 것이다.

OpenCV의 Harr classfier를 활용하면 얼굴 뿐 만이 아니라 다른 대상물에 대해서도 학습을 통해 얻은 classfier를 적용하여 대상물의 검출이 가능하다.


posted by Kanais