通过opencv训练自己的人脸分类器

1.首先得在此处下载win pack版的opencv

2.正在此目录(opencv\build\x64\vc14\bin)下找到 opencv_createsamples.exe 和 opencv_traincascade.exe

3.在正样本的文件夹下创建记事本,写入如下内容:

dir /b/s/p/w *.jpg > positives.txt
最后修改为 bat 格式

步骤:

问题:

打开cmd,输入 opencv_createsamples.exe 就会得到帮助信息
Usage: opencv_createsamples.exe
  [-info <collection_file_name>]
  [-img <image_file_name>]
  [-vec <vec_file_name>]
  [-bg <background_file_name>]
  [-num <number_of_samples = 1000>]
  [-bgcolor <background_color = 0>]
  [-inv] [-randinv] [-bgthresh <background_color_threshold = 80>]
  [-maxidev <max_intensity_deviation = 40>]
  [-maxxangle <max_x_rotation_angle = 1.100000>]
  [-maxyangle <max_y_rotation_angle = 1.100000>]
  [-maxzangle <max_z_rotation_angle = 0.500000>]
  [-show [<scale = 4.000000>]]
  [-w <sample_width = 24>]
  [-h <sample_height = 24>]
  [-maxscale <max sample scale = -1.000000>]


打开cmd,输入 opencv_traincascade.exe 就会得到帮助信息
Usage: opencv_traincascade.exe
  -data <cascade_dir_name>
  -vec <vec_file_name>
  -bg <background_file_name>
  [-numPos <number_of_positive_samples = 2000>]
  [-numNeg <number_of_negative_samples = 1000>]
  [-numStages <number_of_stages = 20>]
  [-precalcValBufSize <precalculated_vals_buffer_size_in_Mb = 1024>]
  [-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb = 1024>]
  [-baseFormatSave]
  [-numThreads <max_number_of_threads = 5>]
  [-acceptanceRatioBreakValue <value> = -1>]
--cascadeParams--
  [-stageType <BOOST(default)>]
  [-featureType <{HAAR(default), LBP, HOG}>]
  [-w <sampleWidth = 24>]
  [-h <sampleHeight = 24>]
--boostParams--
  [-bt <{DAB, RAB, LB, GAB(default)}>]
  [-minHitRate <min_hit_rate> = 0.995>]
  [-maxFalseAlarmRate <max_false_alarm_rate = 0.5>]
  [-weightTrimRate <weight_trim_rate = 0.95>]
  [-maxDepth <max_depth_of_weak_tree = 1>]
  [-maxWeakCount <max_weak_tree_count = 100>]
--haarFeatureParams--
  [-mode <BASIC(default) | CORE | ALL
--lbpFeatureParams--
--HOGFeatureParams--


(问题1)positives.txt(1) : parse errorDone. Created 0 samples
说明你的 正样本 路径写错了 
正确格式:positive_images\1.jpg 1 0 0 20 20(路径+1+0+0+w+h)

(问题2)注意:负样本直接写成路径即可,否则会出现后面错误:
Train dataset for temp stage can not be filled. Branch training terminated.
Cascade classifier can't be trained. Check the used training parameters.

(问题3)运行:opencv_traincascade.exe时,注意添加-numPos 50(不一定为样本数,可能比样本数少,不然会出现以下错误) -numNeg 147(除非为默认样本数)
否则会出现以下错误:
OpenCV Error: Bad argument (Can not get new positive sample. 
The most possible reason is insufficient count of samples in given vec-file.) in CvCascadeImageReader::PosReader::get, 
file C:\build\master_winpack-build-win64-vc14\opencv\apps\traincascade\imagestorage.cpp, line 158

(问题4)Bad argument (_cascadeDirName or _bgfileName or _vecFileName is NULL) in CvCascadeClassifier::train,
 file C:\build\master_winpack-build-win64-vc14\opencv\apps\traincascade\cascadeclassifier.cpp
输入格式不对:可能少了 -

(问题5)OpenCV Error: Assertion failed (_img.rows * _img.cols == vecSize) in CvCascadeImageReader::PosReader 
加上 -w 20 -h 20 就好了(你正样本的w和h)


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个开源计算机视觉库,提供了许多图像处理和计算机视觉相关的函数和算法。其中,人脸检测OpenCV库中最常用的功能之一。OpenCV提供了一个基于Haar特征的人脸检测分类器,可以通过训练得到。 Haar特征是一种基于图像的局部特征描述方法,可以用于检测物体。Haar特征可以用来描述图像中的区域,比如边缘、角、线和矩形等。人脸检测分类器基于Haar特征通过AdaBoost算法进行训练,最终得到一个可以检测人脸分类器。 在OpenCV中,人脸检测分类器可以通过CascadeClassifier类实现。CascadeClassifier类是一个封装了Haar分类器的类,可以简单地调用该类的detectMultiScale函数实现人脸检测。detectMultiScale函数会对输入的图像进行多尺度检测,返回检测到的人脸区域的坐标。 使用OpenCV进行人脸检测的步骤如下: 1. 加载人脸检测分类器:使用CascadeClassifier类加载Haar分类器。可以使用OpenCV提供的已经训练好的分类器文件,也可以通过训练自己的分类器文件。 2. 读入图像:使用imread函数读入待检测的图像。 3. 调用detectMultiScale函数进行人脸检测:使用detectMultiScale函数对图像进行人脸检测,返回检测到的人脸区域的坐标。 4. 绘制人脸框:使用rectangle函数对检测到的人脸区域进行绘制。 5. 显示结果:使用imshow函数显示检测结果。 下面是一个简单的示例代码: ``` import cv2 # 加载人脸检测分类器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 读入图像 img = cv2.imread('test.jpg') # 调用detectMultiScale函数进行人脸检测 faces = face_cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=5) # 绘制人脸框 for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) # 显示结果 cv2.imshow('img',img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个例子中,我们使用了一个已经训练好的分类器文件haarcascade_frontalface_default.xml,这个文件可以在OpenCV库中的data文件夹中找到。我们读入了一张名为test.jpg的图像,然后使用detectMultiScale函数进行人脸检测,并将检测到的人脸区域用绿色框标出。最后使用imshow函数显示结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值