スパイスラボ神部です。
このところテキストネタエントリばかりだったので久々にコードネタで。
今までもっぱら C++ から制御していた OpenCV ですが、PHP の拡張機能(バインディング?)として OpenCV を制御する関数を書いてくださっている方がいましたので、こちらを実際に利用するまでの流れを簡単にまとめておきたいとおもいます。
まず下ごしらえとしてはこちらのエントリ。
-PHPで顔検出の続き ネットに花を咲かせましょう。 会社作りました。
pecl-gen -f face_detect.xmlcd face_detect
phpize
./configure
make
make install
おー、すごい。このやりかた(codegen -> phpize という流れ?)は優秀ですね!XML の内部に直接 C++ のコードを書いてしまうことで、簡単に拡張機能が作れてしまう。これはちょっとエポックメイキングに感じますが、良くある手法なのでしょうか? Mozilla 系プロダクトもこういう感じのソース埋め込みしているのあったりするのかなど、ちょっと気になります。
※pecl-gen を使うには pear install -a codegen_pecl
※phpize を使うには yum install php-devel
php.ini の設定はこちらが詳しい。
-OpenCV の PHP バインディングを書いてみた - font-family: monospace
extension=opencv.so
※今回の場合は次のような感じかも。
extension=face_detect.so
もし、今回はcodegen を使う必要がありましたが、そちらや phpize の入れ方はPHPで顔検出の続き ネットに花を咲かせましょう。 会社作りました。やCases and Materials:yumでsqliteのインストールなどに書かれています。
それはさておき、いざコンパイルとなると厳しすぎるバージョンチェックのため動かない時があります。そんなときはこちらを参考に必要箇所を差し替えてみましょう。
つまり例えば、
#if PHP_VERSION_ID < 40000
を
#if PHP_MAJOR_VERSION < 4
に直すなど。
これをやる必要があるのは、configure ファイルと config.m4 の両方だったりするので要注意です。PHP 5.1 以降でもコンパイル失敗します(参考:実例で学ぶPHP拡張モジュールの作り方:第3回 WEBカメラから画像をキャプチャ|gihyo.jp … 技術評論社)
まあ、そんなところでしょうか。とりあえず顔の検出くらいなら、元の記事に書かれているごく短いサンプルコードを書くだけで、ちゃんと配列に検出された顔の位置や大きさを返してくれます。エラーもなくなかなかよい感じに動いてくれています。PHP で値をこねくり回せるとなると、ますます手軽にいろいろなことができそうですね。
関連記事


