Python + OpenCVでオリジナルトレーディングカードを作ってみた
はじめに
こんにちは植木和樹です。ゴールデウィークということで、普段仕事で使わない技術で遊んでみました。
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でカスタムのコンテナーが使えれば楽なんですけどねぇ。