Skip to content

sanqianyuejia/CSDK

Repository files navigation

声纹识别开发平台C SDK

作为一种核心的语音技术,声纹识别技术在通信技术、语音技术得到飞速发展的今天有着巨大的应用潜力,相关产品已经应用于公共安全、社保身份认证、社区矫正,金融投资服务领域的身份辨认,智能手机移动商务和行业用户满意度调查等不同领域。

声纹识别开发平台由快商通声纹(www.shengwenyun.com)研发,平台提供一个分布式声纹识别解决方案,可根据应用规模适当增减服务器,灵活性非常强大,在以下领域有成功案例:

  • 司法社区矫正
  • 远程教育身份认证
  • 高校教学实验平台

平台特征介绍

  • 文本相关,方便快捷。快商通声纹识别系统基于文本相关声纹识别,用户只需要一句简短口令,即可实时验证身份。
  • 领先算法,精准识别。采用独特的声纹识别处理算法,声纹验证准确率高达99.5%,支持防录音攻击、环境降噪、动态数字口令。
  • 分布式部署,扩展性强。分布式部署声纹识别服务器,支持上百万的声纹容量,易容扩展,而且可以根据应用规模适当调整硬件配置。
  • 简约API,快速集成。提供一组RestFul风格API,支持多终端、多平台集成调用。可针对特定语言定制SDK开发包。

快速上手

