git clone https://github.com/opencv/opencv github.com/opencv/opencv
cd github.com/opencv
# 创建项目目录
mkdir -p Xcode.prj-4.1.2
cd xcode.prj-4.1.2
cmake ../opencv -G "Xcode"
使用XCode打开xcode.prj-4.1.2/OpenCV.xcodeproj 项目编译完成后发现项目target中并没有有opencv_createsamples、opencv_traincascade这两个target。
激活以上两个target,打开 opencv/apps/CMakeLists.txt ,找到以下两行,删除前面的“#”号。
#ocv_add_app(traincascade)
#ocv_add_app(createsamples)
激活后使用 cmake 更新项目,这次生成的项目target里已经有了opencv_createsamples、opencv_traincascade这两个target,继续编译,编译发现这连个target中的代码已过时,先吐口血。
使用一下命令切换到2.4版本继续尝试编译。
git checkout -b mybranch origin/2.4
刚开始以为QTKit是QT路径未找到的 但是确认开启了QT支持后发现仍然发现不能编译成功。继而查到QTKit是Mac下已经废弃
的QTKit.framework,查到的资料都是拷贝未升级的系统中的QTKit.framework,考虑到时间耽搁,最终决定不编译objectactive-c,移除源文件cap.cpp、cap—qtkit.mm的依赖。
为了能快速训练,验证能否成功,只用2个正样本,4个负样本,使用下面的命令进行训练
./opencv_createsamples -vec pos.vec -info pos.txt -bg neg.txt -w 50 -h 50
./opencv_traincascade -data xml -vec pos.vec -bg neg.txt -numPos 2 -numNeg 4 -numStages 10 -w 50 -h 50 -mode ALL
failed1 : 样本太少
Cascade classifier can’t be trained. Check the used training parameters.
然后,将样本各拷贝几份,使用下面的命令再次进行训练。
./opencv_createsamples -vec pos.vec -info pos.txt -bg neg.txt -w 50 -h 50
./opencv_traincascade -data xml -vec pos.vec -bg neg.txt -numPos 12 -numNeg 16 -numStages 10 -w 50 -h 50 -mode ALL
Succ : 训练成功
Train dataset for temp stage can not be filled. Branch training terminated.
xml目录下的 cascade.xml 就是本次训练的成功模型。