Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django+opencv3で処理しようとしたけど、EC2のインスタンスがオーバーヒート気味になった

概要

Django+opencv3で処理するコードを書いたけど、ElasticBeanstalkでEC2のインスタンスがオーバーヒート気味になった インスタンスタイプ: t2.small。 ちょっとメモリとかどれくらい必要とかも考えないといけないのかなぁ。。。そうなると確かにlambdaとか重要そうだよね。

やってみたこと

opencvで画像を読み込んで処理して保存するコードを書いてみたけど、画像をS3に預けていたので、一旦ホストPCにダウンロードして、処理して、再度S3にアップロードして、ホストPCの画像データは削除するという感じにしてみた。

def download_image(media_path, instance, owner_slug):
    filename = os.path.basename(media_path)
    basename, file_extension = filename.split(".")
    upper_file_extension = get_file_extension(file_extension)
    # 一旦S3のイメージをホストPCにダウンロードして保存する
    tmp_img = Image.open(storage.open(media_path))
    temp_loc = "static/media/tmp/%s/" %(owner_slug)
    if not os.path.exists(temp_loc):
        os.makedirs(temp_loc)
    temp_file_path = os.path.join(temp_loc, filename)
    if os.path.exists(temp_file_path):
        temp_path = os.path.join(temp_loc, "%s" %(random.random()))
        os.makedirs(temp_path)
        temp_file_path = os.path.join(temp_path, filename)
    tmp_img_open = open(temp_file_path, "wb")
    tmp_img.save(tmp_img_open, upper_file_extension)
    # ホストPCに保存した画像を読み込んで加工する
    scimage = cv2.imread(temp_file_path)
    color_img = 3 * scimage
    # thumb = Image.open(storage.open(media_path))## ここを変更
    # gray_img = thumb.convert('L')
    # gray_img.show() # 確認用
    temp_image = open(temp_file_path, "wb")
    io.imsave(temp_image, color_img)
    # gray_img.save(temp_image, upper_file_extension)# そのうちちょっと変える。
    thumb_data = open(temp_file_path, "rb")

    thumb_file = File(thumb_data)
    instance.image.save(filename, thumb_file)
    instance.save()

なんかlocalだと問題なく動くんだけど、EC2 t2.smallだとキャパオーバーやねぇ。。。