© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Hyunmin Kim
AWSKRUG リーダー / Megazone SA
Raspberry Piを利用した顔の表情
分析と感情を認識するシステム構築
自己紹介
Hyunmin Kim (金鉉敏, キム・ヒョンミン, 34)
MEGAZONE
AWS Solutions Architect
AWSKRUG カンバム支部 リーダー
iOSデベロッパ、Node.js開発
AWS大好き!
好きなサービス : EC2, S3, Route53, Lambda
日本旅行が大好き
会社紹介
会社紹介
2012 韓国内初 AWSパートナーとしてサービス開始
韓国内初 & 最大 AWS Premier Consulting Partner
400+ お客様にサービスを提供
20+ グローバル No.1 ソリューション提供
韓国内唯一 AWS 認定 韓国語 サポートセンター運用
韓国内初 AWS Enterprise Support 提供
24 / 7 / 365 サポートサービス提供
このプロジェクトを始めたきっかけ
AWSKRUG Gangnam 支部の オ・フェグンさんが
この楽しい内容でプレゼンテーションをしてもらいました。
オ・フェグン (harry Oh)
YOGIYO 韓国2位配達APP
Backend Developer
Cloud BI Solution, Network Camera,
Standalone DVR, Web based Surveillance System
システムの構成
オさんのラズパイ
(手持ち可能)
開発中のラズパイカメラ
開発手順
• 写真を定期的にとってS3へアップロード
• 性別、年齢、感情(スマイル)統計
• AWSのServerlessサービス利用
• CLI利用
• カメラは安いもの(笑)
• セキュリティは後で。。。(ㅠㅠ)
構成
• AWS サービスはS3, Lambda,
StepFunctions, RDS 利用
• 顔分析は
Amazon Rekognition,
MS Face API
Face Plus Plus API利用
• Ploy.lyを利用したリャート生成
開発環境
• Python 2.7 (virutalenv)
• pip
• emulambda (lambda Simumator)
• AWS CLI
• statelint (StepFunctions JSON validator)
• ラズパイとWIFI接続
S3 Bucket作成
• US-WEST-2 OREGON region
jawsdaysfaces bucket 生成
• Lifecycleを 1日に設定
• すべての利用者が接続できるように
設定
注意!サービスで利用する場合
signed url などを利用する
ラズパイ
• 事前準備
• WiFi 接続
• USB WebCam 接続
• fswebcam インストール、設定
• AWS CLI インストール、設定
• イメージをS3へ転送確認
IAM 設定
• Lambda 実行権限を持つ
jawsdaysfaces-role追加
• Jawsdaysfaces bucketにpolicy追加
• 該当policyをjawsdaysfaces-roleに追加
• Rekognition, StepFunction policyも追加
AmazonRekognitionFullAccess
AWSStepFunctionsFullAccess
RDS 構築
• RDSインスタンス構築
• Security GroupからInboundをすべ
てを許可
• RDSのPublicアクセスは危険!
LambdaがRDSへ接続するために
は同じVPCを利用する。でも、
Lambdaが外部と通信するためNAT
Gatewayが必要
• 開発用のみ利用する
• 構築が完了したら endpointを確認
TABLE 作成
Amazon Rekognition
• SDK サポート
• IAM Policyで設定
• Free Tier 利用可能
• EU (Ireland)
US East (N. Virginia)
US West (Oregon)
MICROSOFT FACE API
• Microsoft face api からAPI
Keyを作成
• 作成したAPI Keyを別途保
存
• 30,000/月 無料
FACE Plus Plus
• Face Plus Plus console
から API Key作成
• 作成したAPI Keyを別途
保存
• 無料ですが制限がある
Step Functions
Step Functions JSON
テンプレート参照
Statelint
顔イメージではない場合
顔イメージの場合
Detect Labels (写真分析)
• Amazon Rekognitionに
detect_labels API呼び出し
• Label名がHuman, People,
PersonとConfidence値が95
以上の場合顔写真で判別
JAWS-UG LOGOテスト
写真テスト
isFacePhoto
• isFacesの結果による分岐
• 顔写真ではない場合
NoFacesPhotoへ
• 顔写真の場合APIを並列処
理
顔分析APIを並列処理
Amazon Rekognition, MS Face API, Face Plus Plusの顔分
析APIを呼びたし, 分析結果を保存
サービスごとの結果の違い
Face Data Process
• Face APIから収集した結
果からデータを加工する。
Update Database
• 加工したデータを
RDSに保存
Database確認
統計SQL作成
年齢とSmile平均
年齢別統計
性別統計
でも、結果は下記のように。。。
Plot.lyを利用し、チャートを作成
作成されたチャート
*^^*
ㅜㅜ
年齢別統計チャート
性別チャート
性別チャート
誰?
性別チャート
最近人気ドラマ主人公
結論
- カンナム支部のみんなでラズパイハンズするのは楽しい!
- Amazon Rekognition, MS Face API, Face Plus PlusAPIを利用すると低費用
でイメージ分析が可能!
- StepFunctionsとLambdaはよく動作する!
- 改善すること (セキュリティーなど。。。)
- カンナム支部で改善し、AWS Summit Seoul 2017で発表予定
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
ありがとうございます!
発表資料:
http://bit.ly/hyunmin-jawsdays2017

