# ls ./neg/*.* > neg.txt
# opencv_createsamples -vec ./pos.vec -info pos.txt -bg ./neg.txt -w 100 -h 100 -num 338
# opencv_traincascade -data ./data -vec ./pos.vec -bg ./neg.txt -numPos 200 -minHitRate 0.95 -numNeg 208 -numStages 16 -precalcValbufSize 2048 -precalcdxBufSize 2048 -w 100 -h 100
# nohup opencv_traincascade -data ./data -vec ./pos.vec -bg ./neg.txt -numPos 200 -minHitRate 0.95 -numNeg 208 -numStages 16 -precalcValbufSize 2048 -precalcdxBufSize 2048 -w 100 -h 100 > log.txt 2>/dev/null &
# BACKGROUNG PROCESSING TIME 是负样本切割时间 很长很长
# N 为训练层数 %SMP 样本占总样本个数 ST.THR 阈值,HR 击中率, FA 虚警 EXP.ERR 经验错误率
# opencv_createsamples -vec ./pos.vec -info pos.txt -bg ./neg.txt -w 24 -h 24 -num 338 -maxxangle 0.1 -maxyangle 0.1 -maxzangle 0.1
# opencv_traincascade -mode ALL -data ./data -vec ./pos.vec -bg ./neg.txt -numPos 200 -minHitRate 0.95 -numNeg 208 -numStages 16 -precalcValbufSize 2048 -precalcdxBufSize 2048 -w 24 -h 24
# nohup opencv_traincascade -mode ALL -data ./data -vec ./pos.vec -bg ./neg.txt -numPos 200 -minHitRate 0.95 -numNeg 208 -numStages 16 -precalcValbufSize 2048 -precalcdxBufSize 2048 -w 24 -h 24 > log.txt 2>/dev/null &
# http://www.cnblogs.com/whowhoha/p/5623977.html
# http://answers.opencv.org/question/4368/traincascade-error-bad-argument-can-not-get-new-positive-sample-the-most-possible-reason-is-insufficient-count-of-samples-in-given-vec-file/#4474
# numPos+(numStages-1)*numPos*(1-minHitRate)= 338
训练得到模型,测试脚本
detector = cv2.CascadeClassifier("./model.xml")
img = cv2.resize(img, (self.scalewidth, self.scaleheight))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
rects = detector.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(50, 50))
加上dlib的correlation_tracker就可以实现对简单物体的实时跟踪。