以图搜图
X
提示:扫描拍照图截取关键部位识图,更精准。
(仅支持jpg、png、bmp图片,最大2M)
当前位置:首页 > 百科 > opencv模型训练步骤(opencv头肩模型训练需要多久)

opencv模型训练步骤(opencv头肩模型训练需要多久)

2020-02-16 16:56:38
如何使用traincascade生成的模型,进行测试
OpenCV中有两个程序可以训练级联分类器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一个新程序,使用OpenCV 2.x API 以C++ 编写。这二者主要的区别是 opencv_traincascade 支持 Haar、Hog和 LBP(Local Binary Patterns) 三种特征,并易于增加其他的特征。与Haar特征相比,LBP特征是整数特征,因此训练和检测过程都会比Haar特征快几倍。LBP和Haar特征用于检测的准确率,是依赖训练过程中的训练数据的质量和训练参数。训练一个与基于Haar特征同样准确度的LBP的分类器是可能的。
opencv_traincascade and opencv_haartraining 所输出的分类器文件格式并不相同。注意,新的级联检测接口(参考 objdetect 模块中的 CascadeClassifier 类)支持这两种格式。 opencv_traincascade 可以旧格式导出训练好的级联分类器。但是在训练过程被中断后再重启训练过程, opencv_traincascade and opencv_haartraining 不能装载与中断前不同的文件格式。
opencv_traincascade 程序使用TBB来处理多线程。如果希望使用多核并行运算加速,请使用TBB来编译OpenCV。还有一些与训练相关的辅助程序。
opencv_createsamples 用来准备训练用的正样本数据和测试数据。 opencv_createsamples 能够生成能被 opencv_haartraining 和 opencv_traincascade 程序支持的正样本数据。它的输出为以 *.vec 为扩展名的文件,该文件以二进制方式存储图像。
python opencv 怎么利用csv文件训练人脸识别模型代码
1.1.介绍Introduction
从OpenCV2.4开始,加入了新的类FaceRecognizer,我们可以使用它便捷地进行人脸识别实验。本文既介绍代码使用,又介绍算法原理。(他写的源代码,我们可以在OpenCV的opencvmodulescontribdocfacerecsrc下找到,当然也可以在他的github中找到,如果你想研究源码,自然可以去看看,不复杂)

目前支持的算法有
Eigenfaces特征脸createEigenFaceRecognizer()
Fisherfaces createFisherFaceRecognizer()
LocalBinary Patterns Histograms局部二值直方图 createLBPHFaceRecognizer()
下面所有的例子中的代码在OpenCV安装目录下的samples/cpp下面都能找到,所有的代码商用或者学习都是免费的。

1.2.人脸识别Face Recognition
对人类来说,人脸识别很容易。文献[Tu06]告诉我们,仅仅是才三天的婴儿已经可以区分周围熟悉的人脸了。那么对于计算机来说,到底有多难?其实,迄今为止,我们对于人类自己为何可以区分不同的人所知甚少。是人脸内部特征(眼睛、鼻子、嘴巴)还是外部特征(头型、发际线)对于人类识别更有效?我们怎么分析一张图像,大脑是如何对它编码的?David Hubel和TorstenWiesel向我们展示,我们的大脑针对不同的场景,如线、边、角或者运动这些局部特征有专门的神经细胞作出反应。显然我们没有把世界看成零散的块块,我们的视觉皮层必须以某种方式把不同的信息来源转化成有用的模式。自动人脸识别就是如何从一幅图像中提取有意义的特征,把它们放入一种有用的表示方式,然后对他们进行一些分类。基于几何特征的人脸的人脸识别可能是最直观的方法来识别人脸。第一个自动人脸识别系统在[Kanade73]中又描述:标记点(眼睛、耳朵、鼻子等的位置)用来构造一个特征向量(点与点之间的距离、角度等)。通过计算测试和训练图像的特征向量的欧氏距离来进行识别。这样的方法对于光照变化很稳健,但也有巨大的缺点:标记点的确定是很复杂的,即使是使用最先进的算法。一些几何特征人脸识别近期工作在文献[Bru92]中有描述。一个22维的特征向量被用在一个大数据库上,单靠几何特征不能提供足够的信息用于人脸识别。

