Python + OpenCVでオリジナルトレーディングカードを作ってみた

2016.04.29

はじめに

こんにちは植木和樹です。ゴールデウィークということで、普段仕事で使わない技術で遊んでみました。

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からダウンロードする
  • 画像とフレームを読み込む
  • 画像から適当に必要な部分をトリミングする
  • サイズをカードに大きさにリサイズ
  • フレームを元画像に重ねる
  • できあがったカード画像を保存する

処理結果

card01

勝てる気がしません。

集中線はこちらからお借りました。ありがとうございます。

まとめ

OpenCVを使って画像の処理ができました。手元でいろいろな画像を試してはカードにしてみたのですが、なかなかに楽しく時間が経つのを忘れてしましました。

さて、次はこのライブラリをLambdaで使えるようにしないといけないですが、これがやっかいなようです。 Lambdaでカスタムのコンテナーが使えれば楽なんですけどねぇ。

参考資料