使用python完成Hear-cascade分类器的训练完整代码
时间: 2023-07-30 18:11:48 浏览: 88
下面是使用Python完成Haar-cascade分类器训练的完整代码:
```python
import cv2
import numpy as np
import os
# 定义正样本和负样本文件夹路径
positive_path = 'positive_samples/'
negative_path = 'negative_samples/'
# 保存正样本和负样本的名称到文件中
def save_file_names_to_txt(path, file_name):
with open(file_name, 'w') as f:
for file in os.listdir(path):
f.write(path + file + '\n')
# 生成正样本的描述文件
def create_positive_samples_description(positive_file_name, description_file_name):
command = 'opencv_createsamples -info {} -num {} -w {} -h {} -vec {}'.format(
positive_file_name, len(os.listdir(positive_path)), 24, 24, 'positive_samples.vec')
os.system(command)
command = 'opencv_traincascade -data cascade -vec positive_samples.vec -bg {} -numPos {} -numNeg {} -numStages {} -w {} -h {}'.format(
'bg.txt', len(os.listdir(positive_path)), len(os.listdir(negative_path)), 20, 24, 24)
os.system(command)
# 生成负样本的描述文件
def create_negative_samples_description(negative_file_name):
save_file_names_to_txt(negative_path, 'bg.txt')
command = 'opencv_createsamples -info {} -num {} -w {} -h {} -vec {}'.format(
negative_file_name, len(os.listdir(negative_path)), 24, 24, 'negative_samples.vec')
os.system(command)
command = 'opencv_traincascade -data cascade -vec negative_samples.vec -bg {} -numPos {} -numNeg {} -numStages {} -w {} -h {}'.format(
'bg.txt', len(os.listdir(positive_path)), len(os.listdir(negative_path)), 20, 24, 24)
os.system(command)
if __name__ == '__main__':
# 保存正样本和负样本的名称到文件中
save_file_names_to_txt(positive_path, 'positive_samples.txt')
save_file_names_to_txt(negative_path, 'negative_samples.txt')
# 生成正样本的描述文件
create_positive_samples_description('positive_samples.txt', 'positive_samples_description.txt')
# 生成负样本的描述文件
create_negative_samples_description('negative_samples.txt')
```
这个代码中,我们首先定义了正样本和负样本的文件夹路径,然后使用 `os.listdir()` 函数获取文件夹中所有文件的名称,并保存到 txt 文件中。接着,我们使用 `opencv_createsamples` 函数生成正样本的描述文件,使用 `opencv_traincascade` 函数训练分类器。最后,我们使用同样的方式生成负样本的描述文件,并再次使用 `opencv_traincascade` 函数训练分类器。
阅读全文