How to train an image classifier

Based on the OpenCV Book. p.513 Learning New Objects

1. Positive Images

The input. Camera input produces consistent images. Overfit?

Getting the rectangles

* http://stackoverflow.com/questions/36296763/drawing-as-input-for-hit-on-amazon-mechnical-turk
* https://vision.princeton.edu/pvt/DrawMe/


Do we need to have the rectangles all with same size?
The bottle should be only vertical?

shot a video wtih cheese, copied webm to working directory
Using ffmpeg to convert video to frames https://trac.ffmpeg.org/wiki/Create%20a%20thumbnail%20image%20every%20X%20seconds%20of%20the%20video

Convert video to frames
mkdir video
    ffmpeg -i yourvideo.webm -vf fps=5 video/frame%04d.jpg

Or take pictures with the webcam
Convert the positive.idx into a VEC file:
NB: here you need to set a width and height for the normalized detection size
(so like in doing this, you are basically setting the aspect ratio of the detector -- ie it will be able to detect objects at various sizes, but always in the ratio of width to height determined here)

    opencv_createsamples -vec saski.vec -info saski.idx -w 10 -h 30

    
Show the samples ... 
So here you can scale the size to be larger (but width and height need to be in the same ratio... so for instance you can add a 0 to scale up by 10)



Training command
opencv_haartraining -data bottle_classifier -vec saski.vec -w 23 -h 73 -bg non-saski.idx -nstages 20 -nsplits 1 -minhitrate 0.998 -maxfalsealarm 0.5


ERRORS
when the -w and -h mismatch (from creating the vec file to training with it)
what():  /build/opencv-FWWjHr/opencv-2.4.9.1+dfsg/apps/haartraining/cvhaartraining.cpp:1936: error: (-2) Vec file sample size mismatch in function icvGetHaarTrainingDataFromVec

References 
Eigenfaces:
http://cognitrn.psych.indiana.edu/nsfgrant/FaceMachine/faceMachine.html

Performance
Simulating decision trees
Questionnaire with simple questions.

BUILDING OPENCV with Multiprocessor support

Download the source ( http://opencv.org/downloads.html )

get prereqs
*sudo apt-get install build-essential
*sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
*sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

unzip the folder
*cd opencv-2.4.13
*mkdir build
*cd build
*cmake  -D WITH_OPENMP=ON ..

(actually after a compile error that seemed due to conflict with by built in ffmpeg, I used)
*cmake  -D WITH_OPENMP=ON -D WITH_FFMPEG=0 ..

then
*make

Command that got stuck building stage 3...
*opencv_traincascade -data test_cascade -vec test.vec -w 23 -h 73 -bg non.bottle.idx -nstages 5 -nsplits 1 -minhitrate 0.998 -maxfalsealarm 0.5 -numPos 3


Tutorials
https://www.youtube.com/watch?v=jG3bu0tjFbk&index=17&list=PLQVvvaa0QuDdttJXlLtAJxJetJcqmqlQq