LoginSignup
5
7

More than 3 years have passed since last update.

AWS Lambda で opencvを動かす (python3, S3)

Last updated at Posted at 2019-08-19

python2.7のやり方はのっていたけど、python3.6がなかったのでメモしておきます。

概要と注意点

opencv重いので、S3バケットにzipでアップロードしたものを使用する。
その際に、zipの中に、lambda_function.pyを入れておく。
S3にアップロードされたzipは、AWSコンソール上では編集できないです。

手順

・その1: Amazon Linuxを立てる

Lambdaで動かすには、ファイル構造をAmazon Linux仕様にしなければならないようです。
よって、Amazon Linuxを立ててください!!!

・その2: lambda_fanction.py を書く

書いてください。
【注意点】
- importは以下のように、numpy→cv2の順で記入してください。
- lambda_function.py という名前で
- def lambda_handler とう関数の中に書いてください

lambda_function.py
import boto3
import numpy as np
import cv2

s3 = boto3.resource('s3')

def lambda_handler(event, context):
        bucket = s3.Bucket(S3のバケット名)
        bucket.download_file(S3にある画像, /tmp/S3にある画像名) #これで、Lambdaのtmpにダウンロード

        print('-----cv2-----')
        image_path = '/tmp/ダウンロードされた画像 #2行上の /tmp/S3にある画像名 と同じ '
        img = cv2.imread(image_path)
        cv2.imwrite('/tmp/image.jpeg',img)
        print('/tmpのls: ', subprocess.run(["ls", "-l", "/tmp"], stdout=subprocess.PIPE))
        bucket.upload_file('/tmp/image.jpeg', 'image.jpeg')
        print('complete upload')
        print('-------------')

・その3: 必要なモジュールを -t でpipインストールする

requirements.txtがあればそれを使っても構いません。
lambda_function.pyがあるディレクトリで、モジュールたちが並列になるようにインストールします。
pip3 install opencv-python -t .

【注意点】
- lambda_function.pyがあるディレクトリで行なってください
- 今回動かすlambdaの環境がpython3なので、opencvのインストールもpytho3の環境で行なってください

・その4: まとめてzipする。

zip -r lambda-package.zip *
これでlambda-package.zipという名前でzipされます。

・その5: S3にアップロードする

zipをアップロードします。

・その6: lambdaから読み込む

関数コードを Amazon S3からのファイルのアップロード にし、ランタイムはPython3.6を選びます。
そして、リンクURLに、その5でアップロードしたURLを記入します。
スクリーンショット 2019-08-19 17.07.22.png
保存をおしたら完成です。

5
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7