File: readme.md

Recommend this page to a friend!
  Classes of Nikos M.  >  HAAR PHP Face Detection Library  >  readme.md  >  Download  
File: readme.md
Role: Documentation
Content type: text/markdown
Description: Documentation
Class: HAAR PHP Face Detection Library
Detect faces that may be present in images
Author: By
Last change: v.1.0.2

* port some code from latest opencv
Date: 2 months ago
Size: 7,078 bytes
 

Contents

Class file image Download

HAARPHP

__Feature Detection Library for PHP__

Based on Viola-Jones Feature Detection Algorithm using Haar Cascades and improvement Viola-Jones-Lienhart et al Feature Detection Algorithm

This is a port of OpenCV C++ Haar Detection and of JViolaJones Java) to PHP.

there is also a javascript version: HAAR.js

screenshot

Contents

How to Use

You can use the __existing openCV cascades__ to build your detectors.

To do this just transform the __opencv xml file__ to PHP format using the __haartophp__ (php) tool (in cascades folder)

__examples:__

to use opencv's haarcascades_frontalface_alt.xml in php do:

haartophp haarcascades_frontalface_alt.xml > haarcascades_frontalface_alt.php

this creates a php file: haarcascades_frontalface_alt.php which you can include in your php application (see examples)

the variable to use in php is similarly: $haarcascades_frontalface_alt

Detector Methods

__constructor()__

new HaarDetector($haardata);

__Explanation of parameters__

  • `$haardata` : The actual haardata (as generated by `haartophp` tool), this is specific per feature, openCV haar data can be used.

__clearCache()__

$detector->clearCache();

Clear any cached image data and haardata in case space is an issue. Use image method and cascade method (see below) to re-set image and haar data

__cascade()__

$detector->cascade($haardata);

Allow to use same detector (with its cached image data), to detect different feature on same image, by using another cascade. This way any image pre-processing is done only once

__Explanation of parameters__

  • `$haardata` : The actual haardata (as generated by `haartophp` tool), this is specific per feature, openCV haar data can be used.

__image()__

$detector->image($GDImage, $scale = 1.0);

__Explanation of parameters__

  • `$GDImage` : an actual `GD` Image object.
  • `$scale` : The percent of scaling from the original image, so detection proceeds faster on a smaller image (default __1.0__ ). __NOTE__ scaling might alter the detection results sometimes, if having problems opt towards 1 (slower)

__selection()__

$detector->selection('auto'|array|feature|$x [,$y, $width, $height]);

Get/Set a custom region in the image to confine the detection process only in that region (eg detect nose while face already detected)

__Explanation of parameters__

  • `1st parameter` : This can be the string `'auto'` which sets the whole image as the selection, or an array ie: `array('x'=>10, 'y'=>'auto', 'width'=>100, 'height'=>'auto')` (every param set as `'auto'` will take the default image value) or a detection rectangle/feature, or a x coordinate (along with rest coordinates).
  • `$y` : (Optional) the selection start y coordinate, can be an actual value or `'auto'` (`$y=0`)
  • `$width` : (Optional) the selection width, can be an actual value or `'auto'` (`$width=image.width`)
  • `$height` : (Optional) the selection height, can be an actual value or `'auto'` (`$height=image.height`)

The actual selection rectangle/feature is available as $this->selection() or $detector->selection() with no parameters

__cannyThreshold()__

$detector->cannyThreshold(array('low'=> lowThreshold, 'high'=> highThreshold));

Set the thresholds when Canny Pruning is used, for extra fine-tuning. Canny Pruning detects the number/density of edges in a given region. A region with too few or too many edges is unlikely to be a feature. Default values work fine in most cases, however depending on image size and the specific feature, some fine tuning could be needed

__Explanation of parameters__

  • `low` : (Optional) The low threshold (default __20__ ).
  • `high` : (Optional) The high threshold (default __100__ ).

__detect()__

$detector->detect($baseScale = 1, $scale_inc = 1.25, $increment = 0.1, $min_neighbors = 1 , $epsilon = 0.2, $doCannyPruning = false);

__Explanation of parameters__ (JViolaJones Parameters)

  • `$baseScale` : The initial ratio between the window size and the Haar classifier size (default __1__ ).
  • `$scale_inc` : The scale increment of the window size, at each step (default __1.25__ ).
  • `$increment` : The shift of the window at each sub-step, in terms of percentage of the window size (default __0.1__ ).
  • `$min_neighbors` : The minimum numbers of similar rectangles needed for the region to be considered as a feature (avoid noise) (default __1__ )
  • `$epsilon` : Epsilon value that determines similarity between detected rectangles. `0` means identical (default __0.2__ )
  • `$doCannyPruning` : enable Canny Pruning to pre-detect regions unlikely to contain features, in order to speed up the execution (optional default __false__ ).

__Examples included with face detection__

Where to find Haar Cascades XML files to use for feature detection

TODO

  • [ ] keep up with the changes in openCV cascades xml format (will try)

ChangeLog

__1.0.2__ * port code from latest version of opencv

__1.0.1__ * inline detection routine for further speed * update test examples with many faces detection

__1.0.0__ * correct detection on custom selection * refactor code

__0.4__ * refactor code (make smaller) * add clearCache method, to delete any stored/cached image data in the detector (in case space is an issue) * add the tilted feature (Lienhart et al, extension) * make new haartophp tool, output format changed, __make sure to re-convert your .php haar cascades!!__ * tidy up the repo * fix some typos, edits

__0.3__ * add new methods (_selection_ , _cascade_ , _cannyThreshold_ ) * use fixed-point arithmetic if possible (eg gray-scale, canny computation) * optimize array indexing, remove unnecessary multiplications * reduce unnecessary loops, inline code instead of method calling for speed * rewrite _merge_ method (features might be slightly different now) * features are now generic classes not arrays * code refactor/fixes * update readme, add method documentation

__0.2__ * add haartophp tool in php (all-php solution) * optimize array operations, refactor, etc..

__0.1__ * initial release


For more information send a message to info at phpclasses dot org.