SlideShare a Scribd company logo
1 of 21
Download to read offline
【GWゼミ #2】コンピュータビジョン+機械学習+AWS 勉強会 2/3
AWS LambdaでOpenCV
© 2017 Global Walkers,Inc.
2017/08/23
0
1© 2017 Global Walkers,Inc.
AWS連携カメラアプリの構成例
2© 2017 Global Walkers,Inc.
今回は
今回はこの部分。
LambdaでOpenCVを動かしてみました。
3
コンピュータビジョン・機械学習の活用 システム構成例1
スマートフォン
・領収書エリアの特定
・文字領域の推定
・文字の読み取り
© 2017 Global Walkers,Inc.
学習用画像データ
(事前に収集)
事前に学習
領収書認識
4
画像をクラウドサーバに送信
クラウドサーバー
・ユーザ管理
・画像データの蓄積
・領収書エリアの特定
・文字領域の学習、推定
・文字の学習、読み取り
スマートフォン
・サーバ連携
© 2017 Global Walkers,Inc.
学習用画像データ
学習
データの蓄積
コンピュータビジョン・機械学習の活用 システム構成例2
サーバ連携領収書認識
5© 2017 Global Walkers,Inc.
今回はLambdaを使ってみる
Lambdaとは
・サーバーレスでプログラムをAWSクラウド上で実行してくれる
・対応言語: NodeJS, Java, Python, C#
・AWSクラウドのアクションをトリガーにしてプログラムを実行可能
・S3へのファイルのアップロード時
・DynamoDBのテーブル更新時
など
・AWS API gatewayを使って簡単にLambda関数を公開できる
6© 2017 Global Walkers,Inc.
今回はLambdaを使ってみる
Lambdaとは
・メリット
EC2が不要
使用頻度が低い場合、費用が安い
・デメリット
処理時間の上限が300秒
メモリに上限がある(最大で1536MB)
一時ディスク容量に上限がある(最大512MB)
Lambda関数デプロイパッケージのサイズに上限がある(圧縮後50MB)
→ これが結構厳しい。OpenCVだけで・・・
7© 2017 Global Walkers,Inc.
まずは準備
LambdaでOpenCV等のライブラリを使用するためには、それらを一つにまとめた
zipを作成する必要がある。
まずは、Docker上でamazon linuxを動かす
(http://qiita.com/mkisono/items/b2add04203f7b4a6da67を参考に)
FROM amazonlinux:latestRUN yum update -yRUN yum install python27-devel
python27-pip gcc gcc-c++ cmake git zip -yRUN yum install libjpeg-devel
zlib-devel -yRUN pip install --upgrade pipRUN pip install virtualenv
numpyENV HOME /home/lambda-pyRUN mkdir $HOMEWORKDIR $HOMERUN git clone
https://github.com/opencv/opencv.gitWORKDIR $HOME/opencvWORKDIR
$HOME/opencv/buildRUN cmake -D CMAKE_BUILD_TYPE=RELEASE -D
BUILD_SHARED_LIBS=NO -D BUILD_opencv_python2=ON -D
BUILD_opencv_calib3d=OFF -D BUILD_opencv_objdetect=OFF -D
BUILD_opencv_ml=OFF -D BUILD_opencv_features2d=OFF -D
BUILD_opencv_stitching=OFF -D BUILD_opencv_videostab=OFF -D
BUILD_opencv_flann=OFF -D BUILD_opencv_superres=OFF -D
BUILD_opencv_shape=OFF -D BUILD_opencv_ts=OFF -D BUILD_opencv_video=OFF
-D BUILD_opencv_videoio=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..RUN
make installWORKDIR $HOMERUN virtualenv $HOME/venv
問題発生
OpenCVのsoファイルが90MBくらいある!!!
Lambdaの上限を超えてしまっている。とりあえずいろいろとOFFにしてみる。
→ 下記で、再度コンパイル!
cmake -D CMAKE_BUILD_TYPE=MinSizeRel -D BUILD_SHARED_LIBS=NO -D BUILD_opencv_python2=ON -D BUILD_CUDA_STUBS=OFF -D
BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_JASPER=OFF -D BUILD_JPEG=ON -D BUILD_OPENEXR=OFF -D BUILD_PERF_TESTS=OFF -D
BUILD_PNG=OFF -D BUILD_TBB=OFF -D BUILD_TESTS=OFF -D BUILD_TIFF=OFF -D BUILD_WITH_DEBUG_INFO=OFF -D BUILD_ZLIB=OFF -D
BUILD_WEBP=OFF -D BUILD_opencv_apps=OFF -D BUILD_opencv_calib3d=OFF -D BUILD_opencv_core=ON -D BUILD_opencv_cudaarithm=OFF
-D BUILD_opencv_cudabgsegm=OFF -D BUILD_opencv_cudacodec=OFF -D BUILD_opencv_cudafeatures2d=OFF -D
BUILD_opencv_cudafilters=OFF -D BUILD_opencv_cudaimgproc=OFF -D BUILD_opencv_cudalegacy=OFF -D
BUILD_opencv_cudaobjdetect=OFF -D BUILD_opencv_cudaoptflow=OFF -D BUILD_opencv_cudastereo=OFF -D
BUILD_opencv_cudawarping=OFF -D BUILD_opencv_cudev=OFF -D BUILD_opencv_features2d=ON -D BUILD_opencv_flann=OFF -D
BUILD_opencv_hal=OFF -D BUILD_opencv_highgui=ON -D BUILD_opencv_imgcodecs=ON -D BUILD_opencv_imgproc=ON -D
BUILD_opencv_java=OFF -D BUILD_opencv_ml=ON -D BUILD_opencv_objdetect=ON -D BUILD_opencv_photo=OFF -D
BUILD_opencv_python3=OFF -D BUILD_opencv_shape=OFF -D BUILD_opencv_stitching=OFF -D BUILD_opencv_superres=OFF -D
BUILD_opencv_ts=OFF -D BUILD_opencv_video=OFF -D BUILD_opencv_videoio=OFF -D BUILD_opencv_videostab=OFF -D
BUILD_opencv_viz=OFF -D BUILD_opencv_world=OFF -D WITH_1394=OFF -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF -D WITH_CUFFT=OFF -D
WITH_EIGEN=OFF -D WITH_FFMPEG=OFF -D WITH_GDAL=OFF -D WITH_GPHOTO2=OFF -D WITH_GIGEAPI=OFF -D WITH_GSTREAMER=OFF -D
WITH_GTK=OFF -D WITH_INTELPERC=OFF -D WITH_IPP=OFF -D WITH_IPP_A=OFF -D WITH_JASPER=OFF -D WITH_JPEG=ON -D WITH_LIBV4L=OFF
-D WITH_OPENCL=OFF -D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENEXR=OFF -D
WITH_OPENGL=OFF -D WITH_OPENMP=OFF -D WITH_OPENNI=OFF -D WITH_PNG=OFF -D WITH_PTHREADS_PF=OFF -D WITH_PVAPI=OFF -D
WITH_QT=OFF -D WITH_TBB=OFF -D WITH_TIFF=OFF -D WITH_UNICAP=OFF -D WITH_V4L=OFF -D WITH_VTK=OFF -D WITH_WEBP=OFF -D
WITH_XIMEA=OFF -D WITH_XINE=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..
8© 2017 Global Walkers,Inc.
9© 2017 Global Walkers,Inc.
デプロイパッケージを作成
bash-4.2# source $HOME/venv/bin/activate (venv)
bash-4.2# pip install Pillow numpy (venv)
bash-4.2# cp /usr/local/lib/python2.7/dist-packages/cv2.so
~/venv/lib/python2.7/site-packages/ (venv)
bash-4.2# cd ~/venv/lib/python2.7/site-packages (venv)
bash-4.2# zip -r9 ~/lambda_function.zip *
無事に50MB以内に収まりました J
10© 2017 Global Walkers,Inc.
ソースコード: lamda_func.py
import cv2
import boto3
import os
import sys
s3_client = boto3.client('s3')
def resize_image(image_path, resized_path):
img=cv2.imread(image_path)
orgHeight, orgWidth = img.shape[:2]
size = (orgHeight/2, orgWidth/2)
img_s=cv2.resize(img, size)
cv2.imwrite(resized_path, img_s)
def handler(event, context):
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
download_path = '/tmp/'+key
upload_path = '/tmp/resized-{}'.format(key)
s3_client.download_file(bucket, key, download_path)
resize_image(download_path, upload_path)
s3_client.upload_file(upload_path, bucket, 'resized-'+key)
11© 2017 Global Walkers,Inc.
Lambdaの設定
lambda_func.py
import cv2
import boto3
import os
import sys
s3_client = boto3.client('s3')
def resize_image(image_path, resized_path):
img=cv2.imread(image_path)
orgHeight, orgWidth = img.shape[:2]
size = (orgHeight/2, orgWidth/2)
img_s=cv2.resize(img, size)
cv2.imwrite(resized_path, img_s)
def handler(event, context):
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
download_path = '/tmp/'+key
upload_path = '/tmp/resized-{}'.format(key)
s3_client.download_file(bucket, key, download_path)
resize_image(download_path, upload_path)
s3_client.upload_file(upload_path, bucket, 'resized-'+key)
ロールにS3のアクセス権限を付与しておきましょう!
12© 2017 Global Walkers,Inc.
Lambdaの設定
128MBでも今回は動くはずですが、とりあえず192MBに設定
13© 2017 Global Walkers,Inc.
デプロイ
AWS CLIからもできるが、今回はAWSコンソールから
14© 2017 Global Walkers,Inc.
いよいよテスト
15© 2017 Global Walkers,Inc.
いよいよテスト
S3 Putを選択
画像ファイル名、ARNを設定
16© 2017 Global Walkers,Inc.
いよいよテスト
テスト結果画面
問題なく動きました!
17© 2017 Global Walkers,Inc.
いよいよテスト
S3上にファイルサイズが約1/4の縮小画像を生成、保存できました。
© 2017 Global Walkers,Inc.
最後に
GWゼミ #3: 2017年9月6日(水)
機械学習の基礎の続き
機械学習を用いた画像認識処理をAWS上で実行するために
GWゼミのグループにもご参加ください。
https://gwz.connpass.com
今後も勉強会を開催していきます
全てではないですが、発表資料を公開した際にグループ宛にメッセージを送信予定
18
© 2017 Global Walkers,Inc.
最後に
コンテンツ × テクノロジーに共感し、
一緒に作り上げていく仲間募集中!!!
(正社員、契約社員、請負い、インターンなど相談可)
19
20170823【GWゼミ #2】AWS Lambda上でOpenCVを使った画像処理

More Related Content

Similar to 20170823【GWゼミ #2】AWS Lambda上でOpenCVを使った画像処理

20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LTKohei KaiGai
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めようAdvancedTechNight
 
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編Daiyu Hatakeyama
 
ジャパネットQB GPars
ジャパネットQB GParsジャパネットQB GPars
ジャパネットQB GParsTakahiro Sugiura
 
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)Yaboo Oyabu
 
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料Toshimichi Suekane
 
