링크텍스트# 카메라 스티커 앱
< 일단 그냥 만들어 보자 >
{얼굴인식 카메라의 흐름 이해}
{dlib라이브러리 사용}
{이미지 배열의 인덱싱 예외 처리}
{x,y좌표 수정을 통해서 벌어지는 상태를 보기}
-Very simple process
1.얼굴 사진 준비
2. bounding box -> face landmark 찾기
3.찾아진 영역-> 왕관 스티커 붙이기
<단계별 얼굴인식>
1. 모든 얼굴 찾기(face detection)(by Python + dlib)
2. 얼굴의 위치교정(Posing) 과 투영(Projection) [by face landmark estimation]
3.얼굴 인코딩 [얼굴 구별하는 단계,embeddings이용]
4. 인코딩에서 사람의 이름찾기[이번 프로젝트랑 관련X,SVM이용]
-Deep process-
1. 디렉토리 구조 세팅
2. 사용할 이미지 + 스티커 이미지 저장
3. matplotlib -> opencv와 노트북 출력 for 이미지 처리
3-1)opencv-BGR / matplotlib,dlib - RGB
4.색깔보정 처리{By cvtColor()}이용하기
5. dlib -> hog detector
Perameters
+)hitThreshold:옵션이고 평면과 물체 사이의 거리 설정값
+)이미지 피라미드의 수 :이미지->unsampling->크기 키움
detector -> bounding box추출
dlib detector- dlib.rectangles타입 객체 반환
dlib.rectangless- left(), top(),
right(),bottom(),height(),width()함수를 포함
bounding box로 잘라낸(crop)얼굴 이미지 이용
-->이목구비 위치 알아냄 by face landmark localization기술
-->face landmark localization
+)top-down: bounding box찾고 box내부의 keypoint 예측
+)bottom-up: keypoint 먼저 찾고 군집화해서 box생성
--> 얼굴 이미지 이목구비 위치 찾기 (by 68개)
8.Dlib의 제공되는 모델 이용
+)weight file 다운
+) 압푹 풀어서 이용
+)저장 landmark모델 부르기
+)RGB이미지, dlib.rectangle 입력->dlib.full_object_detection반환
+)parts()함수이용
+)tuple(x,y) 68개로 이루어진 리스트 만들기
+)68개의 랜드만크가 얼굴 개수만큼 저장
9.스티커 적용하기
-위치 지정 방식
i)코 중심을 기준으로 높이 X 이상 그리기(비율로 거리 계산)
ii)눈썹 위 n픽셀 위에서 스티커 구현
-스티커 이미지 resize
-원본 이미지에 스티커 이미지 추가를 위해 x,y좌표 수정
-음수 생길 시 예외처리
+) -y크기만큼 스티커 자르기(crop)
+) top의 y좌표는 원본 이미지의 경계값으로 수정
+) 그리고 적용
bounding box와 landmark제거 하면 최종 결과 나온다.
1.opencv - 영상 관련 업계 표준 라이브러리
-> import cv2
2.cv.imread(fileName, flag): 함수를 이용하여 이미지 파일 읽기,파일 경로:절대/상대.
+) filName(str):이미지 파일의 경로
+)flag(int)-이미지 파일을 읽을 때의 Option
-cv.IMREAD_COLOR:Color러 읽음,투명부분무시,default
-cv.IMREAD_GRAYSCALE:Grayscale로읽기,중간처리단계
-cv.IMREAD_UNCHANGED:alpha channel포함하여 읽음
3.cv2.imshow(title,image):이미지 파일 보여줌
+) title(str)-윈도우 창의 Title
+) image(numpy.ndarray)-cv2.imread()의 return값
-cv2.waitKey():Keyboard입력 대기 함수
-cv2.destroyAllwindows():화면에 나타난 윈도우 종료
4.cv2.imwrite(fileName,image):변환된 이미지나 동영상 저장
+)fileName(str)-저장된 파일명
+)image-저장할 이미지
5.Image Pyramids
: 동일 이미지의 서로 다른 사이즈를 설정하는 것
:종류는 Gaussian Pyramids 와 Laplacian Pyramids
:Laplacian Pyramids는 축소,확장시 동일 원본 추출 불가
:특징
+)2개의 이미지를 각각 Load함.
+)각 이미지에 대해서 적당한 Gaussian Pyramid를 생성함.
+)Gaussian Pyramid를 이용하여 Laplacian Pyramid를 생성함.
+)Laplicain Pyramid를 이용하여 각 이미지의 좌측과 우측을 결함
+) 결함한 결과중 가장 작은 이미지를 확대하면서 동일 사이즈의 결합결과와 Add하여 외곽선을 선명하게 처리함.
6.cv2.pyrDown():행과 열이 2배씩 감소
7.cv2.pryUp(): 행과 열이 2배씩 증가
:다목적 머신러닝 모델로 선형, 비선형 분류, 회귀 이상치 탐색에도 사용이됩니다. 고로 복잡한 분류 문제에 잘 맞거나 작거나 중간 크기의 데이터 셋에 적합하다.
선형 SVM
: 두 클래스가 확실하게 구분이됨
-서포트 벡터: 도로 경계에 위치한 샘플에 의해 전적 결정되고 특성의 스케일에 민감하여 스케일을 조정하면 결정 경계가 좋아짐
: 선형적 구분이 된 상태이어야함
:이상치에 민감하다
다항식 커널
: 커널 트릭을 이용하여 적용.(특성을 추가하는 기법은 아니다 하지만 효과는 몇 배)
: 코드로 구현
: coef0 - 모델이 높은 차수와 낮은 차수에 얼마나 영향을 받을지 조절
: C- 결정 경계 폭을 결정(과대적합인 경우를 규제함)
![](https://velog.velcdn.com/images%2Fqsdcfd%2Fpost%2Fdd237383-681f-45a9-84df-595c9c1f977d%2Fimage.png)
유사도 특성
0 : 랜드마크와 아주 멀리 떨어짐
1 : 랜드마크와 같은 위치
코드 :