HAAR.js
                                
                                
                                
                                    HAAR.js copied to clipboard
                            
                            
                            
                        Feature Detection based on Haar Cascades in JavaScript (Viola-Jones-Lienhart et al Algorithm)
HAAR.js
Note: Further development has moved to the FILTER.js project, for Image Processing and Computer Vision, which includes a new HaarDetector plugin which can be seen as the continuation of this project.
Feature Detection Library for JavaScript (uses HTML5 canvas on browser and Canvas package on Node)
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 JavaScript.
there is also a php version: HAARPHP
Light-weight (~10kB minified, ~5kB gzipped).
see also:
- Abacus advanced Combinatorics and Algebraic Number Theory Symbolic Computation library for JavaScript, Python
 - Plot.js simple and small library which can plot graphs of functions and various simple charts and can render to Canvas, SVG and plain HTML
 - HAAR.js image feature detection based on Haar Cascades in JavaScript (Viola-Jones-Lienhart et al Algorithm)
 - HAARPHP image feature detection based on Haar Cascades in PHP (Viola-Jones-Lienhart et al Algorithm)
 - FILTER.js video and image processing and computer vision Library in pure JavaScript (browser and node)
 - Xpresion a simple and flexible eXpression parser engine (with custom functions and variables support), based on GrammarTemplate, for PHP, JavaScript, Python
 - Regex Analyzer/Composer Regular Expression Analyzer and Composer for PHP, JavaScript, Python
 - GrammarTemplate grammar-based templating for PHP, JavaScript, Python
 - codemirror-grammar transform a formal grammar in JSON format into a syntax-highlight parser for CodeMirror editor
 - ace-grammar transform a formal grammar in JSON format into a syntax-highlight parser for ACE editor
 - prism-grammar transform a formal grammar in JSON format into a syntax-highlighter for Prism code highlighter
 - highlightjs-grammar transform a formal grammar in JSON format into a syntax-highlight mode for Highlight.js code highlighter
 - syntaxhighlighter-grammar transform a formal grammar in JSON format to a highlight brush for SyntaxHighlighter code highlighter
 - SortingAlgorithms implementations of Sorting Algorithms in JavaScript
 - PatternMatchingAlgorithms implementations of Pattern Matching Algorithms in JavaScript
 
Contents
- Live Playground Examples
 - How to Use
 - API Reference
 - Haar Cascades
 - Usage Ideas
 - Todo
 - Changelog
 - Credits
 
Live Examples
How To use
You can use the existing openCV cascades to build your detectors.
To do this just transform the opencv xml file to javascript or json format using the haartojs (php) tool (in cascades folder)
examples:
to use opencv's haarcascades_frontalface_alt.xml in javascript do:
haartojs haarcascades_frontalface_alt.xml > haarcascades_frontalface_alt.js
this creates a javascript file: haarcascades_frontalface_alt.js which you can include in your html file or node file
the variable to use in javascript is similarly
haarcascades_frontalface_alt  (both in browser and node)
to transform a cascade xml file to json format do:
haartojson haarcascades_frontalface_alt.xml > haarcascades_frontalface_alt.json
The structure of the .js and .json formats is exactly the same, so you can interchange between the two freely
HAAR.js works both in the browser and in Node.js (supporting parallel computations with Parallel.js)
NOTE HAAR.js (0.4.4+) (and the generated cascades) support umd-style generic loading capability for: commonjs / node , amd , browsers script tags
Runing inside the browser
Loading wth script tags You can run the example face.html or mouth.html inside your browser
Running inside node
For running, the package have a dependency on canvas You can find an example inside examples/nodes.js Valid Output
node examples/node.js 
processing the picture
[{"x":102.5,"y":105.5,"width":160.66666666666666,"height":160.66666666666666}]
To work properly, canvas need some system depencencies. You can find instruction on https://github.com/LearnBoost/node-canvas/wiki For example for Ubuntu :
sudo apt-get install libcairo2-dev libjpeg8-dev libpango1.0-dev libgif-dev
Loading with requirejs
As a third option, you can load the library with requireJS, both on the browser on with node. There is an example of loading with RequireJS inside node in examples/require.js. The configuration would be the same inside a browser
Supporting parallel computation
The parallel.js library is included in this repository, see the face.html example for how to use. In most cases using parallel computation (if supported) can be much faster (eg eye.html example)
Where to find Haar Cascades xml files to use for feature detection
- OpenCV
 - This resource
 - search the web :)
 - Train your own with a little extra help here and here
 - A haarcascade for eyes contributed by Mar Canet demo here
 
Usage Ideas
- SmileDetectJS
 - ObjectDetect (some common ideas with HAAR.js are used with extra functionality like object tracking)
 
TODO
- [x] optimize detector for real-time usage on browsers (eg. -> https://github.com/liuliu/ccv) [DONE use parallel.js]
 - [x] add selection option, detection is confined to that selection (eg detect nose while face already detected) [DONE]
 - [x] check if some operations can use fixed-point arithmetic, or other micro-optimizations [DONE where applicable]
 - [ ] keep up with the changes in openCV cascades xml format (will try)
 



