PHPを使用して写真の人物を識別する方法

顔検出は、ソーシャルネットワーク、フォトエディター、ビデオチャット、スマートキャプチャ、タイムトラッキングプログラムで使用されます。この機能のアプリケーションは他にもたくさんあります。

画像



オプション番号1



優れた顔検出ソリューション-PHPのFaceDetectorはOpenCVを使用します。 FaceDetectorは、さまざまな肌のトーン、低品質の写真、多数の顔、眼鏡をかけた人でも安定して動作します。



作業アルゴリズム


ここでの顔認識は、Viola-Jonesメソッド、Haarカスケード(長方形プリミティブ)、およびAdaBoost学習アルゴリズムに基づいています。 プリミティブ-サイズの異なる白と黒の長方形-が画像に重ねられ、その後、画像との畳み込みが読み取られます。 Haarカスケードの使用に関する詳細については、 こちらこちらをご覧ください



FaceDetectorをインストールする


まず、パッケージをインストールする必要があります。



sudo apt-get install pkg-config python libjpeg62-dev libpng12-dev libtiff4-dev php-pear
      
      





OpenCVをインストールします。



 sudo apt-get install libopencv-dev
      
      





インストールライブラリ:



 pecl install facedetect
      
      





php.iniに以下があることを確認してください:



 extension=facedetect.so
      
      





申込み


FaceDetectorには2つの主要な関数があります: face_countface_detectは、それぞれ顔を数えて決定します。 haarcascade_frontalface_alt.xmlファイル/ usr / share / opencv / haarcascades / haarcascade_frontalface_alt.xmlからプロジェクトフォルダーに移動する必要あります。



コード例-ピンクの正方形で面を円で囲みます:



 <?php function LoadJpeg($imgname) { $im = @imagecreatefromjpeg($imgname); if (!$im) { $im = imagecreate(150, 30); $bgc = imagecolorallocate($im, 255, 255, 255); $tc = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 150, 30, $bgc); imagestring($im, 1, 5, 5, "Error loading $imgname", $tc); } return $im; } $total= face_count($_GET['file'],'haarcascade_frontalface_alt.xml'); $ord= face_detect($_GET['file'],'haarcascade_frontalface_alt.xml'); $im = LoadJpeg($_GET['file']); $pink = imagecolorallocate($im, 255, 105, 180); if(count($ord) > 0) { foreach ($ord as $arr) { imagerectangle($im,$arr['x'] ,$arr['y'] , $arr['x']+$arr['w'], $arr['y']+$arr['h'], $pink); } } header('Content-Type: image/jpeg'); imagejpeg($im); imagedestroy($im); ?>
      
      







画像



オプション番号2



OpenCVを使用しないオプション。 PHP FaceDetectionライブラリは、写真で1つの顔のみを検出します。 使用するには、 PHPスクリプトをダウンロードしてコードに貼り付ける必要があります。



コードの使用例-1つの面を緑の四角で囲みます:



 <?php include "FaceDetector.php"; $face_detect = new Face_Detector('detection.dat'); $face_detect->face_detect('sample.jpg'); $face_detect->toJpeg(); $json = $face_detect->toJson(); $array = $face_detect->getFace(); ?>
      
      





顔を見つけて、 cropFace()関数を使用してすぐにカットできます:



 <?php include "FaceDetector.php"; $face_detect = new Face_Detector('detection.dat'); $face_detect->face_detect('sample.jpg'); $face_detect->cropFace(); ?>
      
      







オプション番号3



OpenCVに基づく別のライブラリ 。 顔を検出するためのPythonスクリプト。

まず、必要なすべてのパッケージ(Python、Python OpenCV、OpenCVデータファイル)をダウンロードしてインストールする必要があります。



 sudo apt-get install python python-opencv libopencv-dev
      
      





FaceDetectライブラリをインストールします。



 sudo cp facedetect /usr/local/bin
      
      





写真に顔の存在を確認します。 人がいる場合は0を返し、ない場合は2を返します。



 exec('./facedetect -q path/to/image.jpg'); echo exec('echo $?');
      
      





PHPでFaceDetectライブラリを使用する例:



 //    ob_start(); passthru('/usr/local/bin/facedetect path/to/image.jpg'); $data = ob_get_clean(); echo $data; //   ,     test.jpg exec('/usr/local/bin/facedetect -o test.jpg path/to/image.jpg');
      
      





入り口には画像image.jpgがあり、出力には顔が正方形でハイライトされた画像test.jpgがあります。

画像



この方法で顔を決定することができます 。 このアルゴリズムは、多くの顔の写真でも良好な結果を示します。 時にはそれは驚くべきものを与えますが。 たとえば、 ここで彼はサミュエルL.ジャクソンと2つの顔を識別しました。 そして、これはパメラ・アンダーソンの2つの顔です。



PS:そして、はい-関数はcatsを認識しません



アブストラクト



  1. PHPで顔を検出するための3つのライブラリ:OpenCVのPHPスクリプト、PHP FaceDetection、およびPython FaceDetectスクリプト。
  2. OpenCVのFaceDetectorライブラリは、Haarカスケードを使用します。
  3. PHP FaceDetectionは、写真で顔を1つだけ見つけることができます。
  4. こちらでpython-script FaceDetectの動作を試すことができます



All Articles