用c++封装了一个标准C的离线人脸识别dll
明智虹宇 发布于2018-08 浏览:12609 回复:5
0
收藏
最后编辑于2018-10

用c++封装了一个标准C的离线人脸识别dll,但是调用几次识别之后就自动退出了。请官方大神旁助:

这是h文件

#pragma once
#include "baidu_face_api.h"

#ifdef BAIDUFACEDLL_EXPORTS
#define BAIDUFACEDLL_API __declspec(dllexport)
#else
#define BAIDUFACEDLL_API __declspec(dllimport)
#endif

EXTERN_C BAIDUFACEDLL_API int Add(int a, int b);
EXTERN_C BAIDUFACEDLL_API int Init();
EXTERN_C BAIDUFACEDLL_API void UnInit();
EXTERN_C BAIDUFACEDLL_API int UserAdd(const char* user_id, const char* image, char** res);
EXTERN_C BAIDUFACEDLL_API int UserDelete(const char* user_id, char** res);
EXTERN_C BAIDUFACEDLL_API int Identifier(const char* imgstr, char** res);
EXTERN_C BAIDUFACEDLL_API int RgbLivenessCheck(const char* imgstr, char** res);

这是cpp文件

#include "stdafx.h"
#include "BaiduFaceDll.h"
using namespace std;

static BaiduFaceApi *api;
//测试程序
BAIDUFACEDLL_API int Add(int a, int b) {
	return a + b;
}
//初始化sdk
//返回值		dll返回值
BAIDUFACEDLL_API int Init()
{
	api = new BaiduFaceApi();
	return api->sdk_init();
}
//销毁sdk
BAIDUFACEDLL_API void UnInit() 
{
	delete api;
}
//添加用户
//user_id	用户id,字母、数字、下划线组成,最多128个字符
//image		图片的base64值
//res		返回dll值
//返回值		1表示正常0表示异常
BAIDUFACEDLL_API int UserAdd(const char* user_id, const char* image,char** res)
{
	try {
		const char* rv = api->user_add(user_id, "group_1", image, 1);
		strcpy(*res, rv);
		return 1;
	}
	catch (exception ex) {
		return 0;
	}
}
//删除用户
//user_id	用户id,字母、数字、下划线组成,最多128个字符
//res		返回dll值
//返回值		1表示正常0表示异常
BAIDUFACEDLL_API int UserDelete(const char* user_id, char** res)
{
	try {
		const char* rv = api->user_delete(user_id, "group_1");
		strcpy(*res, rv);
		return 1;
	}
	catch (exception ex) {
		return 0;
	}
}
//人脸识别
//image		图片的base64值
//res		返回dll值
//返回值		1表示正常0表示异常
BAIDUFACEDLL_API int Identifier(const char* imgstr, char** res)
{
	try
	{
		const char* rv = api->identify(imgstr, 1, "group_1", "");
		strcpy(*res, rv);
		return 1;
	}
	catch (exception ex)
	{
		return 0;
	}
}
//rgb活体检测
//image		图片的base64值
//res		返回dll值
//返回值		1表示正常0表示异常
BAIDUFACEDLL_API int RgbLivenessCheck(const char* imgstr, char** res)
{
	try
	{
		const char* rv = api->rgb_liveness_check(imgstr, 1);
		strcpy(*res, rv);
		return 1;
	}
	catch (exception ex)
	{
		return 0;
	}
}
收藏
点赞
0
个赞
共5条回复 最后由彦丶子凡回复于2018-10
#6彦丶子凡回复于2018-10
#5 花心小贼贼回复
我也遇到调用几次就自动退出。怎么回事? [图片]

掉一下堆栈看看啊

0
#5花心小贼贼回复于2018-10

我也遇到调用几次就自动退出。怎么回事?

0
#4彦丶子凡回复于2018-10

问题描述清楚一点,自动退出?还是有error?

0
#3lichao_86回复于2018-10

也有可能是调用错误,导致库异常

0
#2oyefer回复于2018-09

你把调用代码贴一下。

我感觉问题可能出在指针越界,或者多线程同时访问api接口造成冲突。

0
TOP
切换版块