基于虹软人脸识别API和Qt5的人脸识别

测试和使用了虹软的人脸API在QT5环境下设计了一个简单的人脸识别软件,实现了对人脸的跟踪和人脸识别。摄像头的控制以及图像格式的转换使用了Opencv,图像显示使用的是QT5的Qimage控件。下面是详细介绍

1基本流程

  (1)加载存储的参考图像数据和图像标签,这里简单的使用图像的名字作为标签

  (2)使用虹软人脸识别API计算参考图像的人脸位置数据并存储

  (3)使用opencv  VideoCapture  类采集摄像头图像数据

  (2)采集的图像数据送入虹软人脸识别API 计算人脸位置,并和参考人脸数据计算相似距离,返回最相似的人脸标签

2 Visual Studio 下构建Qt工程

(1)工程目录如下图所示:
在这里插入图片描述
其中QtGuiApplication1.ui是界面文件,Header File文件夹中的amcomdef.h

ammem.h arcsoft_fsdk_face_detection.h arcsoft_fsdk_face_recognition.h

asvloffscreen.h merror.h 是从虹软库中拷贝的头文件未做任何修改

FaceDiscern.h 和FaceDiscern.cpp是自定义的一个人脸识别类

(2)工程属性配置

点击工程属性->连接器->输入中出了QT5的库文件,添加opencv_world340d.lib
在这里插入图片描述
点击工程属性-》VC++目录添加OpenCV的头文件和库文件的路径,其中包含目录添加opencv的头文件路径,库目录添加opencv的dll路径,如下图
在这里插入图片描述
2工程类文件详解

 (1)QtGuiApplication1 ui类的源文件如下所示,其中Mat2QImage函数将opencv采集的图像数据转化为QImage支          持    的数据格式, VideoCapture 是Opencv用来操作摄像头的类,QImage用来显示采集的图像数据

#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_QtGuiApplication1.h"
#include "qmessagebox.h"
#include "opencv2/core/core.hpp"  
#include "opencv2/highgui/highgui.hpp"  
#include "opencv2/imgproc/imgproc.hpp"  
#include <iostream>
#include "qtimer.h"
#include "FaceDiscern.h"
#include "qrect.h"
#include "qpainter.h"
using namespace cv;
using namespace std;
class QtGuiApplication1 : public QMainWindow
{
	Q_OBJECT
public:
	QtGuiApplication1(QWidget *parent = Q_NULLPTR);
	~QtGuiApplication1();
	QImage  Mat2QImage(cv::Mat cvImg); //图像格式转换
	QTimer  *timer;
	Mat     frame;            //摄像头直接获得的数据
	FaceDiscern *facediscern; //人脸识别类
private:
	Ui::QtGuiApplication1Class ui;
	VideoCapture capture; //采集摄像头的数据
	QImage qImg;          //展示图像的控件
	//---槽函数 用作事件触发
public slots :
		void openVideo();
		void stopVideo();
		void nextFrame();
 
};

(2)QtGuiApplication1.cpp


#include "QtGuiApplication1.h"
 
QtGuiApplication1::QtGuiApplication1(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	ui.image->setScaledContents(true);  //fit video to label area
	facediscern = new FaceDiscern("F:\\trainimages");//加载参考图像数据和标签
	facediscern->Train();//计算参考数据图像数据的人脸位置等
	
}
 
QtGuiApplication1::~QtGuiApplication1()
{
	if (capture.isOpened())
		capture.release();
	delete(timer);
}
 
void QtGuiApplication1::openVideo()
{
	if (capture.isOpened())
		capture.release();     //decide if capture is already opened; if so,close it
	capture.open(0);           //open the default camera
	if (capture.isOpened())
	{
		double  rate = capture.get(CV_CAP_PROP_FPS);
		capture >> frame;  //获得摄像头图像数据
		if (!frame.empty())
		{
			QImage  image = Mat2QImage(frame); //将摄像头的图像数据转换为QImage支持的格式
			this->ui.image->setPixmap(QPixmap::fromImage(image));
 
			timer = new QTimer(this); //循环获得摄像头数据
			connect(timer, SIGNAL(timeout()), this, SLOT(nextFrame()));
			timer->start(40);
		}
	}
}
void QtGuiApplication1::stopVideo()
{
	if (capture.isOpened())
	{
		capture.release();
	}
}
//循环获得摄像头数据
void QtGuiApplic
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值