如何为自定义对象检测创建自己的 Haar 级联分类器?
How to create your own Haar Cascade Classifier for custom object detection?
我想检测汽车,但可用的 xml 文件不够准确 detection.How 我可以创建一个自定义 xml 文件(我可以为任何对象创建该文件)?
如有任何帮助,我们将不胜感激。
有一些关于如何创建您自己的级联的步骤。
我的参考资料:
1-数据收集
您需要正片(这意味着包括您要训练的对象)图像和负片(您的对象不存在于图像中)图像。根据人们的经验,正面图像的数量应该是负面图像的两倍
注意:根据我的经验和文档,800 张负片 - 1600 张正片图像通常会产生良好的结果。
2- 标签
对于每张正面图像,您应该创建标签文件,如 data.lst。此列表文件的每一行应包含:
- 图片名称
- 图像中的对象数
- 图像中每个对象的拟合矩形坐标
这一步是痛苦的一步。要处理它 opencv_createsamples 为您创建该列表文件。与自己准备相比,这效率不高,但也可以。它只是使用底片图像作为背景,然后将您的正面图像随机复制到该背景中。然后创建一个列表文件。
您可以 运行 opencv_createsample
通过终端命令:
opencv_createsamples -img your_image.jpg -bg bg.txt -info info/info.lst
-pngoutput info -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
positives.vec
您只需提供准备好的列表文件、宽高和所需的矢量文件名。您可以从文档中了解更多关于宽度和高度部分的信息。
4-训练
这一步是最后一步。 opencv_traincascade 最后使用命令。我们给出输入:
- 正像的矢量文件
- 负面图片
- 负片和正片数量
- 宽度和高度(如pos向量部分)
- 阶段数(迭代)
这是示例命令:
opencv_traincascade -data data -vec positives.vec -bg bg.txt -numPos
1800 -numNeg 900 -numStages 10 -w 50 -h 50
最后我们得到一个 xml 文件。
Note-1: OpenCV 3.4... versions have a problem about the opencv_createsamples
, when I searched people are saying a漏洞。我建议你使用不同的版本。
注2:最后一步是耗时最长的一步(如果不自己做标签的话)。我什至在一些坏电脑上试过,花了 4 个小时才完成(对于上面命令中的命令值)
我想检测汽车,但可用的 xml 文件不够准确 detection.How 我可以创建一个自定义 xml 文件(我可以为任何对象创建该文件)?
如有任何帮助,我们将不胜感激。
有一些关于如何创建您自己的级联的步骤。
我的参考资料:
1-数据收集
您需要正片(这意味着包括您要训练的对象)图像和负片(您的对象不存在于图像中)图像。根据人们的经验,正面图像的数量应该是负面图像的两倍
注意:根据我的经验和文档,800 张负片 - 1600 张正片图像通常会产生良好的结果。
2- 标签
对于每张正面图像,您应该创建标签文件,如 data.lst。此列表文件的每一行应包含:
- 图片名称
- 图像中的对象数
- 图像中每个对象的拟合矩形坐标
这一步是痛苦的一步。要处理它 opencv_createsamples 为您创建该列表文件。与自己准备相比,这效率不高,但也可以。它只是使用底片图像作为背景,然后将您的正面图像随机复制到该背景中。然后创建一个列表文件。
您可以 运行 opencv_createsample
通过终端命令:
opencv_createsamples -img your_image.jpg -bg bg.txt -info info/info.lst -pngoutput info -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 positives.vec
您只需提供准备好的列表文件、宽高和所需的矢量文件名。您可以从文档中了解更多关于宽度和高度部分的信息。
4-训练
这一步是最后一步。 opencv_traincascade 最后使用命令。我们给出输入:
- 正像的矢量文件
- 负面图片
- 负片和正片数量
- 宽度和高度(如pos向量部分)
- 阶段数(迭代)
这是示例命令:
opencv_traincascade -data data -vec positives.vec -bg bg.txt -numPos 1800 -numNeg 900 -numStages 10 -w 50 -h 50
最后我们得到一个 xml 文件。
Note-1: OpenCV 3.4... versions have a problem about the opencv_createsamples
, when I searched people are saying a漏洞。我建议你使用不同的版本。
注2:最后一步是耗时最长的一步(如果不自己做标签的话)。我什至在一些坏电脑上试过,花了 4 个小时才完成(对于上面命令中的命令值)