さくらVPSにOpenCVをインストールしてPythonから使う

OpenCV2.2をさくらVPS(CentOS 5.5)にインストールして、
PythonバインディングをWSGIアプリケーション(mod_wsgi)から使ってみます。

構築手順はOpenCV – 2.x – Tech Noteに書いておいたので参考までに。

OpenCV2.2からはNumPyを利用したPythonインタフェースを利用できるようになりました。
画像データを通常のNumPy配列(numpy.ndarray)として扱えるので大変便利です。

Pythonバインディング (NumPy利用)

すばらしいです。

WSGIアプリケーション(mod_wsgi)からの利用

せっかくサーバに入れたのでWebと仲良くさせてみます。
Flaskというフレームワークがモダンで便利らしいので試してみました。

Apache + mod_wsgi環境の構築は、
mod_wsgiのインストール – CentOSで環境構築 を参考にさせていただきました。

構成は以下の通り。

* Apache + mod_wsgi (Webサーバ/WSGI)
* Flask (Webアプリケーションフレームワーク)
* Jinja2 (テンプレートエンジン)
* Werkzeug (WSGIユーティリティライブラリ)
* OpenCV + NumPy (NumPyインタフェースはv2.2から)

フレームワーク自体ほとんど経験がないので心配でしたが、
公式サイトのチュートリアルを読んでいけばすぐに使えるようになりました。
それだけシンプルで使いやすいフレームワークだと思います。
まずは hello, world 的なものから試してみようと思い、
Cannyエッジ検出をするだけの簡単なデモを作りました。
(HTML5でテンプレートを書いてるのでブラウザが古い人は注意)


Test WSGI Application using OpenCV

実際、Cannyフィルタ程度ならJavaScript(Canvas)だけでも簡単にできるのですが、
今回はOpenCV+WSGIアプリのテストということで;;

WSGIアプリ(Flask)からOpenCVを使う流れとしては、
(画像処理のロジックはAPIをぺたぺた貼ればいいだけなので省略)

みたいな感じでURIを公開すればOKです。Flask素敵。
PythonのAPIは
OpenCV 2.2 Python リファレンス — opencv 2.2 documentation
に丁寧にまとめられています。
Pythonバインディングがあって嬉しいのは研究者よりもWeb屋なのでは?

また、クライアント側をFlashで作ってみても良いアプリケーションが作れそうです。
AS3オンリーであほみたいに画像処理しなくて済むのは個人的に嬉しいところ。
一応は簡単なサンプルをいくつか作っていたのですが、
最初はPyAMFを使ってデータのやりとりをしていました。
ただ、古い流儀のRPCなのでクライアント – サーバ間で合意事項が多くて美しくありません。
シンプルなURIのみを公開する方がキレイに作れると思います。(イマドキですし:p)
Flash + Flaskで何か作ったらまた公開します。

———-
* その他の参考サイト
PythonでWebアプリ開発入門のススメ Flask/MongoDB – mizchi log
mod_wsgi: WSGIDaemonProcess – Pyxis 開発ブログ

あわせて読む:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です