본문 바로가기

CS/AI | CV

ID Photo Generator | 증명사진 생성기

올해 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



'CS > AI | CV' 카테고리의 다른 글

머신러닝 프로젝트 계획  (0) 2021.08.31
선형 회귀 2, Colab 실습  (0) 2021.07.28
Semantic Segmentation, Instance Segmentation, Object detection  (0) 2021.07.23
Active contour model  (0) 2021.07.22
Image Segmentation  (0) 2021.07.22

Tiny Star