この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは植木和樹です。ゴールデウィークということで、普段仕事で使わない技術で遊んでみました。
Lambdaで画像処理したいなー、Pythonも覚えなきゃなーということで、手始めに手元のOSXで画像処理というものをやってみました。お題は「オリジナル画像を元にトレーディングカードを作ってみよう」です。
準備
なにぶんPython自体に詳しくないのですが、どうやらPythonで画像変換する時にはOpenCVというライブラリを使うことが多いようです。で、OpenCVを使うにはAnacondaという環境を使うのが手っ取り早いようです。AnacondaはPythonのディストリビューションの1つで、技術計算系のライブラリが最初から同梱されているみたいですね。
pyenvのインストール
OSXにAnacondaをいれるにはpyenvからビルドするのが良さそうです。pyenvはbrewでインストールできます。
$ brew install pyenv
$ cat >> ~/.zshrc
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
$ source ~/.zshrc
$ pyenv --version
pyenv 20160422
Anacondaのインストール
次にpyenvでAnacondaをインストールします。anaconda2がPython2.7系に対応しているようです。Lambdaが2.7系なのでこちらを選んでおきます。
$ pyenv install anaconda2-4.0.0
$ pyenv local anaconda2-4.0.0
$ pyenv rehash
$ python --version
Python 2.7.11 :: Anaconda 4.0.0 (x86_64)
OpenCVのインストール
anacondaにはcondaというコマンドで追加ライブラリをインストールできます。
$ conda install -c https://conda.anaconda.org/menpo opencv3
$ python -c 'import cv2; print cv2.__version__'
3.1.0
素材の用意
必要な素材は「カードのフレーム」と「元の画像」です。 カードのフレームはフリーの素材を利用させていただきました。感謝。
画像は強そうなものをチョイスしてみました。
コード
画像処理のコードは全然経験がないので、いくつかのサイトとOpenCVのマニュアルを頼りに試行錯誤しました。サンプルを見よう見真似で写しただけなので、ちゃんと理解できていないの悲しい。
- Lambdaを意識して指定したファイルをS3からダウンロードする
- 画像とフレームを読み込む
- 画像から適当に必要な部分をトリミングする
- サイズをカードに大きさにリサイズ
- フレームを元画像に重ねる
- できあがったカード画像を保存する
処理結果
勝てる気がしません。
集中線はこちらからお借りました。ありがとうございます。
まとめ
OpenCVを使って画像の処理ができました。手元でいろいろな画像を試してはカードにしてみたのですが、なかなかに楽しく時間が経つのを忘れてしましました。
さて、次はこのライブラリをLambdaで使えるようにしないといけないですが、これがやっかいなようです。 Lambdaでカスタムのコンテナーが使えれば楽なんですけどねぇ。