请参考以下步骤进行开发

  1. 申请api key和secret(请发邮件至lixm@shengwenyun.com,邮件标题置为“快商通声纹识别开发平台:API调用申请”)
  2. 参照example目录中的例子,编写应用程序
  3. 上线运营。上线之前,请联系管理员(lixm@shengwenyun.com

开发示例——注册说话人声纹

XVPR_CODE ret;			// 返回值
XVPR *handle;			// 引擎句柄
xvpr_result res;		// 识别结果

char checksum[64] = "";
xvpr_person_info person;	

short *buffer = NULL;	
short *valid_buffer = NULL;
size_t buf_len = 0;

XVAD *vad_handle = NULL;

static char *identifies = "4621d373cade4e83";	// 声纹库群组号,可为不同类型的任务分配不同的群组号
static char *name = "test";	// 说话人用户名

// 版本号
printf("VER: %s\n", xvpr_version());

// 全局初始化(全局只需调一次)
ret = xvpr_global_init();
if (XVPR_CODE_SUCCESS != ret) {
	printf("Init xbusiness-vpr failed. RET = %d\n", ret);
	return -1;
}
printf("Init xbusiness-vpr success.\n");
	
// 设置接口参数
xvpr_global_setparam("accesskey", "84cc0e5c525dc728e1769ad6663341c8");	// AK
xvpr_global_setparam("secretkey", "84cc0e5c525dc728e1769ad6663341c8");	// SK
xvpr_global_setparam("host", "127.0.0.1");		// 服务地址
xvpr_global_setparam("port", "81");					// 服务端口
xvpr_global_setparam("version", "1");				// 服务端引擎声纹版本号

// 获取声纹引擎句柄	
// 该句柄不能多线程共享,必须在每个线程独立获取
handle = xvpr_client_init(identifies/* 声纹库群组号 */);	
if (NULL == handle) {
	printf("Create VPR handle failed. RET = %d\n", ret);
	return -1;
}
printf("Create VPR handle success.\n");

// 删除说话人
ret = xvpr_remove_person(handle, name);	
if (XVPR_CODE_SUCCESS != ret) {
	printf("Remove speaker information failed. RET = %d\n", ret);
} else {
	printf("Remove speaker information success.\n");
}
	
// 创建说话人
ret = xvpr_create_person(handle/* 声纹引擎句柄 */, name/* 说话人用户名 */);
if (XVPR_CODE_SUCCESS != ret) {
	printf("Create speaker information failed. RET = %d\n", ret);
} else {
	printf("Create speaker information success.\n");
}

// 获取说话人信息
// 能得到该说话人是否已成功注册声纹
ret = xvpr_get_info(handle, name, &person);
if (XVPR_CODE_SUCCESS != ret) {
	printf("Get speaker information failed. RET = %d\n", ret);
	return -1;
}
printf("Get speaker information success.\n");

// 读取语音信息
buf_len = xvpr_aid_read_buffer(argv[1], 50, &buffer);	// 语音参数
if (buf_len <= 0) {
	printf("Read speech buffer failed. RET = %d\n", buf_len);
	return -1;
}
printf("Read speech buffer success.\n");

// 创建端点检测实例
vad_handle = xvpr_vad_create_vad(8000);
if (NULL == vad_handle) {
	printf("Create VAD handle failed. RET = %d\n", vad_handle);
	return -1;
}
printf("Create VAD handle success.\n");

// 进行有效语音检测
buf_len = xvpr_vad_detect_valid_speech(vad_handle, buffer, buf_len, &valid_buffer);
if (buf_len <= 0) {
	printf("No speech detected. RET = %d\n", buf_len);
	return -1;
}
printf("Detected valid speech success.\n");

// 为说话人添加语音(注意:需要添加3条或以上语音)	
ret = xvpr_add_speech(handle, name, "codec:pcm/raw;sr:8000;verify:true;rule:*", buffer, buf_len, checksum);
if (XVPR_CODE_SUCCESS != ret) {
	printf("Add speech failed. RET = %d\n", ret);
	return -1;
}
printf("Add speech success.\n");

// 注册声纹
ret = xvpr_register_person(handle, name);
if (XVPR_CODE_SUCCESS != ret) {
	printf("Register speaker failed. RET = %d\n", ret);
	return -1;
}
printf("Register speaker success.\n");

// 声纹确认
ret = xvpr_verify_person(handle, name, "codec:pcm/raw;sr:8000;verify:true;rule:*", buffer, buf_len, &res);
if (XVPR_CODE_SUCCESS != ret) {
	printf("Verify speaker failed. RET = %d\n", ret);
	return -1;
}
printf("Verify speaker success. name=%s, similarity=%2f\n", res.name, res.similarity);

// 声纹辨认
ret = xvpr_identify_person(handle, "codec:pcm/raw;sr:8000;verify:true;rule:*", buffer, buf_len, &res);
if (XVPR_CODE_SUCCESS != ret) {
	printf("Identify speaker failed. RET = %d\n", ret);
	return -1;
}
printf("Identify speaker success. name=%s, similarity=%2f\n", res.name, res.similarity);

// 释放内存
xvpr_aid_release_buffer(&buffer);
xvpr_aid_release_buffer(&valid_buffer);
xvpr_global_release();

#if defined(WIN32) && !defined(GNUWINCE)
getch();
#else
getchar();	
#endif
return 0;

错误代码对照表

错误代码 错误信息 详细描述
0000 call succeed 调用成功
0001 call fail 调用失败
0002 connect error 链接错误
0003 parameters error 参数设置错误
1001 Auth fail Key或Secret错误
1002 network error 网络错误
1003 internal error 未知错误
1004 argument error 参数错误
1005 database error 数据库错误
1006 system file lost 系统文件丢失
2001 person already exist 说话人已存在
2002 person not exist 说话人不存在
2003 has no persons 没有任何说话人
2004 person has no speeches 该说话人没有登记语音
3001 voiceprint state error 声纹训练状态错误
3002 voiceprint already registered 说话人声纹已注册
3003 voiceprint has no speeches 该说话人不存在登记语音
3004 verify error 验证异常
3005 voiceprint not trained 没有登记声纹
3006 identify error 声纹辨认发生错误
4001 speech too short 语音太短
4002 speech too long 语音太长
4003 speech sample rate error 语音采样率错误,目前仅支持8k
4004 speech already exist 语音已存在
4005 speech not exist 语音不存在
4006 speech process error 语音处理错误
5001 asr recognize error 语音识别错误
5002 asr not matched 语音内容不匹配

下载

从 release 版本下载

下载地址:https://github.com/sanqianyuejia/CSDK/releases

许可证

Copyright (c) 2013 快商通信息技术有限公司

基于 MIT 协议发布:

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published