特征脸方法在文献[TP91]中有描述,他描述了一个全面的方法来识别人脸:面部图像是一个点,这个点是从高维图像空间找到它在低维空间的表示,这样分类变得很简单。低维子空间低维是使用主元分析(Principal Component Analysis,PCA)找到的,它可以找拥有最大方差的那个轴。虽然这样的转换是从最佳重建角度考虑的,但是他没有把标签问题考虑进去。[gm:读懂这段需要一些机器学习知识]。想象一个情况,如果变化是基于外部来源,比如光照。轴的最大方差不一定包含任何有鉴别性的信息,因此此时的分类是不可能的。因此,一个使用线性鉴别(Linear Discriminant Analysis,LDA)的特定类投影方法被提出来解决人脸识别问题[BHK97]。其中一个基本的想法就是,使类内方差最小的同时,使类外方差最大。
近年来,各种局部特征提取方法出现。为了避免输入的图像的高维数据,仅仅使用的局部特征描述图像的方法被提出,提取的特征(很有希望的)对于局部遮挡、光照变化、小样本等情况更强健。有关局部特征提取的方法有盖伯小波(Gabor Waelets)([Wiskott97]),离散傅立叶变换(DiscreteCosinus Transform,DCT)([Messer06]),局部二值模式(LocalBinary Patterns,LBP)([AHP04])。使用什么方法来提取时域空间的局部特征依旧是一个开放性的研究问题,因为空间信息是潜在有用的信息。
1.3.人脸库Face Database
我们先获取一些数据来进行实验吧。我不想在这里做一个幼稚的例子。我们在研究人脸识别,所以我们需要一个真的人脸图像!你可以自己创建自己的数据集,也可以从这里(http://face-rec.org/databases/)下载一个。
AT&TFacedatabase又称ORL人脸数据库,40个人,每人10张照片。照片在不同时间、不同光照、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下采集。所有的图像都在一个黑暗均匀的背景下采集的,正面竖直人脸(有些有有轻微旋转)。

景观植物3d模型下载景观植物3d模型下载


android opencv 怎么训练模型
使用 Mat 中对矩阵元素的地址定位的知识 (参考博文:OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解)Code 1 :int main(){ //新建一个uchar类型的单通道矩阵(grayscale image 灰度图) Mat m(400, 400, CV_8U, Scalar(0)); for (int col = 0; col < 400; col++) { for (int row = 195; row < 205; row++) { cout << (int)(*(m.data + m.step[0] * row + m.step[1] * col)) << " ==> "; //获取第[row,col]个像素点的地址并用 * 符号解析 *(m.data + m.step[0] * row + m.step[1] * col) = 255; cout << (int)(*(m.data + m.step[0] * row + m.step[1] * col)) << endl; } } imshow("canvas", m); cvWaitKey(); return 0;}Output 1 :0 ==> 2550 ==> 2550 ==> 2550 ==> 2550 ==> 2550 ==> 255...Code1只是演示了单通道的情况,对于多通道的例子,请看 Code2 然后再看 Code3。Fn 2 :使用 Mat::at 函数原型 template inline _Tp& Mat::at(…) //其中参数有多个,也就是说 at 函数有多个重载返回值为 Mat 类型, Mat 有个索引的重载,也就是 [] 符号的重载,用这个重载可以定位多通道数据,具体示例可以看下面代码下面的代码把红色通道值大于128的颜色的置为白色,左边为原图,右边为处理过后的图。
评论区(0)
友情提示:请文明评论、尊重他(她)人,垃圾评论一律封号!
邮箱
昵称
密码
确认密码
阅读并接受《用户协议》
使用其他方式登录
微信登陆