<?php
/**
* test a directory, when scan the dir, first get all the image files.
* second generate a face crop image for every image file.
*/
use svay\FaceDetector;
use svay\FaceCapture;
require_once('FaceDetector.php');
require_once('FaceCapture.php');
require_once('Exception/NoFaceException.php');
set_time_limit(0);
//loop dir to get all the files.
function getAllFiles($dir)
{
if (!is_dir($dir)) {
return false;
}
$files = [];
readFiles($dir, $files);
// var_dump($files);
return $files;
}
function readFiles($dir, &$files, $imageFileType = ['bmp','jpg','jpeg','gif','png'])
{
$handle = opendir($dir);
while (($file = readdir($handle)) !== false) {
if ($file == '.' || $file == '..')
continue;
$filePath = $dir == '.'? $file : $dir.DIRECTORY_SEPARATOR.$file;
if (is_link($filePath)) {
contiune;
} else if (is_dir($filePath)) {
readFiles($filePath, $files);
} else {
$fileType = pathinfo($dir.'/'.$file)['extension'];
if (!in_array($fileType, $imageFileType)) {
continue;
}
if (strpos($file, '_cropface')===false) {
$files[] = $dir.DIRECTORY_SEPARATOR.$file;
}
}
}
closedir($handle);
}
$files = [];
//test directory
$dir = 'OperaHouse';
$listFiles = getAllFiles($dir);
foreach($listFiles as $key => $file)
{
try{
$detector = new FaceCapture('detection.dat');
$detector->faceDetect($file);
$pathInfo = pathinfo($file);
$tempFile = $pathInfo['dirname'].DIRECTORY_SEPARATOR.$pathInfo['filename'].'_fullface.'.$pathInfo['extension'];
$detector->cropFullFace($tempFile , 1.9);
$faceWidth = 300;
$faceHeight = 400;
$newFile = $pathInfo['dirname'] .DIRECTORY_SEPARATOR. $pathInfo['filename'] . '_cropface.'.$pathInfo['extension'];
$detector->createDefinedSizeFace($newFile, $faceWidth, $faceHeight);
echo "generate crop face file ". htmlentities($newFile)." successfully<br>";
//delete temp file.
unlink($tempFile);
} catch(Exception $e) {
echo htmlentities($file) ." has exception, the detail is ". htmlentities($e->getMessage())."<br>";
}
}
?>
|