有一些关于如何创建自己的级联的步骤。
我的参考资料:
- 第一个参考 https://pythonprogramming.net/haar-cascade-object-detection-python-opencv-tutorial/
- 第二参考 https://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html
1- 数据收集
您需要正图像(这意味着包含要训练的对象)图像和负图像(图像中不存在您的对象)图像。根据人们的经验,正面图像的数量应该是负面图像的两倍
注意:根据我的经验和文档,800 张负片 - 1600 张正片图像通常会产生良好的结果。
2- 标签
对于每个正面图像,您应该创建标签文件,例如data.lst。该列表文件的每一行应包含:
- 图片名称
- 图像中物体的数量
- 拟合图像中每个对象的矩形坐标
这一步是痛苦的一步。来处理它opencv_创建样本 https://docs.opencv.org/2.4/doc/user_guide/ug_traincascade.html#opencv-createsamples-utility为您创建该列表文件。与自己准备相比,这效率不高,但也很有效。它只是使用负图像作为背景,并将正图像随机复制到该背景。然后创建一个列表文件。
你可以运行opencv_createsample
通过终端命令:
opencv_createsamples -img your_image.jpg -bg bg.txt -info info/info.lst
-png输出信息 -maxxangle 0.5 -maxyangle 0.5 -maxzangle 0.5 -num 1800
在上面的命令中,您给出并得到:
- 你的正面形象
- bg.txt 文件,其中包含负片图像的目录和名称
- info.lst 你想要获取的文件
- 旋转限制
- 您想要获取的图像数量
3-创建矢量文件
在此步骤中再次使用,opencv_createsample
命令我们获取正图像的矢量文件。这是命令示例:
opencv_createsamples -info info/info.lst -num 1800 -w 50 -h 50 -vec
正值向量
您只需提供准备好的列表文件、宽度-高度和所需的矢量文件名。您可以从文档中了解有关宽度和高度部分的更多信息。
4- 培训
这一步是最后一步。opencv_traincascade https://docs.opencv.org/2.4/doc/user_guide/ug_traincascade.html#opencv-createsamples-utility最后使用命令。我们给出作为输入:
- 正面图像的矢量文件
- 负片图像
- 负像和正像的数量
- 宽度和高度(如 pos 向量部分)
- 阶段数(迭代)
这是示例命令:
opencv_traincascade -data 数据 -vec Positives.vec -bg bg.txt -numPos
1800 -numNeg 900 -numStages 10 -w 50 -h 50
最后我们得到一个xml文件。
Note-1:OpenCV 3.4...版本有一个问题opencv_createsamples
,当我搜索时,人们都说有一个错误。我建议您使用不同的版本。