Submit Search
Upload
20170823【GWゼミ #2】AWS Lambda上でOpenCVを使った画像処理
•
2 likes
•
1,240 views
Mirai Higuchi
Follow
グローバルウォーカーズ株式会社が主催する勉強会「GWゼミ」第2回の発表資料です。AWS Lambda上でOpenCVを動作させる手順を解説。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 21
Download now
Download to read offline
Recommended
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
智啓 出川
GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)
智啓 出川
Anaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみた
Yosuke Onoue
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
智啓 出川
[GTCJ2018] Optimizing Deep Learning with Chainer PFN得居誠也
[GTCJ2018] Optimizing Deep Learning with Chainer PFN得居誠也
Preferred Networks
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
智啓 出川
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
智啓 出川
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)
智啓 出川
Recommended
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
智啓 出川
GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)
智啓 出川
Anaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみた
Yosuke Onoue
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
智啓 出川
[GTCJ2018] Optimizing Deep Learning with Chainer PFN得居誠也
[GTCJ2018] Optimizing Deep Learning with Chainer PFN得居誠也
Preferred Networks
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
智啓 出川
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
智啓 出川
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)
智啓 出川
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
Kohei KaiGai
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
AdvancedTechNight
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編
Daiyu Hatakeyama
ジャパネットQB GPars
ジャパネットQB GPars
Takahiro Sugiura
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
Yaboo Oyabu
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日 放送
Google Cloud Platform - Japan
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28
Yuta Hono
Gdg geo2
Gdg geo2
Kentaro Ishimaru
GoogleCloudPlatform概要
GoogleCloudPlatform概要
Kumano Ryo
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
Kohei KaiGai
タイル地図がおもしろい
タイル地図がおもしろい
Kohei Otsuka
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日 放送
Google Cloud Platform - Japan
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
Google Cloud Platform - Japan
RAPIDS 概要
RAPIDS 概要
NVIDIA Japan
Esj59 qgis handson-1
Esj59 qgis handson-1
OSgeo Japan
Mulvery@沖縄Ruby会議02
Mulvery@沖縄Ruby会議02
Daichi Teruya
Dart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dart
啓介 大橋
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介
Hiromu Yakura
More Related Content
Similar to 20170823【GWゼミ #2】AWS Lambda上でOpenCVを使った画像処理
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
Kohei KaiGai
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
AdvancedTechNight
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編
Daiyu Hatakeyama
ジャパネットQB GPars
ジャパネットQB GPars
Takahiro Sugiura
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
Yaboo Oyabu
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日 放送
Google Cloud Platform - Japan
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28
Yuta Hono
Gdg geo2
Gdg geo2
Kentaro Ishimaru
GoogleCloudPlatform概要
GoogleCloudPlatform概要
Kumano Ryo
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
Kohei KaiGai
タイル地図がおもしろい
タイル地図がおもしろい
Kohei Otsuka
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日 放送
Google Cloud Platform - Japan
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
Google Cloud Platform - Japan
RAPIDS 概要
RAPIDS 概要
NVIDIA Japan
Esj59 qgis handson-1
Esj59 qgis handson-1
OSgeo Japan
Mulvery@沖縄Ruby会議02
Mulvery@沖縄Ruby会議02
Daichi Teruya
Dart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dart
啓介 大橋
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介
Hiromu Yakura
Similar to 20170823【GWゼミ #2】AWS Lambda上でOpenCVを使った画像処理
(20)
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編
ジャパネットQB GPars
ジャパネットQB GPars
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
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日 放送
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28
Apache Airflow で作る GCP のデータパイプライン @ 酔いどれGCPUG 2017/11/28
Gdg geo2
Gdg geo2
GoogleCloudPlatform概要
GoogleCloudPlatform概要
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
タイル地図がおもしろい
タイル地図がおもしろい
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] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
RAPIDS 概要
RAPIDS 概要
Esj59 qgis handson-1
Esj59 qgis handson-1
Mulvery@沖縄Ruby会議02
Mulvery@沖縄Ruby会議02
Dart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dart
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を動かしてみました。
4.
3 コンピュータビジョン・機械学習の活用 システム構成例1 スマートフォン ・領収書エリアの特定 ・文字領域の推定 ・文字の読み取り © 2017
Global Walkers,Inc. 学習用画像データ (事前に収集) 事前に学習 領収書認識
5.
4 画像をクラウドサーバに送信 クラウドサーバー ・ユーザ管理 ・画像データの蓄積 ・領収書エリアの特定 ・文字領域の学習、推定 ・文字の学習、読み取り スマートフォン ・サーバ連携 © 2017 Global
Walkers,Inc. 学習用画像データ 学習 データの蓄積 コンピュータビジョン・機械学習の活用 システム構成例2 サーバ連携領収書認識
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
Download now