PHP Classes

HAAR PHP Image Feature Detection Library: Detect features (e.g faces) in images

Recommend this page to a friend!
  Info   View files Documentation   Screenshots Screenshots   View files View files (12)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Ratings Unique User Downloads Download Rankings
Not yet rated by the usersTotal: 253 All time: 7,802 This week: 393Up
Version License PHP version Categories
haarphp 1.0.3Artistic License5PHP 5, Graphics, Artificial intelligence
Description Author

This package can be used to detect features (e.g. faces) that may be present in images

It provides a PHP implementation of feature detection methods based on Haar Cascades using Viola-Jones-Lienhart et al Algorithm.

The package can take a PHP GD image handle and process the image to detect features like shapes of objects that the image may contain.


I need a PHP class for face matching
Solution to match faces from uploaded pictures

Picture of Nikos M.
Name: Nikos M. is available for providing paid consulting. Contact Nikos M. .
Classes: 14 packages by
Country: Greece Greece
Age: 45
All time rank: 100210 in Greece Greece
Week rank: 895 Up6 in Greece Greece Up
Innovation award
Innovation award
Nominee: 5x

Winner: 1x



__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



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)


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


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.



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



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.


$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)


$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


$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__ ).


$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


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


__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

  • example-screenshot.png
  Files folder image Files  
File Role Description
Files folder imagecascades (5 files)
Files folder imageexamples (5 files)
Files folder imagesrc (1 file)
Accessible without login Plain text file Doc. Documentation

  Files folder image Files  /  cascades  
File Role Description
  Accessible without login Plain text file haarcascade_frontalface_alt.php Aux. Auxiliary script
  Accessible without login Plain text file haarcascade_frontalface_alt.xml Data Auxiliary data
  Accessible without login Plain text file haartophp.bat Data Auxiliary data
  Plain text file haartophp.php Class Class source
  Accessible without login Plain text file Data Auxiliary data

  Files folder image Files  /  examples  
File Role Description
  Accessible without login Plain text file css.css Data Auxiliary data
  Accessible without login Plain text file feature_detection.php Example Example script
  Accessible without login Plain text file index.php Aux. Auxiliary script
  Accessible without login Image file manyfaces.jpg Icon Icon image
  Accessible without login Image file modelface.jpg Icon Icon image

  Files folder image Files  /  src  
File Role Description
  Plain text file HaarDetector.php Class Class source

 Version Control Unique User Downloads Download Rankings  
This week:0
All time:7,802
This week:393Up
For more information send a message to info at phpclasses dot org.