今天我们来谈论有关(基于cvi人脸识别)基于opencv的人脸识别系统,以下4个关于基于cvi人脸识别的观点希望能帮助到您找到想要的答案。
人脸识别依靠什么特征
贡献用户名:【污界小仙女】 ,现在由道尔智控小编为你详解与【基于cvi人脸识别】的相关内容!
最佳答案基于几何特征的人脸识别方法
基于特征的方法是一种自下而上的人脸检测方法,由于人眼可以将人脸在不此研究人员认为有一个潜在的假设:人脸或人脸的部件可能具有在各种条件下都不会改变的特征或属性,如形状、肤色、纹理、边缘信息等。基于特征的方法的目标就是寻找上述这些不变特征,并利用这些特征来定位入脸。这类方法在特定的环境下非常有效且检测较高,对人脸姿态、表情、旋转都不敏感。但是由于人脸部件的提取通常都借助于边缘算子,因此,这类方法对图像质量要求较高,对光照和背景等有较高的要求,因为光照、噪音、阴影都极有可能破坏人脸部件的边缘,从而影响算法的有效性。
模板匹配算法首先需要人TN作标准模板(固定模板)或将模板先行参数化(可变模板),然后在检测人脸时,计算输入图像与模板之间的相关值,这个相关值通常都是独立计算脸部轮廓、眼睛、鼻子和嘴各自的匹配程度后得出的综合描述,最后再根据相关值和预先设定的阈值来确定图像中是否存在人脸。基于可变模板的人脸检测算法比固定模板算法检测效果要好很多,但是它仍不能有效地处理人脸尺度、姿态和形状等方面的变化。
基于外观形状的方法并不对输入图像进行复杂的预处理,也不需要人工的对人脸特征进行分析或是抽取模板,而是通过使用特定的方法(如主成分分析方法(PCA)、支持向量机(SVM)、神经网络方法(ANN)等)对大量的人脸和非人脸样本组成的训练集(一般为了保证训练得到的检测器精度,非人脸样本集的容量要为人脸样本集的两倍)进行学习,再将学习而成的模板或者说分类器用于人脸检测。因此,这也是j种自下而上的方法。这种方法的优点是利用强大的机器学习算法快速稳定地实现了很好的检测结果,并且该方法在复杂背景下,多姿态的人脸图像中也能得到有效的检测结果。但是这种方法通常需要遍历整个图片才能得到检测结果,并且在训练过程中需要大量的人脸与非人脸样本,以及较长的训练时间。近几年来,针对该方法的人脸检测研究相对比较活跃。
基于代数特征的人脸识别方法
在基于代数特征的人脸识别中,每一幅人脸图像被看成是以像素点灰度为元素的矩阵,用反映某些性质的数据特征来表示人脸的特征。 设人脸图像 ) , ( y x I 为二维 N M × 灰度图像,同样可以看成是 N M n × = 维列向量,可视为 N M × 维空间中的一个点。但这样的一个空间中,并不是空间中的每一部分都包含有价值的信息,故一般情况下,需要通过某种变换,将如此巨大的空间中的这些点映射到一个维数较低的空间中去。然后利用对图像投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。 在基于代数特征的人脸识别方法中,主成分分析法(PCA)和Fisher 线性判别分析(LDA)是研究最多的方法。本章简要介绍介绍了PCA。
完整的PCA(PrincipalComponentAnalysis)人脸识别的应用包括四个步骤:人脸图像预处理;读入人脸库,训练形成特征子空间;把训练图像和测试图像投影的上一步骤中得到的子空间上;选择一定的距离函数进行识别。详细描述如下:
4.1读入人脸库
一归一化人脸库后,将库中的每个人选择一定数量的图像构成训练集,设归一化后的图像是n×n,按列相连就构成n2维矢量,可视为n2维空间中的一个点,可以通过K-L变换用一个低维子空间描述这个图像。
4.2计算K.L变换的生成矩阵
训练样本集的总体散布矩阵为产生矩阵,即
或者写成:
式中xi为第i个训练样本的图像向量,|l为训练样本的均值向量,M为训练样本的总数。为了求n2×n2维矩阵∑的特征值和正交归一化的特征向量,要直接计算的话,计算量太大,由此引入奇异值分解定理来解决维数过高的问题。
4.3利用奇异值分解(AVD)定理计算图像的特征值和特征向量
设A是一个秩为r的行n×r维矩阵,则存在两个正交矩阵和对角阵:
其中凡则这两个正交矩阵和对角矩阵满足下式:
其中为矩阵的非零特征值,
4.4 把训练图像和测试图像投影到特征空间每一副人脸图像向特征脸子空间投影,得到一组坐标系数,就对应于子空间中的一个点。同样,子空间中的任一点也对应于~副图像。这组系数便可作为人脸识别的依据,也就是这张人脸图像的特征脸特征。也就是说任何一幅人脸图像都可以表示为这组特征脸的线性组合,各个加权系数就是K.L变换的展开系数,可以作为图像的识别特征,表明了该图像在子空间的位置,也就是向量
可用于人脸检测,如果它大于某个阈值,可以认为f是人脸图像,否则就认为不是。这样原来的人脸图象识别问题就转化为依据子空间的训练样本点进行分类的问题。
基于连接机制的人脸识别方法
基于连接机制的识别方法的代表性有神经网络和弹性匹配法。
神经网络(ANN)在人工智能领域近年来是一个研究热门,基于神经网络技术来进行人脸特征提取和特征识别是一个积极的研究方向。神经网络通过大量简单神经元互联来构成复杂系统,在人脸识别中取得了较好的效果,特别是正面人脸图像。常用的神经网络有:BP网络、卷积网络、径向基函数网络、自组织网络以及模糊神经网络等n¨。BP网络的运算量较小耗时也短,它的自适应功能使系统的鲁棒性增强。神经网络用于人脸识别,相比较其他方法,其可以获得识别规则的隐性表达,缺点是训练时间长、运算量大、收敛慢且容易陷入局部极小点等。Gutta等人结合RBF与树型分类器的混合分类器模型来进行人脸识别乜螂1。Lin等人采用虚拟样本进行强化和反强化学习,采用模块化的网络结构网络的学习加快,实现了基于概率决策的神经网络方法获得了较理想结果,。此种方法能较好的应用于人脸检测和识别的各步骤中。弹性匹配法采用属性拓扑图代表人脸,拓扑图的每个顶点包含一个特征向量,以此来记录人脸在该顶点位置周围的特征信息¨引。拓扑图的顶点是采用小波变换特征,对光线、角度和尺寸都具有一定的适应性,且能适应表情和视角的变化,其在理论上改进了特征脸算法的一些缺点。
基于三维数据的人脸识别方法
一个完整的人脸识别系统包括人脸面部数据的获取、数据分析处理和最终结果输出三个部分。图2-1 显示了三维人脸识别的基本步骤:1 、通过三维数据采集设备获得人脸面部的三维形状信息;2 、对获取的三维数据进行平滑去噪和提取面部区域等预处理;3 、从三维数据中提取人脸面部特征,通过与人脸库中的数据进行比对;4 、用分类器做分类判别,输出最后决策结果。
基于三维数据的方法的代表性是基于模型合成的方法和基于曲率的方法。
基于模型合成的方法,它的基本思想为:输入人脸图像的二维的,用某种技术恢复(或部分恢复)人脸的三维信息,再重新合成指定条件下的人脸图像。典型代表是3D可变形模型和基于形状恢复的3D增强人脸识别算法。3D可变形模型首先通过200个高精度的3D人脸模型构建一个可变形的3D人脸模型,用这个模型来对给定的人脸图像拟合,获得一组特定的参数,再合成任何姿态和光照的人脸图像n卜捌。基于形状恢复的3D增强人脸识别算法是利用通用的3D人脸模型合成新的人脸图像,合成过程改变了一定的姿态与光源情况。
曲率是最基本的表达曲面信息的局部特征,因而最早用来处理3D人脸识别问题的是人脸曲面的曲率。Lee禾lJ用平均曲率和高斯曲率值,将人脸深度图中凸的区域分割出来。
如果你是开发者的话,可以去Tel一下colorreco,更好地技术解答。
以上就是道尔智控小编解答(污界小仙女)分析关于“人脸识别依靠什么特征”的答案,接下来继续为你详解用户(化腐朽为神奇)贡献“opencv人脸识别准确率”的一些相关解答,希望能解决你的问题!

opencv人脸识别准确率
贡献用户名:【化腐朽为神奇】 ,现在由道尔智控小编为你分析与【基于cvi人脸识别】的相关内容!
最佳答案#include <opencv2\core\core.hpp>#include <opencv2\imgproc\imgproc.hpp>#include <opencv2\highgui\highgui.hpp>#include <opencv2\video\background_segm.hpp>#include <opencv2/objdetect/objdetect.hpp>#include <iostream> using namespace cv;void detectAndDraw( Mat& img, CascadeClassifier& cascade, CascadeClassifier& nestedCascade, double scale, bool tryflip );//Mat imageresize(Mat &image, Size size); /*int main(){ //VideoCapture cap(0); //打开默认摄像头 VideoCapture cap("F:/nihao.mp4"); if(!cap.isOpened()) { return -1; } Mat frame; Mat edges; CascadeClassifier cascade, nestedCascade; bool stop = false; //训练好的文件名称,放置在可执行文件同目录下 cascade.load("haarcascade_frontalface_alt.xml"); nestedCascade.load("haarcascade_eye_tree_eyeglasses.xml"); while(!stop) { cap>>frame; detectAndDraw( frame, cascade, nestedCascade,2,0 ); if(waitKey(30) >=0) stop = true; } return 0; } */int main(){ Mat image=imread("F:/quanjiafu.jpg"); CascadeClassifier cascade,nestedcascade; cascade.load("F:/Opencv2.4.9/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml"); nestedcascade.load("F:/Opencv2.4.9/opencv/sources/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml"); detectAndDraw(image,cascade,nestedcascade,2,0); waitKey(0); return 0;} void detectAndDraw( Mat& img, CascadeClassifier& cascade, CascadeClassifier& nestedCascade, double scale, bool tryflip ) { int i = 0; double t = 0; //建立用于存放人脸的向量容器 vector<Rect> faces, faces2; //定义一些颜色,用来标示不同的人脸 const static Scalar colors[] = { CV_RGB(0,0,255), CV_RGB(0,128,255), CV_RGB(0,255,255), CV_RGB(0,255,0), CV_RGB(255,128,0), CV_RGB(255,255,0), CV_RGB(255,0,0), CV_RGB(255,0,255)} ; //建立缩小的图片,加快检测 //nt cvRound (double value) 对一个double型的数进行四舍五入,并返回一个整型数! Mat gray, smallImg( cvRound (img.rows/scale), cvRound(img.cols/scale), CV_8UC1 ); //转成灰度图像,Harr特征基于灰度图 cvtColor( img, gray, CV_BGR2GRAY ); //改变图像大小,使用双线性差值 resize( gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR ); //变换后的图像进行直方图均值化处理 equalizeHist( smallImg, smallImg ); //程序开始和结束插入此函数获取时间,经过计算求得算法执行时间 t = (double)cvGetTickCount(); //检测人脸 //detectMultiScale函数中smallImg表示的是要检测的输入图像为smallImg,faces表示检测到的人脸目标序列,1.1表示 //每次图像尺寸减小的比例为1.1,2表示每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大 //小都可以检测到人脸),CV_HAAR_SCALE_IMAGE表示不是缩放分类器来检测,而是缩放图像,Size(30, 30)为目标的 //最小最大尺寸 cascade.detectMultiScale( smallImg, faces, 1.1, 2, 0 //|CV_HAAR_FIND_BIGGEST_OBJECT //|CV_HAAR_DO_ROUGH_SEARCH |CV_HAAR_SCALE_IMAGE , Size(30, 30)); //如果使能,翻转图像继续检测 if( tryflip ) { flip(smallImg, smallImg, 1); cascade.detectMultiScale( smallImg, faces2, 1.1, 2, 0 //|CV_HAAR_FIND_BIGGEST_OBJECT //|CV_HAAR_DO_ROUGH_SEARCH |CV_HAAR_SCALE_IMAGE , Size(30, 30) ); for( vector<Rect>::const_iterator r = faces2.begin(); r != faces2.end(); r++ ) { faces.push_back(Rect(smallImg.cols - r->x - r->width, r->y, r->width, r->height)); } } t = (double)cvGetTickCount() - t; // qDebug( "detection time = %g ms\n", t/((double)cvGetTickFrequency()*1000.) ); for( vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++, i++ ) { Mat smallImgROI; vector<Rect> nestedObjects; Point center; Scalar color = colors[i%8]; int radius; double aspect_ratio = (double)r->width/r->height; if( 0.75 < aspect_ratio && aspect_ratio < 1.3 ) { //标示人脸时在缩小之前的图像上标示,所以这里根据缩放比例换算回去 center.x = cvRound((r->x + r->width*0.5)*scale); center.y = cvRound((r->y + r->height*0.5)*scale); //Size s=Size(cvRound((r->width + r->height)*0.25*scale)*2,cvRound((r->width + r->height)*0.25*scale)*2); //Mat image=imread("F:/yaoming1.jpg"); //Mat nimage=imageresize(image,s); //Mat imageROI=img(Rect(center.x-s.width/2,center.y-s.height/2,nimage.cols,nimage.rows)); //addWeighted(imageROI,0.1,nimage,3,0.,imageROI); radius = cvRound((r->width + r->height)*0.25*scale); circle( img, center, radius, color,2, 8, 0 ); } else rectangle( img, cvPoint(cvRound(r->x*scale), cvRound(r->y*scale)), cvPoint(cvRound((r->x + r->width-1)*scale), cvRound((r->y + r->height-1)*scale)), color, 3, 8, 0); if( nestedCascade.empty() ) continue; smallImgROI = smallImg(*r); //同样方法检测人眼 nestedCascade.detectMultiScale( smallImgROI, nestedObjects, 1.1, 2, 0 //|CV_HAAR_FIND_BIGGEST_OBJECT //|CV_HAAR_DO_ROUGH_SEARCH //|CV_HAAR_DO_CANNY_PRUNING |CV_HAAR_SCALE_IMAGE , Size(30, 30) ); for( vector<Rect>::const_iterator nr = nestedObjects.begin(); nr != nestedObjects.end(); nr++ ) { center.x = cvRound((r->x + nr->x + nr->width*0.5)*scale); center.y = cvRound((r->y + nr->y + nr->height*0.5)*scale); radius = cvRound((nr->width + nr->height)*0.25*scale); circle( img, center, radius, color, 3, 8, 0 ); } } cv::imshow( "result", img );}//Mat imageresize(Mat& image,Size size){// Mat nimage=Mat(size,CV_32S);// resize(image,nimage,size);// return nimage;
以上就是道尔智控小编解答(化腐朽为神奇)贡献关于“opencv人脸识别准确率”的答案,接下来继续为你详解用户(仗剑踏歌行)解答“opencv人脸识别介绍”的一些相关解答,希望能解决你的问题!
opencv人脸识别介绍
贡献用户名:【仗剑踏歌行】 ,现在由道尔智控小编为你讲解与【基于cvi人脸识别】的相关内容!
最佳答案不知道你说的人脸识别是识别出来是某个人还是只是在图像中检测出人脸。 刚用opencv完成对自己的人脸识别,但是还需要继续优化。说一下大致步骤吧: 1、首先就是数据的准备,你要从网络上下载一些人脸库,后面用来训练人脸识别模型。
以上就是道尔智控小编解答(仗剑踏歌行)解答关于“opencv人脸识别介绍”的答案,接下来继续为你详解用户(你是二逼中的战斗机)分析“基于opencv的人脸识别系统论文”的一些相关解答,希望能解决你的问题!
基于opencv的人脸识别系统论文
贡献用户名:【你是二逼中的战斗机】 ,现在由道尔智控小编为你分析与【基于cvi人脸识别】的相关内容!
最佳答案1.介绍Introduction 从OpenCV2.4开始,加入了新的类FaceRecognizer,我们可以使用它便捷地进行人脸识别实验。本文既介绍代码使用,又介绍算法原理。(他写的源代码,我们可以在OpenCV的opencv\modules\contrib\doc\facerec\src下找到,当然也可以.
关于[(基于cvi人脸识别)基于opencv的人脸识别系统]的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于基于opencv的人脸识别系统、基于cvi人脸识别的信息别忘了在本站进行查找喔。