{"id":106,"date":"2009-11-10T16:59:44","date_gmt":"2009-11-10T06:59:44","guid":{"rendered":"http:\/\/www.computer-vision-software.com\/blog\/?p=106"},"modified":"2009-11-30T13:01:11","modified_gmt":"2009-11-30T03:01:11","slug":"faq-opencv-haartraining","status":"publish","type":"post","link":"http:\/\/www.computer-vision-software.com\/blog\/2009\/11\/faq-opencv-haartraining\/","title":{"rendered":"FAQ: OpenCV Haartraining"},"content":{"rendered":"<p>Hi All, before posting your question, <span style=\"text-decoration: underline;\">please look at this FAQ<\/span><span style=\"text-decoration: underline;\"> carefully!<\/span> Also you can read <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.computer-vision-software.com\/blog\/2009\/06\/opencv-haartraining-detect-objects-using-haar-like-features\/');\" title=\"OpenCV Haartraining\"  href=\"http:\/\/www.computer-vision-software.com\/blog\/2009\/06\/opencv-haartraining-detect-objects-using-haar-like-features\/\" target=\"_blank\">OpenCV haartraining article<\/a>.\u00a0 If you are sure, there is no answer to your question, feel free to post comment.\u00a0 Also please, put comments about improvement of this post.\u00a0 This post will be updated, if needed.<\/p>\n<h1><!--more--><\/h1>\n<h2 style=\"text-align: left;\"><em><span style=\"color: #ff9900;\">Positive images<\/span><\/em><\/h2>\n<p><em><span style=\"color: #ff9900;\"><br \/>\n<\/span><\/em><\/p>\n<h3><em>Why positive images are named so?<\/em><\/h3>\n<p>Because a positive image contains the target object which you want machine to detect. Unlike them, a negative image doesn&#8217;t contain such target objects.<\/p>\n<h3><em>What&#8217;s vec file in OpenCV haartraining?<\/em><\/h3>\n<p>During haartraining positive samples should have the same width and height as you define in command &#8220;-w -h size&#8221;.\u00a0 So original positive images are resized\u00a0 and packed as thumbs to vec file. Vec file has header: number of positive samples, width, height and contain positive thumbs in body.<\/p>\n<h3><em><em>Is it possible to merge vec files?<\/em><\/em><\/h3>\n<p>Yes, use Google, there are free tools, written by OpenCV&#8217;s community.<\/p>\n<h3><em>I have\u00a0 positive images, how create vec file of positive samples?<\/em><\/h3>\n<p>There is tool in C:\\Program Files\\OpenCV\\apps\\HaarTraining\\src createsamples.cpp.\u00a0 Usage:<\/p>\n<p>createsamples -info positive_description.txt -vec samples.vec -w 20 -h 20<\/p>\n<h3><em>What&#8217;s positive description file?<\/em><\/h3>\n<p>The matter is that, on each positive image, there can be several objects. They have bounding rectangles: x,y, width, height.\u00a0 So you can write such description info of image:<\/p>\n<p>positive_image_name\u00a0 num_of_objects x y width height x y width height &#8230;<\/p>\n<p>Text file, which contains such info about positive images is called description file. So during vec file generation,\u00a0 <span style=\"text-decoration: underline;\">really objects are packed<\/span>, but not whole image. Essentially vec file is needed to speed up machine learning.<\/p>\n<h3><em>Do I always need description file, even if I have only one object on a image?<\/em><\/h3>\n<p>Yes, with createsamples you need description file.\u00a0 If you have only one object, it&#8217;s bounding rectangle may be bounding rectangle of whole image. If you want, write your own tool for vec file generation =)<\/p>\n<h3><em>Should lightning conditions and background be various on positive images?<\/em><\/h3>\n<p><span style=\"text-decoration: underline;\">Yes, it&#8217;s very important<\/span>. On each positive image, beside object, there is background. Try to fill this background with random noise, avoid constant background.<\/p>\n<h3><em>How much background should be on positive image?<\/em><\/h3>\n<p>If you have much background pixels on your positive images in comparison with object&#8217;s pixels &#8211; it&#8217;s bad since the haartraining could remember the background as feature of positive image.<\/p>\n<p>If you don&#8217;t have background pixels at all &#8211; it&#8217;s also bad. There should be small background frame on positive image<\/p>\n<h3><em>Should all original positive images have the same size?<\/em><\/h3>\n<p>No, original images can have any size.\u00a0 But it&#8217;s important that width, height of this rectangle have the same aspect ratio as -w -h.<\/p>\n<h3><em><em>What&#8217; s\u00a0 -w and -h should I put in createsamples? Should it be always square? <\/em><\/em><\/h3>\n<p>You can put any value to -w and -h depend on aspect ratio of the target object which you want to detect.\u00a0 <span style=\"text-decoration: underline;\">But objects of smaller size will not be detected<\/span>! For faces, commonly used values are 24&#215;24, 20&#215;20. But you may use 24&#215;20, 20&#215;24, etc.<\/p>\n<h3><em>Errors during vec file generation: <\/em>Incorrect size of input array, 0 kb vec file,<\/h3>\n<p>-First check you description file: positive_image_name should be <span style=\"text-decoration: underline;\">absolute path name<\/span> without spaces like &#8220;C:\\content\\image.jpg&#8221; not &#8220;C:\\con tent\\image.jpg&#8221; or <span style=\"text-decoration: underline;\">relative path name<\/span>.<\/p>\n<p>-Avoid empty lines in description file<\/p>\n<p>-Resolution of original positive image file should be not less, then -w -h parameters you put.<\/p>\n<p>-Check that positive images are available in your file systems and not corrupted.<\/p>\n<p>-There can be unsupported formats. Jpeg, Bmp, PPM are supported!<\/p>\n<h3><em>Example of vec file generation!<\/em><\/h3>\n<p>Let&#8217;s working directory be C:\\haartraining. In it there is createsamples.exe. There is folder<\/p>\n<p>C:\\haartraining\\positives. So create description file positive_desc.txt.<\/p>\n<p>positives\\image1.jpg 1 10 10 20 20<\/p>\n<p>positives\\image2.jpg 2 30 30 50 50 60 60 70 70<\/p>\n<p>or<\/p>\n<p>C:\\haartraining\\positives\\image1.jpg 1 10 10 20 20<\/p>\n<p>C:\\haartraining\\positives\\image2.jpg 2 30 30 50 50 60 60 70 70<\/p>\n<p>You should avoid empty lines and empty space in image&#8217;s path<\/p>\n<p><span style=\"color: #0000ff;\">createsamples<span style=\"color: #000000;\"> -info positive_desc.txt -vec samples.vec -w 20 -h 20<\/span><\/span><\/p>\n<h2 style=\"text-align: left;\"><span style=\"color: #ffffff;\"><em><strong><br \/>\n<\/strong><\/em><\/span><\/h2>\n<h2 style=\"text-align: left;\"><em><span style=\"color: #ff9900;\"><strong>Negative images<\/strong><\/span><\/em><\/h2>\n<p><em><span style=\"color: #ff9900;\"><strong><br \/>\n<\/strong><\/span><\/em><\/p>\n<h3><em>What negative images should I take?<\/em><\/h3>\n<p>You can use any image of OpenCV supported formats, which does not contain target objects (which are present on positive images). But they <span style=\"text-decoration: underline;\">should be various<\/span> &#8211; it&#8217;s important! Good enough database is <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/tutorial-haartraining.googlecode.com\/svn\/trunk\/data\/negatives\/');\"  href=\" \t  http:\/\/tutorial-haartraining.googlecode.com\/svn\/trunk\/data\/negatives\/\">here<\/a><\/p>\n<h3><em>Should negative images have the same size?<\/em><\/h3>\n<p>No. But the size should not be less than -w -h, which were put during vec file generation.<\/p>\n<h3><em>What&#8217;s description file for negative image? <\/em><\/h3>\n<p>It&#8217;s just text file, often called negative.dat, which contains full path to negative images like:<\/p>\n<p>image_name1.jpg<\/p>\n<p>image_name2.jpg<\/p>\n<p>Avoid empty lines in it.<\/p>\n<h3><em>How many negative\/positive image should I take?<\/em><\/h3>\n<p>It depends on your task.\u00a0 For real cascades there should be about 1000 positive images and 2000 negative images e.g.<\/p>\n<p>Good enough proportion is\u00a0 positive:negative = 1:2, but it&#8217;s not hard rule! I would recommend first to use small number of samples, generate cascade, test it, then enlarge number of samples.<\/p>\n<h2 style=\"text-align: left;\"><span style=\"color: #ff9900;\"><em><strong>Launch haartraining.exe (OpenCV\\apps\\HaarTraining\\src<\/strong><\/em><\/span><em><strong><em><span style=\"color: #ff9900;\"><strong><span style=\"color: #ff9900;\">)<\/span><\/strong><\/span><\/em><\/strong><\/em><\/h2>\n<p><em><strong><em><span style=\"color: #ff9900;\"><strong><span style=\"color: #ff9900;\"><br \/>\n<\/span><\/strong><\/span><\/em><\/strong><\/em><\/p>\n<h3><em><em>Example of launching<\/em><\/em><\/h3>\n<p>Working directory is C:\\haartraining with haartraining.exe tool and samples.vec file.<\/p>\n<p>Let&#8217;s negative images are in C:\\haartraining\\negative, in this case negative.dat should be like this:<\/p>\n<p>negative\\neg1.jpg<\/p>\n<p>negative\\neg2.jpg<\/p>\n<p>&#8230;<\/p>\n<p>So in C:\\haartraining launch this:\u00a0 <span style=\"color: #0000ff;\">haartraining<\/span> -data haarcascade -vec samples.vec -bg negatives.dat -nstages 20\u00a0 -minhitrate 0.999 -maxfalsealarm 0.5 -npos 1000 -nneg 2000 -w 20 -h 20 -nonsym -mem 1024<\/p>\n<ul>\n<li><span style=\"color: #000000;\">w\u00a0 h\u00a0 is the same, you put during vec file generation<\/span><\/li>\n<li><span style=\"color: #000000;\">npos nneg\u00a0 &#8211; number of positive samples and negative samples<\/span><\/li>\n<li><span style=\"color: #000000;\">mem &#8211; RAM memory, that program may use<\/span><\/li>\n<li><span style=\"color: #000000;\">maxfalsealarm &#8211; maximum false alarm, that stage may have. If big false alarm &#8211; it could be bad detection system<br \/>\n<\/span><\/li>\n<li><span style=\"color: #000000;\">minhitrate &#8211; minimal hit rate, that should stage have at least<br \/>\n<\/span><\/li>\n<li><span style=\"color: #000000;\">nstage &#8211; number of stages in cascade<\/span><\/li>\n<\/ul>\n<h3><em>What&#8217; s falsealarm and hitrate of stage?<\/em><\/h3>\n<p>You should read theory of adaboost about strong classifier. Stage is <span style=\"text-decoration: underline;\">strong classifier<\/span>. In short:<\/p>\n<ul>\n<li>For example you have 1000 positive samples. You want your system to detect 900 of them. So desired hitrate = 900\/1000 = 0.9. <span style=\"text-decoration: underline;\">Commonly, put minhitrate = 0.999<\/span><\/li>\n<li>For example you have 1000 negative samples. Because it&#8217;s negative, you don&#8217;t want your system to detect them. But your system, because it has error, will detect some of them. Let error be about 490 samples, so false alarm = 490\/1000 = 0.49. <span style=\"text-decoration: underline;\">Commonly,put false alarm\u00a0 = 0.5<\/span><\/li>\n<\/ul>\n<h3><em>Are falsealarm and hitrate depend on each other?<\/em><\/h3>\n<p>Yes, <span style=\"color: #000000;\">there is <\/span><span style=\"text-decoration: underline;\">dependency<\/span>. You could not put <span style=\"color: #000000;\">minhitrate = 1.0 and <\/span><span style=\"color: #000000;\">maxfalsealarm = 0.0. <\/span>.<\/p>\n<p>Firstly, the system builds classifier with desired hitrate, then it will calculate it&#8217;s falsealarm, if the false alarm is higher than maxfalsealarm, the system will reject such classifier and will build the next one. During haartraining you may see such:<\/p>\n<p style=\"padding-left: 60px;\">N |%SMP|F| ST.THR | HR | FA | EXP. ERR|<br \/>\n+\u2014-+\u2014-+-+\u2014\u2014\u2014+\u2014\u2014\u2014+\u2014\u2014\u2014+\u2014\u2014\u2014+<br \/>\n| 0 |25%|-|-1423.312590| 1.000000| 1.000000| 0.876272|<\/p>\n<p style=\"padding-left: 60px;\">HR &#8211; hitrate<\/p>\n<p style=\"padding-left: 60px;\">FA &#8211; falsealarm<\/p>\n<h3><em>What&#8217;s falsealarm and hitrate of whole cascade?<\/em><\/h3>\n<p>Cascade is linked list (or three) of stages. That&#8217;s why:<\/p>\n<ul>\n<li>False alarm of cascade = false alarm of\u00a0 stage 1* false alarm of\u00a0 stage 2* &#8230;<\/li>\n<li>Hit rate = hitrate of\u00a0 stage 1 * hitrate of stage 2* &#8230;<\/li>\n<\/ul>\n<h3><em>How many stages should be used?<\/em><\/h3>\n<ul>\n<li>If you set big number of stages, then you will achieve better false alarm, but it will take more time for generating cascade.<\/li>\n<li>If you set big number of stages, then the detection time could be slower<\/li>\n<li>If you set big number of stages, then the worse hitrate will be (0.99*0.99*&#8230; etc). <span style=\"text-decoration: underline;\">Commonly 14-25 stages are enough<\/span><\/li>\n<li>It&#8217;s useless to set many stage, if you have small number of positive, negative samples<\/li>\n<\/ul>\n<h3><em>What&#8217;s weighttrimming, eqw, bt, nonsym options?<\/em><\/h3>\n<p>Really all these parameters are related to <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Adaboost');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Adaboost\">Adaboost<\/a>, read theory. In short:<\/p>\n<ul>\n<li>nonsym &#8211; If you positive samples are not X or Y symmetric, put -nonsym, -sym is default!<\/li>\n<li>eqw &#8211; if you have different number of pos and neg images, it&#8217;s better to put no eqw<\/li>\n<li>weighttrimming &#8211; for calculation optimization. It can reduce calculation time a little, but quality may be worse<\/li>\n<li>bt &#8211; what Adaboost algorithm to use: Real AB, Gentle AB, etc.<\/li>\n<\/ul>\n<h3><em>What&#8217;s\u00a0 minpos, nsplits, maxtreesplits options?<\/em><\/h3>\n<p>These parameters are related to clustering. In Adaboost different week classifier may be used: <span style=\"text-decoration: underline;\">stump-based<\/span> or <span style=\"text-decoration: underline;\">tree-based<\/span>.\u00a0 If you choose nsplits &gt; 0, tree-based will be used and you should set up minpos and maxtreesplits.<\/p>\n<ul>\n<li>nsplits &#8211; minimun number of nodes in tree<\/li>\n<li>maxtreesplits &#8211; maximum number of nodes in tree. If maxtreesplits &lt; nsplits,\u00a0 tree will not be built<\/li>\n<li>minpos &#8211; number of positive images, that can be used by one node during training.\u00a0 All positive images are splitted between nodes. Generally minpos\u00a0 should be not less than\u00a0 npos\/nsplits.<\/li>\n<\/ul>\n<h3><em>Errors and stranges during haartraining!<\/em><\/h3>\n<ul>\n<li>Error (valid only for Discrete and Real AdaBoost): misclass &#8211; it&#8217;s warning, but no error.\u00a0 Some options are specific to D and R Adaboost.\u00a0 So your haartraining is ok.<\/li>\n<li>Screen is filled with such | 1000 |25%|-|-1423.312590| 1.000000| 1.000000| 0.876272| &#8211; your training is cycled, restart it. First column should have value &lt; 100<\/li>\n<li>cvAlloc fails. Our of memory &#8211; you give too much negative images or sample.vec is too big. All these pictures are loaded to RAM.<\/li>\n<li>Pay attention you put the same -w and -h, as during vec file generation<\/li>\n<li>Pay attention, that number of positive samples and negative samples, you put in -npos -nneg are really available<\/li>\n<li>Avoid empty line in negative.dat file<\/li>\n<li>Required leaf false alarm rate achieved. Branch training terminated &#8211; it&#8217;s impossible to build classifier with good false alarm on this negative images. Check your negative images are really negative =),\u00a0 maxfalsealarm should be in [0.4-0.5]<\/li>\n<\/ul>\n<h2 style=\"text-align: left;\"><span style=\"color: #ff9900;\"><em><strong>OpenCV XML haarcascade<\/strong><\/em><\/span><\/h2>\n<p><span style=\"color: #ff9900;\"><em><strong><br \/>\n<\/strong><\/em><\/span><\/p>\n<h3><em>During haartraining, there are txt file in haarcascade folder, how can we get XML\u00a0 from them?<\/em><\/h3>\n<p>There is OpenCV\/samples\/c\/convert_cascade.c. Use like:<\/p>\n<p><span style=\"color: #0000ff;\">convert_cascade<\/span> &#8211;size=&#8221;20&#215;20&#8243; haarcascade haarcascade.xml<\/p>\n<h3><em>How can I test generated XML cascade?<br \/>\n<\/em><\/h3>\n<p style=\"text-align: left;\"><span style=\"color: #ff9900;\"><em><strong>\u00a0<\/strong><\/em><\/span><span style=\"color: #ff9900;\"><span style=\"color: #000000;\">There is <\/span><\/span>OpenCv\/apps\/HaarTraining\/src<strong><span style=\"color: #ff9900;\"><strong><span style=\"color: #000000;\"> <\/span><\/strong><\/span><\/strong>\/perfomance.cpp. You need have positive images(not used during training) and positive description file.\u00a0 Use like:<\/p>\n<p><span style=\"color: #0000ff;\">performance<\/span> -data haarcascade -w 20 -h 20 -info positive_description.txt -ni<\/p>\n<p><span style=\"color: #0000ff;\">performance <\/span>-data haarcascade.xml -info positive_description.txt -ni<\/p>\n<h2 style=\"text-align: left;\"><span style=\"color: #ff9900;\"><em><strong><em><strong>Time and Speed of haar cascade generation<\/strong><\/em><\/strong><\/em><\/span><\/h2>\n<p><span style=\"color: #ff9900;\"><em><strong><em><strong><br \/>\n<\/strong><\/em><\/strong><\/em><\/span><\/p>\n<h3><em>Average time to generate cascade on PC?<\/em><\/h3>\n<p>It depends on task and your machine.\u00a0 I generated cascade for face detection, for this used such parameters: -nstages 20 -minhitrate 0.999 -maxfalsealarm 0.5 -npos 4000 -nneg 5000 -w 20 -h 20 -nonsym -mem 1024.\u00a0 It took <span style=\"color: #ff0000;\">6 days<\/span> on Pentium 2.7GHZ 2GB RAM.<\/p>\n<h3><em>What is <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/OpenMP');\"  href=\"http:\/\/en.wikipedia.org\/wiki\/OpenMP\">OpenMP<\/a>?<\/em><\/h3>\n<p>&#8220;<em>The <strong>OpenMP<\/strong> (Open Multi-Processing) is an <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Application_programming_interface');\" title=\"Application programming interface\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Application_programming_interface\">application programming interface<\/a> (API) that supports multi-platform <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Shared_memory');\" title=\"Shared memory\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Shared_memory\">shared memory<\/a> <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Multiprocessing');\" title=\"Multiprocessing\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Multiprocessing\">multiprocessing<\/a> programming in <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/C_%28programming_language%29');\" title=\"C (programming language)\"  href=\"http:\/\/en.wikipedia.org\/wiki\/C_%28programming_language%29\">C<\/a>, <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/C%2B%2B');\" title=\"C++\"  href=\"http:\/\/en.wikipedia.org\/wiki\/C%2B%2B\">C++<\/a> and <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Fortran');\" title=\"Fortran\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Fortran\">Fortran<\/a> on many architectures, including <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Unix');\" title=\"Unix\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Unix\">Unix<\/a> and <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Microsoft_Windows');\" title=\"Microsoft Windows\"  href=\"http:\/\/en.wikipedia.org\/wiki\/Microsoft_Windows\">Microsoft Windows<\/a> platforms<\/em>&#8220;. If you have MT processor, you can use it.\u00a0 In code you should add OpenMP defines and put compile options.\u00a0 For example in VisualStudio2005: Properties-&gt;C\/C++-&gt;Language-&gt;OpenMP support<\/p>\n<h3><em>Is it possible to improve speed of haartraining?<\/em><\/h3>\n<p>Yes, one of possible ways is to use parallel programming. We have realized OpenCV haartraining using MPI for linux cluster. You can read it <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.computer-vision-software.com\/blog\/2009\/06\/parallel-world-of-opencv\/');\"  href=\"http:\/\/www.computer-vision-software.com\/blog\/2009\/06\/parallel-world-of-opencv\/\">here<\/a><\/p>\n<h2><span style=\"color: #ff9900;\"><em><strong>Object detection with OpenCV XML cascades<\/strong><\/em><\/span><\/h2>\n<p><span style=\"color: #ff9900;\"><em><strong><br \/>\n<\/strong><\/em><\/span><\/p>\n<h3><em>Is it possible to detect rotated faces?<\/em><\/h3>\n<p>Yes. It is impossible to generate cascade, which can detect face in all orientations. But you can generate cascade for each orientation separately. For this you need positive content of rotated faces. You can try to generate cascade with OpenCV , add -mode ALL, with it tilted haar feature will be used. But it&#8217;s badly implemented, at least in OpenCV 1.1. If you want you can add your own feature to opencv haartraining &#8211; it&#8217;s not too hard.<\/p>\n<p>Another approach is to write head pose estimator. Then rotate your pictures, so that you have frontal face and detect it with OpenCV default face cascade<\/p>\n<h3><em>Is it possible to recognize gender, attention, race with\u00a0 Haar features?<\/em><\/h3>\n<p>We tried, but could not do it with OpenCV haartraining. That&#8217;s why for such classification, we used our own <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.computer-vision-software.com\/blog\/2009\/07\/gender-detection\/');\"  href=\"http:\/\/www.computer-vision-software.com\/blog\/2009\/07\/gender-detection\/\" target=\"_blank\">gender <\/a>and <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.computer-vision-software.com\/blog\/2009\/11\/detect-attention-please\/');\"  href=\"http:\/\/www.computer-vision-software.com\/blog\/2009\/11\/detect-attention-please\/\">attention<\/a> classificators. Of course you can use Adaboost for this task, which is implemented in haartraining, but we did not get good results.<\/p>\n<h3><em>Is it possible to detect faces in real time?<\/em><\/h3>\n<p>Yes.\u00a0 On PC default OpenCV facedetector takes about 200 ms for 640&#215;480 picture, about 5fps &#8211; it&#8217;s not real time. We have changed facedetector and get about 15 fps &#8211; which is real time. You can see results\u00a0 <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.computer-vision-software.com\/blog\/2009\/06\/fastfurious-face-detection-with-opencv\/');\"  href=\"http:\/\/www.computer-vision-software.com\/blog\/2009\/06\/fastfurious-face-detection-with-opencv\/\" target=\"_blank\">here<\/a> and <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.computer-vision-software.com\/blog\/2009\/10\/audience-measurement-face-tracker-gender-recognition-attention-recognition-etc\/');\"  href=\"http:\/\/www.computer-vision-software.com\/blog\/2009\/10\/audience-measurement-face-tracker-gender-recognition-attention-recognition-etc\/\" target=\"_blank\">here<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi All, before posting your question, please look at this FAQ carefully! Also you can read OpenCV haartraining article.\u00a0 If you are sure, there is no answer to your question, feel free to post comment.\u00a0 Also please, put comments about improvement of this post.\u00a0 This post will be updated, if needed.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[84],"tags":[29,31,49,44,6,48,30],"class_list":["post-106","post","type-post","status-publish","format-standard","hentry","category-opencv","tag-face-detection","tag-haar","tag-haartraining","tag-object-detection","tag-opencv","tag-openmp","tag-viola-jones"],"_links":{"self":[{"href":"http:\/\/www.computer-vision-software.com\/blog\/wp-json\/wp\/v2\/posts\/106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.computer-vision-software.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.computer-vision-software.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.computer-vision-software.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.computer-vision-software.com\/blog\/wp-json\/wp\/v2\/comments?post=106"}],"version-history":[{"count":0,"href":"http:\/\/www.computer-vision-software.com\/blog\/wp-json\/wp\/v2\/posts\/106\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.computer-vision-software.com\/blog\/wp-json\/wp\/v2\/media?parent=106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.computer-vision-software.com\/blog\/wp-json\/wp\/v2\/categories?post=106"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.computer-vision-software.com\/blog\/wp-json\/wp\/v2\/tags?post=106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}