結論
- カンナム支部のみんなでラズパイハンズするのは楽しい!
- AmazonRekognition, MS Face API, Face Plus PlusAPIを利用すると低費用
でイメージ分析が可能!
- StepFunctionsとLambdaはよく動作する!
- 改善すること (セキュリティーなど。。。)
- カンナム支部で改善し、AWS Summit Seoul 2017で発表予定
#6 2012년 한국최초 AWS 파트너로 서비스 시작
한국내 최초이며 최대 규모의 AWS Premier Consulting Partner
400사 이상의 고객사 유치
20개 이상의 글로벌 솔루션 제공
한국내 유일한 AWS 인증 한국어 서포트 센터 운용
한국최초 AWS Enterprise Support 제공
24시간/7일/365일 서포트 서비스 제공
#7 먼저 이 세션을 진행하게 된 배경을 설명해드리겠습니다.
AWSKRUG 강남 소모임에서 오회근님이 발표해주신 내용이 재미있어서 같이 핸즈온랩으로 만들게 되었습니다..
아쉽게도 오늘 같이 오시진 못했지만, 제가 요청드려서 소개해봅니다.
요기요는 한국 2위의 배달앱에서 백엔드 서버 개발자로 일하고,
예전에 카메라에 관련된 업무를 하신적이 있어서 이번 내용의 기초를 다져주셨습니다.
그럼 시작하겠습니다.
#8 최대한 간단하게 만들기
라즈베리파이+카메라+WiFi가 기본!!
왼쪽은 오회근님의 포터플 라즈베리파이입니다. 배터리와 테더링으로 이동하면서도 얼굴분석을 가능하도록 만드셨습니다
오른쪽은 제가 개발중에 찍은 사진입니다.
#9 개발 방법은 아래와 같습니다
사진을 일정 시간마다 찍어서 S3에 업로드
성별, 나이, 스마일 통계를 구한다
AWS에서 Serverless로 구성
개발중에 반복을 많이 하므로 CLI를 이용
카메라는 싼거로 3.5달러!!
프로토타입 개발이라 보안을 잠시 미뤄뒀지만, 보안은 중요합니다!!
#10 아키텍쳐는 다음과 같습니다
AWS 서비스는 S3, Lambda, StepFunctions, RDS 사용
얼굴 분석에 Amazon Rekognition, MS Face API, Face Plus Plus 이용
Poly.ly 서비스를 이용해서 차트 생성
#11 개발환경은 다음과 같습니다.
파이썬 2.7
pip
emulambda
AWS CLI
statelint
라즈베리파이와 인터넷 연결
#12 먼저 이미지가 올라갈 S3 Bucket을 생성합니다.
Amazon Rekognition API가 있는 US-WEST-2 OREGON 리전에 버킷을 생성했습니다.
분석이 끝난 사진은 삭제하기 위해서 LifeCycle을 1일로 설정했습니다.
모든 사용자들이 접근 가능하도록 Policy를 설정했습니다
여기서 주의할점은, 실제로 서비스를 할 경우엔 이런 보안에 중요한 부분은 signed url 등을 이용해야 합니다.
#13 그 다음은 라즈베리파이입니다.
사전에 라즈베리파이 세팅을 해야합니다.
Wifi 연결
USB Webcam에 연결
웹캠을 연결해주는 드라이버인 fswebcam 설치 및 깨끗한 사진을 위해서 설정값을 조절해줍니다.
S3에 이미지를 업로드 하기 위해서 AWS CLI 설치 및 accessKey, secretKey, region 정보의 설정을 해줍니다.
설치 후 오른쪽과 같이 카메라를 촬영 후 이미지를 S3에 전송하고
#14 IAM 설정을 해줍니다.
Lambda를 이용하기 위해서 Lambda 실행 권한을 가진 jawsdaysfaces-role을 추가합니다.
Role에는
S3 Bucket에 액세스 가능한 Policy를 만든뒤 추가해줍니다.
Amazon Rekognition, StepFunction에도 접근 가능한 Policy도 추가해줍니다.
#15 RDS를 생성해줍니다.
Security Group에서 Inbound를 모두 허용합니다.
단, RDS를 외부에 공개하는건 매우 위험합니다!!
실사용시에는 이렇게 하면 안됩니다.
Lambda가 RDS에 접근하기 위해서는 같은 VPC에 있어야 하지만, 이럴 경우엔 NAT Gateway를 만들어야 함.
우측과 같은 커맨드를 통해서 RDS를 생성하고, endpoint를 가져옵니다.
#21 StepFunctions JSON입니다.
이전의 구성은 이와 같은 JSON 파일로 구성됩니다.
#22 스텝펑션 제작 메뉴에서 이와 같이 미리 제공되는 템플릿을 참고로 StepFunctions를 만들 수 있습니다.
#23 스텝펑션의 json 파일을 만든뒤, Statelint를 통해서 json 파일을 검증해서 개발할 수 있습니다.
이 케이스는 일부러 Type 값을 빠트려서 오류를 발생시킨 경우입니다.
Statelint 커맨드를 통해서 에러가 발생하는걸 알 수 있습니다.
#24 얼굴 이미지가 아닐 경우의 동작입니다.
IsFacePhoto에서 얼굴 이미지로 인식을 하고, 각 얼굴 API에 얼굴 분석 정보를 요청합니다.
Input 데이터는 기존 이미지의 파일명과 url 정보를 다음 동작에 전달해주는 역할입니다.
#25 얼굴 이미지인 경우의 동작입니다.
얼굴 이미지일 경우엔 얼굴 분석 API에 병렬로 얼굴분석정보를 요청합니다.
Input Data는 기존의 이미지 정보를 그대로 전달하는 역할을 합니다.
#26 먼저 얼굴인지 인식하는 Detect Labels 부분입니다.
Amazon Rekognition의 이미지를 분석해주는 detect_labels api로 요청합니다.
Label의 정보에서 Name 키값의 정보가 Human, People, Person 이면서 Confidence 값이 95 이상일 경우 얼굴 사진으로 판별합니다.
#28 JAWS-FESTA에서 찍은 사진을 분석한 결과입니다.
Name에 Human, People, Person에 들어갔고, Confidence가 99로 높은 매칭을 보여줍니다.
앉아있다는 Sitting 값과 Classroom 값도 있지만 정확도는 낮게 표시됩니다.
#29 앞에서 분석한 데이터를 가지고, Lambda가 아닌 Stepfunctions에서 분기 처리를 해줍니다.
Type은 Choice로,
앞에서 전달된 데이터로 다른 Task를 수행할 수 있도록 처리 할 수 있습니다.
Boolean 말고도 숫자, 글자등의 값도 비교 가능합니다.
#30 얼굴 분석 API를 병렬로 처리하는 부분입니다.
각각의 작업을 실행한 뒤, 결과값을 배열 형태로 Face Data Process에 전달합니다.
#31 얼굴분석 API는, 각 회사별로 값이 약간씩 다릅니다.
아마존의 경우, 최근에 나이값이 추가가됐는데, 나이의 Low값과 High 값이 표시됩니다.
일반적으로 중간값이 가깝기 하지만, 중간값이 반드시 실제 나이와 맞는 값은 아닙니다.
MS Face API나 Face Plus Plus는 나이값이 고정으로 표시됩니다.
그 외에도 Amazon 에서는 Emotion 값을 기본으로 포함해서, 다양한 감정인식 정보도 포함하고 있습니다.
타 업체에서도 Emotion 정보는 추가적인 API를 통해서 가져올수도 있습니다.
#32 얼굴 분석한 데이터를, 입맛에 맞는 통계를 내기 위해서 데이타베이스에 맞는 형태로 가공합니다.
여기서는, 나이값은 평균값을 기준으로 잡았습니다.
스마일 값은 Face PlusPlus를 이용했습니다.
성별정보는 MS에서 가져왔습니다.
얼굴 분석 정보의 값은 업체마다 상이하므로, 본인이 원하는 값을 가진 회사의 정보를 이용하거나, 가공해야 할 거 같습니다.
#42 아닙니다. 최근 인기 한국 드라마의 여주인공의 사진을 넣어서 테스트한 결과입니다.
여성의 표시도 정확하게 되는걸 확인 할 수 있습니다.
#43 결론
소모임에서 모여서 라즈베리파이를 이용해 개발하니 무척 재미있습니다!!
다양한 얼굴분석 API를 통해서 쉽게 이미지 분석/감정 분석 앱을 개발할 수 있었다
StepFunctions, Lambda는 잘 작동해줬습니다.
강남소모임에서 지속적으로 개선해서, AWS Summit Seoul 2017에서 발표예정입니다.
#44 감사합니다. 본 발표자료는 제가 슬라이드쉐어에 올리고 트위터에도 올릴 예정이니 참고하시기 바랍니다.
이제 다음 발표자를 소개하겠습니다.