Raspberry Piを利用した顔の表情分析と感情を認識するシステム構築

Editor's Notes

  • #3 안녕하세요. 김현민입니다. 한국에서 메가존에서 AWS Solutions Architect로 일하고, AWSKRUG의 강남 리더로 활동하고 있습니다. 좋아하는 AWS 서비스는 EC2, S3, Lambda 입니다.
  • #4 일본 여행을 좋아합니다. 도쿄는 이번에 5번째 방문입니다. 작년에는 개인적으로 Jaws-Days를 구경하기 위해 왔었습니다.
  • #5 한국 1위 AWS 프리미어 파트너사입니다.
  • #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를 가져옵니다.
  • #16 RDS에 접속 후, 통계 데이터를 넣을 테이블을 생성해줍니다.
  • #17 이제 이용한 얼굴 분석 API에 대해서 설명드리겠습니다. 먼저, Amazon Rekognition은 딥러닝을 이용한 이미지 분석 서비스로, Lambda에서는 IAM Policy로 설정해서 접근해서 사용 가능합니다. 아직 아래의 3개 리전에서만 지원되고 있습니다.
  • #18 Microsoft Face API는 다음과 같습니다. 추가적으로 Emotion 등의 더 정밀한 API도 있습니다.
  • #19 Face PlusPlus는 중국의 업체에서 제공하는 얼굴 분석 API 입니다. 무료는 제한된 사용량과 응답에 대한 속도 보장을 안합니다만, 정해진 리밋이 있지는 않습니다.
  • #20 스텝 펑션에 대해서 알려드리겠습니다.
  • #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 이상일 경우 얼굴 사진으로 판별합니다.
  • #27 detect_labels에 JAWS-UG의 로고를 넣었을때의 결과입니다. Name에 Logo, Trademark, Emblem이 들어갔고, Confidence가 높은건 Logo, Trademark인거로 나옵니다.
  • #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에서 가져왔습니다. 얼굴 분석 정보의 값은 업체마다 상이하므로, 본인이 원하는 값을 가진 회사의 정보를 이용하거나, 가공해야 할 거 같습니다.
  • #33 앞에서 가공한 데이터를 RDS에 넣어줍니다.
  • #34 Select 문으로 Database에 저장이 잘 되는지 확인합니다.
  • #35 통계를 보기 위해서 통계용 쿼리를 작성합니다.
  • #36 하지만, 결과가 이와 테이블 형태로 표시됩니다.
  • #37 Plot.ly라는 서비스를 이용해서, 데이터를 보기 좋게 차트화 시킵니다.
  • #38 이런 차트가 만들어집니다. 이건 시간대별 나이와 스마일 통계입니다. 오후 3시에 작업시작부터 6시까지 5초 간격으로 계속 촬영한 결과입니다. 작업이 잘 돼고 있을때는 높은 수치로 올라가고, 뭔가 일이 잘 안 풀릴때는 낮은 수치로 표시되는걸 확인할 수 있습니다.
  • #39 나이대별 통계입니다. 주로 20~30대, 30~40대의 데이터가 반반 나왔습니다. 20대라고 해도 실제 데이터를 보면 20대 후반쪽이 더 많습니다
  • #40 성별 차트입니다. 저희 팀이 남자밖에 없어서, 또한 저를 대상으로 사진을 찍었기때문에, 남자 수치가 압도적으로 높습니다.
  • #41 그럼 이 수치는 잘못된 걸까요? 누구일까요?
  • #42 아닙니다. 최근 인기 한국 드라마의 여주인공의 사진을 넣어서 테스트한 결과입니다. 여성의 표시도 정확하게 되는걸 확인 할 수 있습니다.
  • #43 결론 소모임에서 모여서 라즈베리파이를 이용해 개발하니 무척 재미있습니다!! 다양한 얼굴분석 API를 통해서 쉽게 이미지 분석/감정 분석 앱을 개발할 수 있었다 StepFunctions, Lambda는 잘 작동해줬습니다. 강남소모임에서 지속적으로 개선해서, AWS Summit Seoul 2017에서 발표예정입니다.
  • #44 감사합니다. 본 발표자료는 제가 슬라이드쉐어에 올리고 트위터에도 올릴 예정이니 참고하시기 바랍니다. 이제 다음 발표자를 소개하겠습니다.