2. 자기소개
Hyunmin Kim (김현민)
소속: MEGAZONE
AWS Solutions Architect
AWSKRUG Gangnam Leader
iOS개발자, Node.js로 개발,
현재 AWS Solutions Architect로 메가존에서
일하는중. AWSKRUG에서 많은 활동을 하고 있습니다.
좋아하는 AWS 서비스 : EC2, S3, Route53, Lambda
5. 회사소개
2012 한국최초 AWS파트너로 서비스 개시
한국최초 & 최대 AWS Premier Consulting Partner
400+이상의 고객에서 서비스 제공
20+ 글로벌 No.1 솔루션 제공
한국 유일의 AWS 공인 한국어 서포트 센터 운영
한국 최초 AWS Enterprise Support 제공
24 / 7 / 365 서포트 서비스 제공
6. 이 프레젠테이션을 한 이유
AWSKRUG Gangnam 소모임에서 라즈베리파이와
카메라를 이용한 재미있는 세션을 진행해주셨음.
오회근 (harry Oh)
YOGIYO 한국 배달어플리케이션
Backend Developer
Cloud BI Solution, Network Camera,
Standalone DVR, Web based Surveillance System
8. 개발 방법
• 사진을 주기적으로 찍어서 S3로 업로드
• 성별, 나이, 스마일 통계를 구한다
• AWS에서 Serverless로 구성
• CLI를 이용
• 카메라는 싼거로
• 시큐리티는 잠시 미뤄두자 ㅠㅠ
9. 아키텍쳐
• AWS 서비스는 S3, Lambda,
StepFunctions, RDS 사용
• 얼굴 분석으로
Amazon Rekognition,
MS Face API
Face Plus Plus 이용
• Plot.ly를 이용하여 차트 생성
10. 개발 환경
• Python 2.7 (virutalenv)
• pip
• emulambda (lambda Simumator)
• AWS CLI
• statelint (StepFunctions JSON validator)
• 라즈베리파이와 인터넷 연결
11. S3 Bucket 생성
• US-WEST-2 OREGON 리전에
jawsdaysfaces bucket 생성
• Lifecycle을 1일로 설정
• 모든 사용자들이 접근 가능하도록
설정
주의! 실제로 서비스 할 경우에는
signed url 등을 이용
12. 라즈베리파이
• 미리 준비해야 할 것들
• WiFi 연결
• USB WebCam 연결
• fswebcam 설치 및 설정값
• AWS CLI 설치 및 설정
• 이미지를 S3에 전송하고 확인
13. IAM 설정
• Lambda 실행 권한을 가진
jawsdaysfaces-role을 추가
• Jawsdaysfaces bucket을 액세스할 수
있는 policy 추가
• 해당 policy를 jawsdaysfaces-role에
추가
• Rekognition, StepFunction policy도 추가
AmazonRekognitionFullAccess
AWSStepFunctionsFullAccess
14. RDS 생성
• RDS를 생성
• Security Group에서 Inbound를
모두 허용
• RDS를 외부에 공개하는건 위험!
Lambda가 RDS에 접근하기
위해서는 같은 VPC에 있어야 한다,
하지만 이럴 경우 Lambda가
외부망에 접근하기 위해서는 NAT
Gateway가 필요함
• 개발용으로만 사용해야함
• 생성이 완료되고 endpoint를
가져옴
16. Amazon Rekognition
• SDK 지원
• IAM Policy로 설정
• 처음 12개월 동안 매월
5,000개의 이미지를 분석하고
매월 최대 1,000개의 얼굴
메타데이터를 저장 무료
• EU (Ireland)
US East (N. Virginia)
US West (Oregon)
17. MICROSOFT FACE API
• Microsoft face api 페이지
에서 API Key를 생성
• 생성된 API Key는 별도
보관
• 30,000/월 무료
18. FACE Plus Plus
• Face Plus Plus console
페이지에서 API Key를
생성
• 생성된 API Key는 별도
보관
• 무료는
제한된사용량/응답보장
안함
42. 결론
- 강남 소모임이 활성화되고, 서로 모여서 라즈베리파이와 카메라를 이용해서
개발하니 재미있다!!
- Amazon Rekognition, MS Face API, Face Plus Plus와 같은 이미지 분석
API를 통해서 큰 비용을 들이지 않고서도 쉽게 이미지 분석이 가능
- API 마다 데이터의 특성이 다르기 때문에 본인에게 필요한 정보에 맞춰서
바꿔나갈 수 있음
- StepFunctions를 통해서 Lambda의 동작과 로그를 보면서 개발할 수 있었음
- 개선할 사항이 많다 ㅠㅠ (보안, 다중 얼굴 처리)
이 부분은 소모임에서 모여서 아이디어 추가 및 계속 개선해 나갈 예정
안녕하세요. 김현민입니다.
한국에서 메가존에서 AWS Solutions Architect로 일하고, AWSKRUG의 강남 리더로 활동하고 있습니다.
좋아하는 AWS 서비스는 EC2, S3, Lambda 입니다.
일본 여행을 좋아합니다.
도쿄는 이번에 5번째 방문입니다. 작년에는 개인적으로 Jaws-Days를 구경하기 위해 왔었습니다.
한국 1위 AWS 프리미어 파트너사입니다.
2012년 한국최초 AWS 파트너로 서비스 시작
한국내 최초이며 최대 규모의 AWS Premier Consulting Partner
400사 이상의 고객사 유치
20개 이상의 글로벌 솔루션 제공
한국내 유일한 AWS 인증 한국어 서포트 센터 운용
한국최초 AWS Enterprise Support 제공
24시간/7일/365일 서포트 서비스 제공
먼저 이 세션을 진행하게 된 배경을 설명해드리겠습니다.
AWSKRUG 강남 소모임에서 오회근님이 발표해주신 내용이 재미있어서 같이 핸즈온랩으로 만들게 되었습니다..
아쉽게도 오늘 같이 오시진 못했지만, 제가 요청드려서 소개해봅니다.
요기요는 한국 2위의 배달앱에서 백엔드 서버 개발자로 일하고,
예전에 카메라에 관련된 업무를 하신적이 있어서 이번 내용의 기초를 다져주셨습니다.
그럼 시작하겠습니다.
최대한 간단하게 만들기
라즈베리파이+카메라+WiFi가 기본!!
왼쪽은 오회근님의 포터플 라즈베리파이입니다. 배터리와 테더링으로 이동하면서도 얼굴분석을 가능하도록 만드셨습니다
오른쪽은 제가 개발중에 찍은 사진입니다.
개발 방법은 아래와 같습니다
사진을 일정 시간마다 찍어서 S3에 업로드
성별, 나이, 스마일 통계를 구한다
AWS에서 Serverless로 구성
개발중에 반복을 많이 하므로 CLI를 이용
카메라는 싼거로 3.5달러!!
프로토타입 개발이라 보안을 잠시 미뤄뒀지만, 보안은 중요합니다!!
아키텍쳐는 다음과 같습니다
AWS 서비스는 S3, Lambda, StepFunctions, RDS 사용
얼굴 분석에 Amazon Rekognition, MS Face API, Face Plus Plus 이용
Poly.ly 서비스를 이용해서 차트 생성
개발환경은 다음과 같습니다.
파이썬 2.7
pip
emulambda
AWS CLI
statelint
라즈베리파이와 인터넷 연결
먼저 이미지가 올라갈 S3 Bucket을 생성합니다.
Amazon Rekognition API가 있는 US-WEST-2 OREGON 리전에 버킷을 생성했습니다.
분석이 끝난 사진은 삭제하기 위해서 LifeCycle을 1일로 설정했습니다.
모든 사용자들이 접근 가능하도록 Policy를 설정했습니다
여기서 주의할점은, 실제로 서비스를 할 경우엔 이런 보안에 중요한 부분은 signed url 등을 이용해야 합니다.
그 다음은 라즈베리파이입니다.
사전에 라즈베리파이 세팅을 해야합니다.
Wifi 연결
USB Webcam에 연결
웹캠을 연결해주는 드라이버인 fswebcam 설치 및 깨끗한 사진을 위해서 설정값을 조절해줍니다.
S3에 이미지를 업로드 하기 위해서 AWS CLI 설치 및 accessKey, secretKey, region 정보의 설정을 해줍니다.
설치 후 오른쪽과 같이 카메라를 촬영 후 이미지를 S3에 전송하고
IAM 설정을 해줍니다.
Lambda를 이용하기 위해서 Lambda 실행 권한을 가진 jawsdaysfaces-role을 추가합니다.
Role에는
S3 Bucket에 액세스 가능한 Policy를 만든뒤 추가해줍니다.
Amazon Rekognition, StepFunction에도 접근 가능한 Policy도 추가해줍니다.
RDS를 생성해줍니다.
Security Group에서 Inbound를 모두 허용합니다.
단, RDS를 외부에 공개하는건 매우 위험합니다!!
실사용시에는 이렇게 하면 안됩니다.
Lambda가 RDS에 접근하기 위해서는 같은 VPC에 있어야 하지만, 이럴 경우엔 NAT Gateway를 만들어야 함.
우측과 같은 커맨드를 통해서 RDS를 생성하고, endpoint를 가져옵니다.
RDS에 접속 후, 통계 데이터를 넣을 테이블을 생성해줍니다.
이제 이용한 얼굴 분석 API에 대해서 설명드리겠습니다.
먼저, Amazon Rekognition은 딥러닝을 이용한 이미지 분석 서비스로,
Lambda에서는 IAM Policy로 설정해서 접근해서 사용 가능합니다.
아직 아래의 3개 리전에서만 지원되고 있습니다.
Microsoft Face API는 다음과 같습니다.
추가적으로 Emotion 등의 더 정밀한 API도 있습니다.
Face PlusPlus는 중국의 업체에서 제공하는 얼굴 분석 API 입니다.
무료는 제한된 사용량과 응답에 대한 속도 보장을 안합니다만, 정해진 리밋이 있지는 않습니다.
스텝 펑션에 대해서 알려드리겠습니다.
StepFunctions JSON입니다.
이전의 구성은 이와 같은 JSON 파일로 구성됩니다.
스텝펑션 제작 메뉴에서 이와 같이 미리 제공되는 템플릿을 참고로 StepFunctions를 만들 수 있습니다.
스텝펑션의 json 파일을 만든뒤, Statelint를 통해서 json 파일을 검증해서 개발할 수 있습니다.
이 케이스는 일부러 Type 값을 빠트린 경우입니다.
Statelint 커맨드를 통해서 에러가 발생하는걸 알 수 있습니다.
얼굴 이미지가 아닐 경우 StepFunction의 동작입니다.
IsFacePhoto에서 얼굴 이미지로 인식을 하고, 각 얼굴 API에 얼굴 분석 정보를 요청합니다.
Input 데이터는 기존 이미지의 파일명과 url 정보를 다음 동작에 전달해주는 역할입니다.
얼굴 이미지인 경우의 동작입니다.
얼굴 이미지일 경우엔 얼굴 분석 API에 병렬로 얼굴분석정보를 요청합니다.
Input Data는 기존의 이미지 정보를 그대로 전달하는 역할을 합니다.
먼저 얼굴인지 인식하는 Detect Labels 부분입니다.
Amazon Rekognition의 이미지를 분석해주는 detect_labels api로 요청합니다.
Label의 정보에서 Name 키값의 정보가 Human, People, Person 이면서 Confidence 값이 95 이상일 경우 얼굴 사진으로 판별합니다.
JAWS-FESTA에서 찍은 사진을 분석한 결과입니다.
Name에 Human, People, Person에 들어갔고, Confidence가 99로 높은 매칭을 보여줍니다.
앉아있다는 Sitting 값과 Classroom 값도 있지만 정확도는 낮게 표시됩니다.
앞에서 분석한 데이터를 가지고, Lambda가 아닌 Stepfunctions에서 분기 처리를 해줍니다.
Type은 Choice로,
앞에서 전달된 데이터로 다른 Task를 수행할 수 있도록 처리 할 수 있습니다.
Boolean 말고도 숫자, 글자등의 값도 비교 가능합니다.
얼굴 분석 API를 병렬로 처리하는 부분입니다.
각각의 작업을 실행한 뒤, 결과값을 배열 형태로 Face Data Process에 전달합니다.
얼굴분석 API는, 각 회사별로 값이 약간씩 다릅니다.
아마존의 경우, 최근에 나이값이 추가가됐는데, 나이의 Low값과 High 값이 표시됩니다.
일반적으로 중간값이 가깝기 하지만, 중간값이 반드시 실제 나이와 맞는 값은 아닙니다.
MS Face API나 Face Plus Plus는 나이값이 고정으로 표시됩니다.
그 외에도 Amazon 에서는 Emotion 값을 기본으로 포함해서, 다양한 감정인식 정보도 포함하고 있습니다.
타 업체에서도 Emotion 정보는 추가적인 API를 통해서 가져올수도 있습니다.
얼굴 분석한 데이터를, 입맛에 맞는 통계를 내기 위해서 데이타베이스에 맞는 형태로 가공합니다.
여기서는, 나이값은 평균값을 기준으로 잡았습니다.
스마일 값은 Face PlusPlus를 이용했습니다.
성별정보는 MS에서 가져왔습니다.
얼굴 분석 정보의 값은 업체마다 상이하므로, 본인이 원하는 값을 가진 회사의 정보를 이용하거나, 가공해야 할 거 같습니다.
앞에서 가공한 데이터를 RDS에 넣어줍니다.
Select 문으로 Database에 저장이 잘 되는지 확인합니다.
통계를 보기 위해서 통계용 쿼리를 작성합니다.
하지만, 결과가 이와 테이블 형태로 표시됩니다.
Plot.ly라는 서비스를 이용해서, 데이터를 보기 좋게 차트화 시킵니다.
이런 차트가 만들어집니다. 이건 시간대별 나이와 스마일 통계입니다.
오후 3시에 작업시작부터 6시까지 5초 간격으로 계속 촬영한 결과입니다.
작업이 잘 돼고 있을때는 높은 수치로 올라가고,
뭔가 일이 잘 안 풀릴때는 낮은 수치로 표시되는걸 확인할 수 있습니다.
나이대별 통계입니다. 주로 20~30대, 30~40대의 데이터가 반반 나왔습니다.
20대라고 해도 실제 데이터를 보면 20대 후반쪽이 더 많습니다
성별 차트입니다.
저희 팀이 남자밖에 없어서, 또한 저를 대상으로 사진을 찍었기때문에, 남자 수치가 압도적으로 높습니다.
그럼 이 수치는 잘못된 걸까요? 누구일까요?
아닙니다. 최근 인기 한국 드라마의 여주인공의 사진을 넣어서 테스트한 결과입니다.
여성의 표시도 정확하게 되는걸 확인 할 수 있습니다.
결론
소모임에서 모여서 라즈베리파이를 이용해 개발하니 무척 재미있다!!
다양한 얼굴분석 API를 통해서 저렴한 비용으로 쉽게 이미지 분석/감정 분석 앱을 개발할 수 있었다
구글 비전 API나 Emothon 값을 이용하면 더 많은 데이터를 얻을 수 있을것
StepFunctions를 통해서 Lambda의 동작과 실행시 로그를 확인하면서 개발할 수 있었음
아직 개선할 사항이 많다. 보안, 다중얼굴 처리 등등
계속 소모임을 진행하면서 아이디어 추가 및 개선해나갈것