Closed james-sungjae-lee closed 5 years ago
1단계 : 얼굴 데이터 수집
Rekognition 을 사용하기 위해서는 먼저 Recognize 하고자 하는 사람의 얼굴 데이터를 수집하여야 한다.
Flex Ads 에서는 미리 만들어둔 Jetson 의 detectnet-camera 의 facenet 모델을 이용하여 사람을 촬영하고,
얼굴 부분만 크롭핑 하여 이미지 데이터로 저장하도록 하였다. 이를 통해 간편하게 얼굴 데이터의 수집이 가능하다
얼굴 데이터를 수집할 때, 몇 가지 주의사항이 있으며 이는 AWS Rekognition Documentation 에서 제공하는
"입력 이미지에 대한 권장 사항" 을 고려하면 된다.
https://docs.aws.amazon.com/ko_kr/rekognition/latest/dg/recommendations-facial-input-images.html
이에 따르면 각도에 따라 최소 5장의 이미지를 사용할 것을 권장한다.
Flex Ads 에서는 각도, 표정, 광원 등을 다양화 하여 1인당 40장의 얼굴 이미지 데이터를 수집하였다.
2단계 : collection 생성 및 관리
수집된 얼굴 데이터를 Rekognition 에 등록(학습, 인덱싱) 하기 위해서는 collection 을 생성해야 한다.
collection 이란 N 명의 얼굴을 등록하여 클러스터링(인덱싱) 한 얼굴 집합으로 생각할 수 있다.
A, B, C 를 X collection 에 등록하면, X 를 호출하여 새로운 이미지에 A, B, C 가 존재하는지 확인 가능하다
collection 을 생성(create), 나열(list), 설명(describe), 삭제(remove) 하는 것은 문서를 통해 확인 가능하다.
생성 https://docs.aws.amazon.com/ko_kr/rekognition/latest/dg/create-collection-procedure.html
나열 https://docs.aws.amazon.com/ko_kr/rekognition/latest/dg/list-collection-procedure.html
설명 https://docs.aws.amazon.com/ko_kr/rekognition/latest/dg/describe-collection-procedure.html
삭제 https://docs.aws.amazon.com/ko_kr/rekognition/latest/dg/delete-collection-procedure.html
collection 의 생성은 되도록 얼굴 이미지를 저장할 S3와 동일 region 에 생성해야 한다.
자신의 프로젝트를 대표하는 이름으로 collection 을 생성하면 된다.
생성 후에는 잘 생성되었는지 나열을 통해 확인하도록 한다.
3단계 : collection 에 얼굴 등록
일반적으로 collection 에 얼굴을 등록하는 과정은 다음과 같다.
Local Face Image -> S3 Upload -> Add to collection
이는 S3 에 얼굴 이미지를 저장하여 안정적인 시스템을 구축하기 위함이며, S3 에서는 다음의 과정이 필요하다
S3 Root 위치에 업로드 -> collection 에 추가 -> S3 업로드 이미지 정리 ( train/ 으로 이동 ) -> 기존이미지 삭제
Documentation 에서 "모음에 얼굴 추가" 에서 확인할 수 있다.
https://docs.aws.amazon.com/ko_kr/rekognition/latest/dg/add-faces-to-collection-procedure.html
python 의 boto3 를 이용한 얼굴 추가 방법은 'index_faces' 메소드를 이용하는 것으로 아래와 같이 사용한다.
response=client.index_faces(CollectionId=collectionId,
Image={'S3Object':{'Bucket':bucket,'Name':photo}},
ExternalImageId=photo,
MaxFaces=1,
QualityFilter="AUTO",
DetectionAttributes=['ALL'])
Image 는 S3 에 저장된 위치이며, ExternalImageId 가 얼굴과 매칭하고자 하는 ID 이다.
Collection 에 얼굴을 추가하는 index_faces 의 작동 원리를 추측하면,
먼저 얼굴을 Detection 한 다음, 해당 얼굴의 특징을 vector 형태로 추출하여 clustering 하는 것으로 보인다
이에 어느 위치에 얼굴이 detection 되었는지에 대한 결과가 response 에 나타난다.
4단계 : 이미지를 이용한 collection 검색
collection 에 얼굴을 등록하는 과정과 마찬가지로, S3 를 거쳐 검색하게 된다.
Local Face Image -> S3 Upload -> Search Collection -> Return ID to Local
Documentation 의 "이미지를 사용하여 얼굴 검색" 에서 확인 가능하다
https://docs.aws.amazon.com/ko_kr/rekognition/latest/dg/search-face-with-image-procedure.html
Python Boto3 에서는 SearchFaceByImage 메소드를 이용해 사용 가능하다
response=client.search_faces_by_image(CollectionId=collectionId,
Image={'S3Object':{'Bucket':bucket,'Name':fileName}},
FaceMatchThreshold=threshold,
MaxFaces=maxFaces)
위와 거의 동일하지만, 학습에 필요한 Label 이 할당되지 않는 것을 볼 수 있다.
앞에서 학습시킨 ExternalImageId 를 포함한 얼굴 정보가 반환된다.
AWS Rekognition 을 이용하여 Face Recognition 작업을 수행하기 위해서는
사전에 얼굴 데이터를 모으고, 콜렉션을 생성한 다음, 해당 얼굴 데이터를 업로드 하는 등의 과정이 필요하다
이를 정리해둘 필요가 있기에 Issue 를 이용해 그 과정을 순차적으로 작성하도록 한다.