【人头分类器训练】python+opencv实现视频人头识别

参考教程:https://blog.csdn.net/MR_Peach07/article/details/74093800

【准备】

Python 2.7.13

opencv 3.4.1

opencv的训练器在参考教程中有分享

【过程】

1、建立文件夹如下:

data中用于存放生成的pos.vec(开始为空)
data1存放分类器文件(开始为空)
posdata和negdata分别存放正负样本文件

2、 生成正负样本 数据文件

 生成之后删除最后一行

 

处理posdata.dat,规范格式为(我的图片大小都是20*20)

 (这个处理可以直接文本替换,我是用代码如下)

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void readFile(){
	FILE *fp,*fp1;
	fp = fopen("read.dat", "r");
	fp1 = fopen("posdata.dat", "w");
	if (fp == NULL){
		printf("Open File failed.\n");
		exit(0);
	}
	char a[100];
	char b[100] = " 1 0 0 20 20";
	while (!feof(fp)){
		fscanf(fp, "%s", &a);
		fputs(a, fp1);
		fputs(b, fp1);
		fputc('\n',fp1);
	}
	fclose(fp);
}
int main(){
	readFile();
	return 0;
}

处理negdata.dat,添加 路径

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void readFile(){
	FILE *fp,*fp1;
	fp = fopen("read.dat", "r");
	fp1 = fopen("negdata.dat", "w");
	if (fp == NULL){
		printf("Open File failed.\n");
		exit(0);
	}
	char a[100];
	char b[100] = "negdata\\";
	while (!feof(fp)){
		fscanf(fp, "%s", &a);
		fputs(b, fp1);
		fputs(a, fp1);
		fputc('\n',fp1);
	}
	fclose(fp);
}
int main(){
	readFile();
	return 0;
}

3、生成pos.vec

输入:opencv_createsamples.exe -info posdata\posdata.dat -vec data\pos.vec -num 3690 -w 20 -h 20

num一般为正样本数*0.9

4.训练

opencv_traincascade.exe -data data1 -vec data\pos.vec -bg negdata\negdata.dat numPos 243 -numNeg 300 -minHitRate 0.9999 -maxFalseAlarmRate 0.5 -featureType HAAR -numStages 20 -w 20 -h 20


两年前的草稿……现在已经不做这个方向了,就


版权声明:本文为sinat_34536092原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。