Mosaicer
: 얼굴 자동인식 모자이크 처리 시스템
시스템 목적 및 소개
기술의 발전과 더불어 많은 CCTV 를 거리뿐만 아니라 실내, 심지어 가정집 안까지 설치하는
경우가 증가하고 있다. 또한 현재 대부분의 자동차에는 블랙박스가 설치된다. 이로 인해 사생활
침해 문제가 심각하게 드러나고 있다. 예를 들어, 범죄 현장에 증거 영상으로 사용하기 위해 경찰
혹은 검찰에서 영상을 가져가는 경우가 있다. 이때 범죄자가 아닌 다른 사람들이 영상에 함께
나와 그들이 무슨 일을 하는지 드러나게 된다. 블랙박스 혹은 CCTV 영상뿐만 아니라 방송으로
나오는 자료 영상 혹은 인터뷰 영상에서도 사생활 침해 문제를 볼 수 있다. 실례로 뉴스에서
사용한 영상에 지나가는 행인이 찍혀 방송사가 고소를 당한 경우가 있다. 또한 우리나라는 보통
범죄자의 얼굴을 모자이크 처리를 하고 형사나 기자들의 얼굴은 모자이크 처리를 하지 않는다.
이로 인해 보복 범죄가 일어나는 경우가 있다.
이러한 문제들을 해결하기 위해 주요인물을 제외한 모든 사람들의 얼굴을 모자이크 처리를
해야 하는 과정이 필요하다. 지금까지는 사람이 모자이크 처리할 부분에 대해 지정하면 선택된
영역에 대해 모자이크 처리를 한다. 따라서 현실적으로 모든 영상에 대해 모자이크 작업을 하는
것은 불가능하다. 이를 대체하고자 영상에 나온 당사자에게 영상의 사용 허가를 받아 사용을
한다.
이와 같은 과정을 줄이기 위해 본 프로젝트는 얼굴인식을 통한 자동 모자이크 처리 시스템을
제안한다. 경찰이나 검찰에서 증거용 영상을 가져가기 전 혹은 인터뷰 영상으로 촬영된 영상을
활용하기 전 얼굴을 모자이크 처리를 하면 안 되는 사람에 대한 얼굴 사진을 DB 에 넣는다. 이
DB 를 바탕으로 컴퓨터는 학습을 진행한다. 학습이 끝나면 사용자는 영상을 본 시스템에
입력한다. 입력된 영상에 원하는 사람을 제외한 나머지 사람들의 얼굴에 대해 모자이크 처리를
한다. 따라서 사용자가 원하는 사람의 얼굴 사진 DB 만 갖고 있다면 모자이크 처리가 자동으로
된 영상을 얻을 수 있다.
본 시스템은 블랙박스, CCTV 회사에서 응용하여 자동적으로 모자이크 처리를 해주는 것으로
사용 가능하다. 또한 방송사에서도 인터뷰 영상 혹은 자료 영상으로 사용할 때 자동적으로
시스템을 거치도록 설계하여 사용할 수 있다. 또한 DB 에 범죄자의 사진을 넣어서 학습시킨 후
인터뷰 영상 혹은 자료 화면에서 사용한다면 자동적으로 범죄자의 얼굴은 가리지 않고 주변의
형사나 기자들의 얼굴을 가리는 영상을 얻어내어 방송할 수 있다. 로드뷰 서비스를 제공하는
업체에서도 사람의 얼굴을 자동으로 모자이크 처리를 해줌으로써 활용할 수 있을 것이다.
2.
제안된 알고리즘
본 시스템은크게 Tensorflow 라이브러리를 통해 얼굴을 분류하는 딥러닝 모듈과 동영상을
OpenCV 라이브러리를 통해 처리하는 동영상 처리 모듈로 구성되어있다. 딥러닝 모듈은 모자이크
처리하고자 하는 사람의 얼굴 사진을 학습하고 새로 입력되는 얼굴 사진에 대해 classification 을
한다. 동영상 처리 모듈은 OpenCV 라이브러리를 통해 동영상을 입력 받아 얼굴영역을 추출하고
모자이크 처리를 담당한다.
1) Training
딥러닝 모듈을 이용하여 training 을 진행한다. 모든 과정에서 영상, 음성 분야에 좋은
성능을 보이는 Tensorflow 의 CNN 알고리즘을 사용한다. 먼저 학습단계에서 모자이크
처리를 원하지 않는 얼굴과 기타 다른 사람들의 얼굴로 라벨을 나누어 모델링을 한다. 이때
모자이크 처리를 원하지 않는 얼굴의 라벨을 target 이라 한다.
2) Test
먼저 사용자로부터 동영상을 입력 받는다. 동영상 처리 모듈에 입력 받은 동영상의 각
프레임에서 Face Detection 을 진행하여 프레임에서 얼굴인 부분을 추출하고 미리 지정된
위치에 사진으로 저장한다. 추출된 얼굴 사진은 딥러닝 모듈의 입력 값으로 사용된다.
딥러닝 모듈은 저장된 사진을 불러와 classification 을 진행한다. Classification 이 종료되면
입력 받은 얼굴이 기존의 training 해놓은 모델에서 각각의 라벨에 속할 확률을 반환한다.
Target 라벨과의 일치율이 미리 정해놓은 Threshold 를 초과할 경우 동영상 모듈은
모자이크를 처리를 하지 않고 다음 얼굴 부분으로 넘어간다. 반면 Threshold 를 초과하지
않을 경우 해당 얼굴 부분에 대해 모자이크 처리를 한다. 모든 프레임, 모든 추출된 얼굴
부분에 대해 처리를 마치면 해당 동영상을 반환하여 저장한다.
3.
적용된 주요 기술
1)Tensorflow
머신러닝을 위해 구글에서 만든 오픈소스 라이브러리로 기본적으로 CNN알고리즘을 이용
하고 있다. CNN의 주요 목적은 테두리(edge), 선(line), 색깔 등 이미지의 시각적 특징이나
성질을 감지하는 것이다. Random forest
나 다른 supervised 알고리즘들과는 달
리 CNN은 사용자가 직접 feature를 추
출하지 않기 때문에 좀 더 의미 있는
feature 추출이 가능해진다. 따라서 사
진을 이용한 물체 혹은 다양한 인식에
탁월한 성능을 보이고 있다. 왼쪽 사진
은 CNN 알고리즘의 계략적인 과정을
보이고 있다.
2) Haarcascade
OpenCV에서 사용하는 Face Detection 함수인 Haarcascade는 다음과 같은 4가지의 과정
으로 구성되어있다.
① Haar-like feature
사람의 얼굴에는 특정한 패턴이 있다. 왼쪽 그림
과 같이 일정 부분은 밝고 일정 부분은 어둡다. 이
러한 모양이 모든 얼굴에서 발견된다. 이와 같은 패
턴을 미리 학습하여 정해진 모델을 OpenCV는 xml
파일에 미리 저장해두고 있다. 개발자는 해당 xml파
일을 불러와 자신이 갖고 있는 사진의 패턴과 비교
하여 해당 사진에 얼굴이 있는지 없는지를 판단한다.
② Integral Image
위의 ①의 계산을 좀 더 쉽게 하기 위한 방법이다. 매 순간 동일한 패턴인지 판단하기
위한 계산을 하려면 많은 시간이 소요 된다. 따라서 이미지 전체에 대해 미리 기본 연산
을 해놓고 그때 그때 필요한 부분에 대해 간단한 연산으로 값을 얻어내는 방식이다.
③ Adaboost
엉뚱한 곳을 얼굴이라고 인식하는 문제를 해결하기 위해 사람의 얼굴에 대한 여러 가
지 패턴을 만들어 여러번 classify를 한다. 가중치를 이용하여 좀 더 나은 결과물을 만들
어낸다.
④ Cascade classifier
위의 여러 가지 결과를 두고 그 모든 결과들이 만장일치로 통과하지 않는다면 부결하
는 방식이다.
[출처] http://msnayana.blog.me/220659604108
출처]http://blog.naver.com/ocllos/194366766
4.
시스템 적용 예시
-Mosaicer Cloud (https://github.com/seongahjo/Mosaicer/tree/master/node)
본 시스템은 모든 기능을 REST API로 제공하여 타 개발자들이 쉽게 사용할 수 있도록 만든
웹 모듈을 포함하고 있다. Mosaicer Cloud는 웹 모듈을 이용하여 만들어진 머신러닝 클라우
드 서비스이다. Tensorflow에 대해 잘 모르는 일반 사용자도 손쉽게 머신러닝을 사용할 수
있도록 만들어진 서비스이다. 아래의 사진과 같이 간단한 인터페이스로 사용자는 학습시킬
사진들을 업로드하고 업로드된 사진을
바탕으로 모델을 생성할 수 있다. 또한
학습된 모델을 바탕으로 사진을 입력받
아 classification이 가능하다. 뿐만 아니
라 모자이크 모듈을 추가로 적용하여
동영상을 입력하면 모자이크 처리할 수
있는 기능을 제공한다.
이 서비스를 사용하면 단 두 번의 버튼
클릭을 통해 딥러닝 이미지 학습, 분류
를 할 수 있다.
위와 같이 본 시스템 적용이 가능하며 간단히 REST API 호출을 통해 다양한 분야에 적용 가능하
다.
이후 개선할 사항
현재 본 시스템은 OpenCV의 Face Detection 함수에 종속적이다. 따라서 만약 OpenCV의 함수
가 얼굴을 찾아내지 못한다면 해당 시스템은 동작하지 못한다. 실제 데모 영상에서도 볼 수 있듯
이 얼굴이 측면으로 나오거나 눈을 완전히 감는 상황에서 얼굴로 인식하지 못해 모자이크 처리가
되지 않는 것을 확인할 수 있다. 혹은 얼굴이 아님에도 얼굴로 인식되어 모자이크 처리가 되는
부분을 확인할 수 있다. 따라서 이러한 부분을 개선하고자 OpenCV의 함수 보다 나은 알고리즘을
이용하여 수정하는 작업이 필요하다.
현 알고리즘은 동영상의 매 프레임마다 얼굴을 찾고 딥러닝 모듈을 이용하여 target이 맞는지
확인한 후 모자이크 처리를 하는 과정을 거치고 있다. 이 모든 과정이 매우 오래 걸리기 때문에
시스템이 종료되는데 매우 오래 걸린다. 따라서 이러한 단점을 보안하고자 매 프레임을 처리하지
않고 3 프레임당 처리하는 방식으로 알고리즘을 수정하는 부분이 필요하다.