虹软人脸识别C++ demo

前几天在偶然网上看到虹软人脸识别的的SDK,可以离线使用,故下载下来体验了一样,效果还是挺不错的,下面将本人使用安装使用的过程记录于此,方便参考!

首先去虹软官网下载SDK开发包,这个需要实名注册一下,不过还是挺快的。下面本人以vs2015为例,本人下载的是64位的,32位的配置也一样,展开详细介绍。

 

将官网下载的开发包解压,新建一个项目,然后点击项目属性,将inc目录的头文件添加到附加包含目录里面

同理添加附加库目录,如下图所示

附加依赖项:

 

将两个dll复制到程序运行的目录里面

按照上面的步骤配置完环境后,接下来进行测试(图片的读取要用到opencv,我就假设大家opencv配置均不存在问题),下面的代码为我参考的官方给的一些资料,但是我用的opencv是3.4的,因此程序有些小小的改动,具体可参考如下的代码!

#include<iostream>
#include<opencv2/opencv.hpp>
#include "arcsoft_face_sdk.h"
#include "amcomdef.h"
#include "asvloffscreen.h"
#include "merror.h"
#include <iostream>  
#include <stdarg.h>
#include <string>

using namespace std;
using namespace cv;
#pragma comment(lib, "libarcsoft_face_engine.lib")

#define APPID "官网下载的APPID"
#define SDKKey "官网下载的APPKEY"

#define MERR_ASF_BASE_ALREADY_ACTIVATED 90114
#define SafeFree(p) { if ((p)) free(p); (p) = NULL; }
#define SafeArrayDelete(p) { if ((p)) delete [] (p); (p) = NULL; } 
#define SafeDelete(p) { if ((p)) delete (p); (p) = NULL; } 

int main()
{
	//激活SDK
	MRESULT res = ASFActivation(APPID, SDKKey);
	if (res!= MOK && MERR_ASF_BASE_ALREADY_ACTIVATED != res)
		printf("ALActivation fail: %d\n", res);
	else
		printf("ALActivation sucess: %d\n", res);

	//初始化引擎
	MHandle handle = NULL;
	MInt32 mask = ASF_FACE_DETECT | ASF_FACERECOGNITION | ASF_AGE | ASF_GENDER | ASF_FACE3DANGLE;
	res = ASFInitEngine(ASF_DETECT_MODE_IMAGE, ASF_OP_0_ONLY, 16, 5, mask, &handle);
	if (res != MOK)
		printf("ALInitEngine fail: %d\n", res);
	else
		printf("ALInitEngine sucess: %d\n", res);

	Mat img = imread("c:\\users\\x\\desktop\\人脸识别\\m.jpg");
	ASF_MultiFaceInfo detectedFaces1;
	ASF_SingleFaceInfo SingleDetectedFaces1 ;
	ASF_FaceFeature feature1 ;
	ASF_FaceFeature copyfeature1 ;
	res = ASFDetectFaces(handle, img.cols, img.rows, ASVL_PAF_RGB24_B8G8R8, (MUInt8*)img.ptr<uchar>(0), &detectedFaces1);
	if (MOK == res)
	{
		//负责检测单张人脸
		SingleDetectedFaces1.faceRect.left = detectedFaces1.faceRect[0].left;
		SingleDetectedFaces1.faceRect.top = detectedFaces1.faceRect[0].top;
		SingleDetectedFaces1.faceRect.right = detectedFaces1.faceRect[0].right;
		SingleDetectedFaces1.faceRect.bottom = detectedFaces1.faceRect[0].bottom;
		SingleDetectedFaces1.faceOrient = detectedFaces1.faceOrient[0];
		int a = SingleDetectedFaces1.faceRect.left;
		int b = SingleDetectedFaces1.faceRect.right;
		int c = SingleDetectedFaces1.faceRect.top;
		int d = SingleDetectedFaces1.faceRect.bottom;
		rectangle(img, Rect(a, c, (b - a), (d - c)), Scalar(0, 0, 255), 4);
		imshow("out", img);
		waitKey(20);
	}

		// 人脸信息检测
		MInt32 processMask = ASF_AGE | ASF_GENDER | ASF_FACE3DANGLE;
		res = ASFProcess(handle, img.cols, img.rows, ASVL_PAF_RGB24_B8G8R8, (MUInt8*)img.ptr<uchar>(0), &detectedFaces1, processMask);
		if (res == MOK)
		{
			cout << "人脸信息检测成功" << endl;
		}
		// 获取年龄
		ASF_AgeInfo ageInfo = { 0 };
		res = ASFGetAge(handle, &ageInfo);
		if (res != MOK)

			printf("ASFGetAge fail: %d\n", res);
			
		else
			cout <<"年龄检测结果:"<< *ageInfo.ageArray << endl;

		// 获取性别
		ASF_GenderInfo genderInfo = { 0 };
		res = ASFGetGender(handle, &genderInfo);
		if (res != MOK)
			printf("ASFGetGender fail: %d\n", res);

		else
		{
			if (*genderInfo.genderArray == 0)
			{
				cout << "性别检测结果:男性" << endl;
			}
			if (*genderInfo.genderArray == 1)
			{
				cout << "性别检测结果:女性" << endl;
			}
		}
		// 获取3D角度
		ASF_Face3DAngle angleInfo = { 0 };
		res = ASFGetFace3DAngle(handle, &angleInfo);
		if (res != MOK)
			cout << "获得3D角度失败" << endl;
		else
			cout << "roll=" << angleInfo.roll[0] << endl;
			cout << "yaw=" << angleInfo.yaw[0] << endl;
			cout << "pitch=" << angleInfo.pitch[0] << endl;



	system("pause");
	return 0;
}

下面是我运行上述程序的结果!

 

 

 

 

上述的就是简单的一个C++ demo,更多的用法还可参考官网开发文档,祝大家体验愉快!

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值