LoginSignup
43
44

More than 5 years have passed since last update.

PHPで顔認識したい

Last updated at Posted at 2015-03-19

PHPで顔認識したい

PHPで顔認識するという若干ニッチな要望が某案件であったりします。

こんなのがあるのでこれをインストールしに行きます。

OpenCVのインストール

facedetectをインストールするにあたってOpenCVが必要になります。

yumでもあったりはするんですがバージョンが古くてfacedetectをインストールできません。

なので仕方なくソースからインストール・・・。

これの通りやれば行けなくはないんですが、groupinstallが邪魔・・・。

[root@localhost source]# wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.11/opencv-2.4.11.zip
[root@localhost source]# unzip opencv-2.4.11.zip
[root@localhost source]# cd opencv-2.4.11
*cmakeが必要なのでない場合はyumからインストール
[root@localhost opencv-2.4.11]# cmake .
# こける

cmakeで失敗します

必要なパッケージをインストール

[root@localhost opencv-2.4.11]# yum install gtk2-devel
#groupinstallから必要なパッケージを探したらこれだけだった・・・
[root@localhost opencv-2.4.11]# yum install gcc-c++

さーコンパイルのお時間でございます

[root@localhost opencv-2.4.11]# cmake .
# OK
[root@localhost opencv-2.4.11]# make
# OK
[root@localhost opencv-2.4.11]# make install
#OK !

でけた!

facedetectのインストール

facedetectも実はepelにパッケージがあったりするんですがPHPのバージョン縛りがやたら厳しいので入れるのは難しい可能性ががが・・・。

(私が試したときはremiのPHPバージョン5.5.22、epelにあるfacedetectの必要バージョン5.5.21・・・。)

ということでしゃーないので公式のとおりソースから

[root@localhost source]# wget https://github.com/infusion/PHP-Facedetect/archive/master.zip
[root@localhost source]# unzip master.zip
[root@localhost source]# cd PHP-Facedetect-master/
[root@localhost PHP-Facedetect-master]# phpize && ./configure && make && make install
[root@localhost PHP-Facedetect-master]# vi /etc/php.d/facedetect.ini
[root@localhost PHP-Facedetect-master]# cat /etc/php.d/facedetect.ini
extension=facedetect.so
#でけた

動かしてみる

<?php 
//haarcascade_frontalface_alt2.xmlはopencvのソース/data/haarcascades/内のファイルを持ってきています
$fDtc = face_detect('test.jpg','haarcascade_frontalface_alt2.xml');

//顔認識したものをベースに抽出
foreach ($fDtc as $i => $fDtcv){
    $im = new Imagick('test.jpg');
    $im_width = $im->getImageWidth();
    $im_height = $im->getImageHeight();

    //右と下のカット
    $im->chopImage($im_width,$im_height,$fDtcv['w'] + $fDtcv['x'],$fDtcv['h'] + $fDtcv['y']);
    //左上のカット
    $im->chopImage($fDtcv['x'],$fDtcv['y'],0,0);

    //画像の書き出し
    $im->writeImage('test2.jpg');
    $im->destroy();
}
  • これが・・・

test.jpg

  • こんな感じ!

test2.jpg

43
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
44