Rest Term

Thrift + OpenCV

Pocket

Thriftを利用してOpenCVの関数をスクリプトから呼んでみます。
といってもRPCで繋げるだけで特別なことをする必要はありません。

ここでは、画像の各チャンネルの平均値と標準偏差を求めてみます。
サーバ側でOpenCVの cvAvgSvd() を利用すればOK。

まず、最初にRPCのインタフェースをThrift IDLに書きます。
ここでは、平均と標準偏差を求める関数を2つ作ることにしました。
各チャンネルの値が欲しいので戻り値は list<double> に、
引数は画像ファイル名を指定したいので string にしておきます。

* cv.thrift (サービス名は CV)

* thriftコマンドでコード生成

サーバ側の実装ではC++で普通にOpenCVを使って書けばOKです。
(今回の場合は gen-cpp/CV_server.skeleton.cpp というファイルを編集する)
メソッドの引数にだけ注意しておきます。
ここではコードを一部省略しますが、実際はドメインロジック以外自動生成されます。
ソケットを作って接続を待ったり、データ構造をシリアライズしたりといった面倒な部分は、
全てThriftが引き受けてくれるので安心です。

* サーバ側 CV_server.skeleton.cpp (C++)

* コンパイル

次はクライアント側を実装します。
* クライアント側 cv.pl (Perl)


* サーバの起動およびクライアントの実行

上手くいきました。
次はPHPから。抽象化レイヤのおかげでPHPでも簡単に使えます。
* クライアント側 cv.php (PHP)

* 出力結果

詳細は省きますが、Rubyでもシンタックスを変えるだけで利用できます。

今回はThriftを使って各言語から簡単にOpenCVを利用できることを確認しました。

それはともかくOpenCV 2.0 のリリースが Sept. 31, 2009 って書いてありましたが、
また便利な機能が追加されてるんですかね。楽しみです。

あわせて読む:

Pocket

 

Tags: , , ,

Comments

No comments so far.

  • Leave a Reply
     
    Your gravatar
    Your Name