• 大小: 4.5MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-02
  • 语言: 其他
  • 标签: opencv  

资源简介

这个是我自己写的Openv中人脸识别类FaceRecognizer,我把进行了封装,从训练到显示,代码简单到只有几行。

资源截图

代码片段和文件信息

#include “FaceRecognition.h“
using namespace cv;
using namespace std;
using namespace face;


CFaceRecognition::CFaceRecognition()
{
}


CFaceRecognition::~CFaceRecognition()
{
}

BOOL CFaceRecognition::Train(LPCTSTR path LPCTSTR fName)
{
char   buffer[MAX_PATH];
_getcwd(buffer MAX_PATH);//获取当前路径
// printf(“The   current   directory   is:   %s “ buffer);
string fn_csv; //读取文件的绝对路径
fn_csv = buffer;
fn_csv = fn_csv + path;
//string fn_csv = “C:\\Users\\Administrator\\Desktop\\face\\Train\\FaceTest\\image\\at.txt“;//读取你的CSV文件路径.
//string fn_csv = “./image/at.txt“;//读取你的CSV文件路径.  相对路径读取失败

vector images;// 2个容器来存放图像数据和对应的标签
vector labels;
if (images.size())
{
return FALSE;
}
read_csv(fn_csv images labels);//从csv文件中批量读取训练数据
Ptrmodel = createEigenFaceRecognizer();
model->train(images labels);
model->save(fName);//保存路径
return TRUE;
}

BOOL CFaceRecognition::LoadClassifier(LPCTSTR fName)
{
if (!m_FaceCascades.load(“haarcascade_frontalface_alt.xml“))
return FALSE;
m_model = createEigenFaceRecognizer();
m_model->load(fName);
return TRUE;
}

BOOL CFaceRecognition::FaceDetect(cv::Mat srcImageint Label LPCTSTR szName LPCTSTR wdNmae int WaiteKey)
{
std::vector faces; //存储人脸的矩形
Mat edges;
Mat frame_gray;
if (srcImage.channels() == 1)
{
frame_gray = srcImage;
}
else
{
cvtColor(srcImage frame_gray CV_RGB2GRAY);
}
equalizeHist(frame_gray frame_gray); //直方图均衡化
m_FaceCascades.detectMultiScale(frame_gray faces 1.1 2 0 | CV_HAAR_SCALE_IMAGE Size(30 30));//寻找人脸
if (!faces.size())
{
imshow(wdNmae srcImage);
waitKey(WaiteKey);
return FALSE;
}
Mat* pImage_roi = new Mat[faces.size()]; //定以人脸图像数组
// string str;
for (int i = 0; i < faces.size(); i++)
{
pImage_roi[i] = frame_gray(faces[i]); //将所有的脸部保存起来
if (pImage_roi[i].empty())
{
delete[]pImage_roi;
return FALSE;
}

if (Predict(pImage_roi[i]) == Label) //每张图片进行识别
{
Scalar color = Scalar(m_rng.uniform(0 255) m_rng.uniform(0 255) m_rng.uniform(0 255));//所取的颜色任意值
rectangle(srcImage Point(faces[i].x faces[i].y) Point(faces[i].x + faces[i].width faces[i].y + faces[i].height) color 1 8);//放入缓存
putText(srcImage szName Point(faces[i].x faces[i].y) FONT_HERSHEY_COMPLEX 1 Scalar(0 0 255));//添加文字
}

}
delete[]pImage_roi;
imshow(wdNmae srcImage);
waitKey(WaiteKey);
return TRUE;
}


void CFaceRecognition::read_csv(const std::string & filename std::vector& images std::vector& labels char separator)
{
std::ifstream file(filename.c_str() ifstream::in);//c_str()函数可用可不用,无需返回一个标准C类型的字符串
if (!file) {
string error_message = “No valid input file was given please check the given filename.“;
CV_Error(CV_StsBadArg error_message);
}
string line path classlabel;
while (getline(file line))//从文本文件中读取一行字符,未指定限定符默认限定符为“/n”
{
stringstream liness(line);//这里采用stri

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    ..A..H.     25600  2017-12-02 10:45  face封装\.vs\Project2\v14\.suo

     文件       3548  2017-12-02 10:39  face封装\Project2\FaceRecognition.cpp

     文件       1073  2017-12-02 10:27  face封装\Project2\FaceRecognition.h

     文件     676709  2017-09-12 11:41  face封装\Project2\haarcascade_frontalface_alt.xml

     文件        415  2017-12-02 10:45  face封装\Project2\main.cpp

     文件   11928558  2017-12-02 10:40  face封装\Project2\MyTrain.xml

     文件       7192  2017-12-02 09:39  face封装\Project2\Project2.vcxproj

     文件       1172  2017-12-02 09:39  face封装\Project2\Project2.vcxproj.filters

     文件       1306  2017-12-02 08:39  face封装\Project2.sln

     目录          0  2017-12-02 08:39  face封装\.vs\Project2\v14

     目录          0  2017-12-02 08:39  face封装\.vs\Project2

    ...D.H.         0  2017-12-02 08:39  face封装\.vs

     目录          0  2017-12-02 11:01  face封装\Project2

     目录          0  2017-12-02 11:01  face封装

----------- ---------  ---------- -----  ----

             12645573                    14


评论

共有 条评论