OpenCV の PHP バインディングを書いてみた
3/24追記: 最新版はこちらです => http://d.hatena.ne.jp/moriyoshi/20070324/1174687182
http://voltex.jp/downloads/opencv-php-0.0pre.tar.gz
まだ完成にはほど遠いけど、顔認識くらいはできるようになってます。
インストール方法
PHP の開発パッケージが必要です。適宜 RPM なり deb なりをインストールしてください。ソースからインストールした方は大丈夫です。
% tar xvfz opencv-php-0.0pre.tar.gz % cd opencv-php-0.0pre % ./configure % make # make install
あと php.ini を書き換えて extension= を追加しましょう。
extension=opencv.so
とりあえず試したい方は php スクリプトの実行時に下記のように指定することもできます。
% php -dextension=opencv.so
サンプルコード
顔と認識された部分にオレンジで枠を描画します。
GD との連携ができてないので、別個に同じ画像を読む必要がある。ここは改善の余地ありだなあ。
haarcascade_frontalface_alt.xml は OpenCV のプロジェクトページ から落とせるソースアーカイブの data/ ディレクトリに入っています。
<?php $im = cv_image_load('test.jpg'); $haar = cv_object_load('haarcascade_frontalface_alt.xml'); $seq = cv_haar_classifier_cascade_detect_objects($haar, $im); $rects = array(); for ($i = 0, $l = cv_rect_seq_count($seq); $i < $l; $i++) { $rects[] = cv_rect_seq_get($seq, $i); } $im = ImageCreateFromJpeg('test.jpg'); $orange = imagecolorallocate($im, 255, 192, 0); foreach ($rects as $rect) { ImageRectangle($im, $rect['x'], $rect['y'], $rect['x'] + $rect['w'], $rect['y'] + $rect['h'], $orange); } ImageJpeg($im, 'out.jpg'); ?>
追記
これって日曜日あたりから作ってたんだけども。12時間位の差で二番煎じとなってしまったようでした。ひろかわさんという方 (PHP コミッタの廣川さんとは別人です、ねんのため) も同様の挑戦をしていますね。