[Cloud OnAir] Google Cloud Next '18 in London 最新情報 2018年10月18日 放送
[Cloud OnAir] Google Cloud Next '18 in London 最新情報 2018年10月18日 放送[Cloud OnAir] Google Cloud Next '18 in London 最新情報 2018年10月18日 放送
[Cloud OnAir] Google Cloud Next '18 in London 最新情報 2018年10月18日 放送Google Cloud Platform - Japan
 
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28Yuta Hono
 
GoogleCloudPlatform概要
GoogleCloudPlatform概要GoogleCloudPlatform概要
GoogleCloudPlatform概要Kumano Ryo
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8Kohei KaiGai
 
タイル地図がおもしろい
タイル地図がおもしろいタイル地図がおもしろい
タイル地図がおもしろいKohei Otsuka
 
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版Daiyu Hatakeyama
 
[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送
[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送
[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送Google Cloud Platform - Japan
 
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送Google Cloud Platform - Japan
 
Esj59 qgis handson-1
Esj59 qgis handson-1Esj59 qgis handson-1
Esj59 qgis handson-1OSgeo Japan
 
Mulvery@沖縄Ruby会議02
Mulvery@沖縄Ruby会議02Mulvery@沖縄Ruby会議02
Mulvery@沖縄Ruby会議02Daichi Teruya
 
Dart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dartDart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dart啓介 大橋
 
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介Hiromu Yakura
 

Similar to 20170823【GWゼミ #2】AWS Lambda上でOpenCVを使った画像処理 (20)

20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
 
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編
 
ジャパネットQB GPars
ジャパネットQB GParsジャパネットQB GPars
ジャパネットQB GPars
 
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
 
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
Retina対応 CSSスプライトを自動化しよう sprity版(東区フロントエンド勉強会 2015年 第2回) 補足資料
 
[Cloud OnAir] Google Cloud Next '18 in London 最新情報 2018年10月18日 放送
[Cloud OnAir] Google Cloud Next '18 in London 最新情報 2018年10月18日 放送[Cloud OnAir] Google Cloud Next '18 in London 最新情報 2018年10月18日 放送
[Cloud OnAir] Google Cloud Next '18 in London 最新情報 2018年10月18日 放送
 
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28
 
Gdg geo2
Gdg geo2Gdg geo2
Gdg geo2
 
GoogleCloudPlatform概要
GoogleCloudPlatform概要GoogleCloudPlatform概要
GoogleCloudPlatform概要
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
 
タイル地図がおもしろい
タイル地図がおもしろいタイル地図がおもしろい
タイル地図がおもしろい
 
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版
 
[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送
[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送
[Cloud OnAir] オンプレミスにあるデータを GCP で分析する前に知っておきたいアーキテクチャ 2019年5月30日 放送
 
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
 
RAPIDS 概要
RAPIDS 概要RAPIDS 概要
RAPIDS 概要
 
Esj59 qgis handson-1
Esj59 qgis handson-1Esj59 qgis handson-1
Esj59 qgis handson-1
 
Mulvery@沖縄Ruby会議02
Mulvery@沖縄Ruby会議02Mulvery@沖縄Ruby会議02
Mulvery@沖縄Ruby会議02
 
Dart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dartDart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dart
 
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介
 

20170823【GWゼミ #2】AWS Lambda上でOpenCVを使った画像処理

  • 1. 【GWゼミ #2】コンピュータビジョン+機械学習+AWS 勉強会 2/3 AWS LambdaでOpenCV © 2017 Global Walkers,Inc. 2017/08/23 0
  • 2. 1© 2017 Global Walkers,Inc. AWS連携カメラアプリの構成例
  • 3. 2© 2017 Global Walkers,Inc. 今回は 今回はこの部分。 LambdaでOpenCVを動かしてみました。
  • 6. 5© 2017 Global Walkers,Inc. 今回はLambdaを使ってみる Lambdaとは ・サーバーレスでプログラムをAWSクラウド上で実行してくれる ・対応言語: NodeJS, Java, Python, C# ・AWSクラウドのアクションをトリガーにしてプログラムを実行可能 ・S3へのファイルのアップロード時 ・DynamoDBのテーブル更新時 など ・AWS API gatewayを使って簡単にLambda関数を公開できる
  • 7. 6© 2017 Global Walkers,Inc. 今回はLambdaを使ってみる Lambdaとは ・メリット EC2が不要 使用頻度が低い場合、費用が安い ・デメリット 処理時間の上限が300秒 メモリに上限がある(最大で1536MB) 一時ディスク容量に上限がある(最大512MB) Lambda関数デプロイパッケージのサイズに上限がある(圧縮後50MB) → これが結構厳しい。OpenCVだけで・・・
  • 8. 7© 2017 Global Walkers,Inc. まずは準備 LambdaでOpenCV等のライブラリを使用するためには、それらを一つにまとめた zipを作成する必要がある。 まずは、Docker上でamazon linuxを動かす (http://qiita.com/mkisono/items/b2add04203f7b4a6da67を参考に) FROM amazonlinux:latestRUN yum update -yRUN yum install python27-devel python27-pip gcc gcc-c++ cmake git zip -yRUN yum install libjpeg-devel zlib-devel -yRUN pip install --upgrade pipRUN pip install virtualenv numpyENV HOME /home/lambda-pyRUN mkdir $HOMEWORKDIR $HOMERUN git clone https://github.com/opencv/opencv.gitWORKDIR $HOME/opencvWORKDIR $HOME/opencv/buildRUN cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_SHARED_LIBS=NO -D BUILD_opencv_python2=ON -D BUILD_opencv_calib3d=OFF -D BUILD_opencv_objdetect=OFF -D BUILD_opencv_ml=OFF -D BUILD_opencv_features2d=OFF -D BUILD_opencv_stitching=OFF -D BUILD_opencv_videostab=OFF -D BUILD_opencv_flann=OFF -D BUILD_opencv_superres=OFF -D BUILD_opencv_shape=OFF -D BUILD_opencv_ts=OFF -D BUILD_opencv_video=OFF -D BUILD_opencv_videoio=OFF -D CMAKE_INSTALL_PREFIX=/usr/local ..RUN make installWORKDIR $HOMERUN virtualenv $HOME/venv
  • 9. 問題発生 OpenCVのsoファイルが90MBくらいある!!! Lambdaの上限を超えてしまっている。とりあえずいろいろとOFFにしてみる。 → 下記で、再度コンパイル! cmake -D CMAKE_BUILD_TYPE=MinSizeRel -D BUILD_SHARED_LIBS=NO -D BUILD_opencv_python2=ON -D BUILD_CUDA_STUBS=OFF -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_JASPER=OFF -D BUILD_JPEG=ON -D BUILD_OPENEXR=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_PNG=OFF -D BUILD_TBB=OFF -D BUILD_TESTS=OFF -D BUILD_TIFF=OFF -D BUILD_WITH_DEBUG_INFO=OFF -D BUILD_ZLIB=OFF -D BUILD_WEBP=OFF -D BUILD_opencv_apps=OFF -D BUILD_opencv_calib3d=OFF -D BUILD_opencv_core=ON -D BUILD_opencv_cudaarithm=OFF -D BUILD_opencv_cudabgsegm=OFF -D BUILD_opencv_cudacodec=OFF -D BUILD_opencv_cudafeatures2d=OFF -D BUILD_opencv_cudafilters=OFF -D BUILD_opencv_cudaimgproc=OFF -D BUILD_opencv_cudalegacy=OFF -D BUILD_opencv_cudaobjdetect=OFF -D BUILD_opencv_cudaoptflow=OFF -D BUILD_opencv_cudastereo=OFF -D BUILD_opencv_cudawarping=OFF -D BUILD_opencv_cudev=OFF -D BUILD_opencv_features2d=ON -D BUILD_opencv_flann=OFF -D BUILD_opencv_hal=OFF -D BUILD_opencv_highgui=ON -D BUILD_opencv_imgcodecs=ON -D BUILD_opencv_imgproc=ON -D BUILD_opencv_java=OFF -D BUILD_opencv_ml=ON -D BUILD_opencv_objdetect=ON -D BUILD_opencv_photo=OFF -D BUILD_opencv_python3=OFF -D BUILD_opencv_shape=OFF -D BUILD_opencv_stitching=OFF -D BUILD_opencv_superres=OFF -D BUILD_opencv_ts=OFF -D BUILD_opencv_video=OFF -D BUILD_opencv_videoio=OFF -D BUILD_opencv_videostab=OFF -D BUILD_opencv_viz=OFF -D BUILD_opencv_world=OFF -D WITH_1394=OFF -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF -D WITH_CUFFT=OFF -D WITH_EIGEN=OFF -D WITH_FFMPEG=OFF -D WITH_GDAL=OFF -D WITH_GPHOTO2=OFF -D WITH_GIGEAPI=OFF -D WITH_GSTREAMER=OFF -D WITH_GTK=OFF -D WITH_INTELPERC=OFF -D WITH_IPP=OFF -D WITH_IPP_A=OFF -D WITH_JASPER=OFF -D WITH_JPEG=ON -D WITH_LIBV4L=OFF -D WITH_OPENCL=OFF -D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENEXR=OFF -D WITH_OPENGL=OFF -D WITH_OPENMP=OFF -D WITH_OPENNI=OFF -D WITH_PNG=OFF -D WITH_PTHREADS_PF=OFF -D WITH_PVAPI=OFF -D WITH_QT=OFF -D WITH_TBB=OFF -D WITH_TIFF=OFF -D WITH_UNICAP=OFF -D WITH_V4L=OFF -D WITH_VTK=OFF -D WITH_WEBP=OFF -D WITH_XIMEA=OFF -D WITH_XINE=OFF -D CMAKE_INSTALL_PREFIX=/usr/local .. 8© 2017 Global Walkers,Inc.
  • 10. 9© 2017 Global Walkers,Inc. デプロイパッケージを作成 bash-4.2# source $HOME/venv/bin/activate (venv) bash-4.2# pip install Pillow numpy (venv) bash-4.2# cp /usr/local/lib/python2.7/dist-packages/cv2.so ~/venv/lib/python2.7/site-packages/ (venv) bash-4.2# cd ~/venv/lib/python2.7/site-packages (venv) bash-4.2# zip -r9 ~/lambda_function.zip * 無事に50MB以内に収まりました J
  • 11. 10© 2017 Global Walkers,Inc. ソースコード: lamda_func.py import cv2 import boto3 import os import sys s3_client = boto3.client('s3') def resize_image(image_path, resized_path): img=cv2.imread(image_path) orgHeight, orgWidth = img.shape[:2] size = (orgHeight/2, orgWidth/2) img_s=cv2.resize(img, size) cv2.imwrite(resized_path, img_s) def handler(event, context): for record in event['Records']: bucket = record['s3']['bucket']['name'] key = record['s3']['object']['key'] download_path = '/tmp/'+key upload_path = '/tmp/resized-{}'.format(key) s3_client.download_file(bucket, key, download_path) resize_image(download_path, upload_path) s3_client.upload_file(upload_path, bucket, 'resized-'+key)
  • 12. 11© 2017 Global Walkers,Inc. Lambdaの設定 lambda_func.py import cv2 import boto3 import os import sys s3_client = boto3.client('s3') def resize_image(image_path, resized_path): img=cv2.imread(image_path) orgHeight, orgWidth = img.shape[:2] size = (orgHeight/2, orgWidth/2) img_s=cv2.resize(img, size) cv2.imwrite(resized_path, img_s) def handler(event, context): for record in event['Records']: bucket = record['s3']['bucket']['name'] key = record['s3']['object']['key'] download_path = '/tmp/'+key upload_path = '/tmp/resized-{}'.format(key) s3_client.download_file(bucket, key, download_path) resize_image(download_path, upload_path) s3_client.upload_file(upload_path, bucket, 'resized-'+key) ロールにS3のアクセス権限を付与しておきましょう!
  • 13. 12© 2017 Global Walkers,Inc. Lambdaの設定 128MBでも今回は動くはずですが、とりあえず192MBに設定
  • 14. 13© 2017 Global Walkers,Inc. デプロイ AWS CLIからもできるが、今回はAWSコンソールから
  • 15. 14© 2017 Global Walkers,Inc. いよいよテスト
  • 16. 15© 2017 Global Walkers,Inc. いよいよテスト S3 Putを選択 画像ファイル名、ARNを設定
  • 17. 16© 2017 Global Walkers,Inc. いよいよテスト テスト結果画面 問題なく動きました!
  • 18. 17© 2017 Global Walkers,Inc. いよいよテスト S3上にファイルサイズが約1/4の縮小画像を生成、保存できました。
  • 19. © 2017 Global Walkers,Inc. 最後に GWゼミ #3: 2017年9月6日(水) 機械学習の基礎の続き 機械学習を用いた画像認識処理をAWS上で実行するために GWゼミのグループにもご参加ください。 https://gwz.connpass.com 今後も勉強会を開催していきます 全てではないですが、発表資料を公開した際にグループ宛にメッセージを送信予定 18
  • 20. © 2017 Global Walkers,Inc. 最後に コンテンツ × テクノロジーに共感し、 一緒に作り上げていく仲間募集中!!! (正社員、契約社員、請負い、インターンなど相談可) 19