올해 1월에 아이디어가 떠올라 착수한 미니 프로젝트다
학부 수업을 듣고 배운 내용을 적용해 보고 싶었다
아래는 주차별 진행 사항을 정리한 내용이다
개발 목적과 필요성
- 누구든 쉽고 빠르게 증명사진을 편집할 수 있다
- 시중 프로그램 분석 결과 영상 사이즈 조절과 배열, 배경 제거 기능 모두를 수정하는 프로그램은 없었다
# 더 찾아보니까 미바이미 라는 사이트에서 제공되더라 ,,
- 편집 프로그램 사용해 제작하는 것보다 작업 속도 향상되며 편집 프로그램에 익숙지 않은 사용자도 사용 가능하다
개발 과정
- 시중 프로그램 분석
- 프로젝트 아이디어 도출, 개발 계획 수립
- 프로토타입 생성
- 개발
- 결과물 시연
- 기능 수정 및 유지보수
주요 기능
- 상반신 영상 입력받기
- 상반신 탐지 후 그 외 배경 제거
- 증명사진 형식에 맞게 사이즈와 배열 조절

결과물 형태 및 활용 계획
-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 이용


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 |