CS/AI | CV

ID Photo Generator | 증명사진 생성기

damzzi 2021. 7. 26. 17:16

올해 1월에 아이디어가 떠올라 착수한 미니 프로젝트다
학부 수업을 듣고 배운 내용을 적용해 보고 싶었다

아래는 주차별 진행 사항을 정리한 내용이다



개발 목적과 필요성

  • 누구든 쉽고 빠르게 증명사진을 편집할 수 있다
  • 시중 프로그램 분석 결과 영상 사이즈 조절과 배열, 배경 제거 기능 모두를 수정하는 프로그램은 없었다

# 더 찾아보니까 미바이미 라는 사이트에서 제공되더라 ,,

  • 편집 프로그램 사용해 제작하는 것보다 작업 속도 향상되며 편집 프로그램에 익숙지 않은 사용자도 사용 가능하다




개발 과정
- 시중 프로그램 분석
- 프로젝트 아이디어 도출, 개발 계획 수립
- 프로토타입 생성
- 개발
- 결과물 시연
- 기능 수정 및 유지보수



주요 기능

  1. 상반신 영상 입력받기
  2. 상반신 탐지 후 그 외 배경 제거
  3. 증명사진 형식에 맞게 사이즈와 배열 조절



결과물 형태 및 활용 계획
-Python IDE에서 프로그램 실행 가능
-추후 웹앱, 모바일앱 형태로 활용 가능



첫째 주 진행 내용

  • 상반신 영상 입력받기

-PIL Image.open()
-추후 Tkinter 사용해 GUI 구성 예정

  • 상반신 탐지 후 그 외 배경 제거

상반신 탐지
-적합한 OpenCV xml 파일 존재 여부 확인
-> 상반신 탐지 : haarcascade_upperbody.xml


배경 제거
-객체를 포함하는 영상에서 객체가 없는 배경 영상 빼는 것



Cv2.grabcut()
-영상의 전경만 분리해내려면 원하는 전경 주위에 사각형 박스 그린 후 grabcut() 실행
-사각형 밖에 있는 모든 것이 배경이라고 생각하고, 이 정보를 사용해 사각형 안의 배경 찾기


캐니(Canny) 경계선 감지기
-경계선 감지 사용해 정보가 적은 영역 제거, 대부분의 정보가 담신 영상 영역 구분 가능
-캐니 감지기는 그레이디언트 임계값의 저점과 고점 나타내는 두 매개변수 필요




자료조사

  • 얼굴 탐지(Face Detection)

- 영상 한 장에서 얼굴의 위치가 어디인지 알아냄

  • 얼굴 추적(Face Tracking)

- 동영상에서 얼굴 탐지를 수행 후 추적 알고리즘 통해 얼굴을
따라다니게 하는 방법

  • 얼굴 인식(Face Recognition)

- 한 장의 영상을 이미 알고 있는 상태에서 새로운 영상의 얼굴
알아냄

  • SSD(Single Shot Detector)

- 2016년 발표된 객체 검출 딥러닝 알고리즘
- 영상에서 얼굴이 존재한다면 어느 부분에 위치하는지
사각 좌표로 알려주는 코드 이용
-> 해당 영상을 잘라 얼굴 인식 신경망 모델의
입력층에 넣어주면 안면인식 프로그램 제작 가능



둘째주 진행 내용

  • 상반신 탐지 후 그 외 배경 제거

상반신 탐지
-haarcascade_upperbody.xml 이용

profile_son.png



ROI Image crop
-마우스로 roi 지정 및 표시, 저장


배경 제거
Cv2.grabcut()




셋째주 진행 내용

  • 주요 기능



  • 배경 제거 알고리즘 개선

grabcut 알고리즘의 단점
-유사한 색상들 결합해 객체 영역과 배경 영역 분리
-> 객체와 배경 간 색상 차가 비슷한 영상 내에서는 분할결과 미흡


개선 방향

  • 히스토그램 평활화 -> 밝기 및 선명도 보강
  • 샤프닝 -> 객체 경계 강화


히스토그램 평활화
-> 밝기 및 선명도 보강

too much,,,,


샤프닝
-> 객체 경계 강화


샤프닝
-원래 화소 값을 n배, 주변의 화소 값을 -1배 하여 합이 1이 되도록 마스크 만듦


-원점 요소는 양의 큰 값, 주변 요소는 음의 작은 값 가짐
-연산 수행 시 중심 화소와 주변 이웃 화소 값이 차이가 큰 경우에서 결과 크게 나옴
-> 중심과 주변화소 차이를 더욱 두드러지게 만드는 효과


박종훈, "칼라 히스토그램과 변형된 샤프닝 필터를 이용한 개선된 그랩컷 알고리즘에 관한 융합 기술 연구", 한국융합학회논문지 제6권 제6호
위 논문에서 제안하는 샤프닝 필터 마스크와 칼라 히스토그램 그래프

-논문에서 제안하는 샤프닝 필터 마스크와 유사하게 적용한 결과 마스크 적용 후 결과 이미지가 훨씬 더 배경 제거에 유리하게 변형됨



느낀점
1. 아이디어를 생각에서만 그치는 게 아니라 무언가로 실현했다는 것에 의의를 둔다
이 경험으로서 앞으로 더 구현하기 어려운 프로젝트들도 충분히 실현해낼 수 있을 거라는 자신감을 얻었다
2. 수업에서 배운 OpenCV 함수와 알고리즘을 활용해봄으로서 각각의 함수가 어디에 어떻게 유용하게 쓰여질 수 있는지 실습 기반으로 지식을 탄탄히 할 수 있었다
3. 추후 웹앱, 모바일앱으로의 구현을 생각하다보니 장고나 플러터같은 프레임워크 등도 함께 공부해 볼 수 있었다
4. 기사 시험 준비하면서 배운 프로젝트 개발 과정을 직접 따라 개발해보면서 내가 정말 증명사진 생성기로 이익을 창출해 내는 개발자라면 각각의 부분 부분에서 어떻게 하면 더 원활히 개발할 수 있을지 많은 생각을 해볼 수 있었다

여러 면에서 느낀 점이 많았던 프로젝트였다!



추가)
MATLAB에 grabcut 마스크 바로 얻을 수 있는 앱이 있잖아..?
https://www.mathworks.com/help/images/segment-image-using-graph-cut.html

Segment Image Using Graph Cut in Image Segmenter - MATLAB & Simulink

You have a modified version of this example. Do you want to open this example with your edits?

www.mathworks.com