java 声纹 识别_中国移动灵犀云声纹识别SDK(android)使用指南

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

如果有需要在应用中集成声纹识别功能或服务,用于用户身份鉴权或登录认证等用途的,下面介绍一下利用灵犀云语音平台的SDK(android)实现声纹识别的方法:

与指纹一样,声纹也是一种独一无二的生理特征,可以用来鉴别用户的身份。声纹密码的使用

包括以下过程:

1. 初始化

创建用户语音配置对象后才可以使用声纹服务,建议在程序入口处调用。

[java]

//将“12345678”替换成您申请的APPID,申请地址:http://dev.10086.cn/

SpeechUtility.createUtility(context,SpeechConstant.APPID+"=12345678");

2. 声纹注册

现阶段支持三种类型的声纹密码,即文本密码、自由说和数字密码,在注册之前要选择声纹的类型。

[java]

// 首先创建SpeakerVerifier对象

mVerify = SpeakerVerifier.createVerifier(this, null);

// 通过setParameter设置密码类型,pwdType的取值为1、2、3,分别表示文本密码、自由说和数字密码

mVerify.setParameter(SpeechConstant.ISV_PWDT, "" + pwdType);

pwdType的取值说明如下所示

1 文本密码。用户通过读出指定的文本内容来进行声纹注册和验证,现阶段支持的文本有“芝麻开门”。

2 自由说密码。用户通过读一段文字来进行声纹注册和验证,注册时要求声音长度为20秒左右,验证时要求15秒左右,内容不限。

3 数字密码。从云端拉取若干组特定的数字串(默认有5组,每组8位数字),用户依次读出这5组数字进行注册,在验证过程中会生成一串特定的数字,用户通过读出这串数字进行验证。

除自由说外,其他两种密码需调用接口从云端获取:

[java]

// 通过调用getPasswordList方法来获取密码。mPwdListener是一个回调接口,当获取到密码后,SDK会调用其中的onBufferReceived方法对云端返回的JSON格式(具体格式见附录(4))的密码进行处理,处理方法详见

声纹Demo示例

[java]

mVerify.getPasswordList(SpeechListener mPwdListener);

SpeechListener mPwdListenter = new SpeechListener() {

public void onEvent(int eventType, Bundle params) {}

public void onBufferReceived(byte[] buffer) {}

public void onCompleted(SpeechError error) {}

};

获取到密码后,接下来进行声纹注册,即要求用户朗读若干次指定的内容,这一过程也称为声纹模型的训练。

[java]

// 设置业务类型为训练

mVerify.setParameter(SpeechConstant.ISV_SST, "train");

// 设置密码类型

mVerify.setParameter(SpeechConstant.ISV_PWDT, "" + pwdType);

// 对于文本密码和数字密码,必须设置密码的文本内容,pwdText的取值为“芝麻开门”或者是从云端拉取的数字密码(每8位用“-”隔开,如

“62389704-45937680-32758406-29530846-58206497”)。自由说略过此步

mVerify.setParameter(SpeechConstant.ISV_PWD, pwdText);

// 对于自由说,必须设置采样频率为8000,并设置ISV_RGN为1。其他密码可略过此步

mVerify.setParameter(SpeechConstant.SAMPLE_RATE, "8000");

mVerify.setParameter(SpeechConstant.ISV_RGN, "1");

// 设置声纹对应的auth_id,它用于标识声纹对应的用户,为空时表示这是一个匿名用户

mVerify.setParameter(SpeechConstant.ISV_AUTHID, auth_id);

// 开始注册,当得到注册结果时,SDK会将其封装成VerifierResult对象,回调VerifierListener对象listener的onResult方法进行处理,处理方法详见Demo示例

mVerify.startListening(mRegisterListener);

VerifierListener mRegisterListener =new VerifierListener() {

public void onVolumeChanged(int volume) {}

public void onResult(VerifierResult result) {

public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {}

public void onError(SpeechError error) {}

public void onEndOfSpeech() {}

public void onBeginOfSpeech() {}

};

注意,当auth_id为空时(匿名用户),将使用设备的设备ID来标识注册的声纹模型。由于设备ID不能跨设备,而且不同的设备所获取到的设备ID也有可能相同,推荐的作法是在注册模型的时为app的每个用户都指定一个唯一的auth_id。auth_id的格式为:6-18个字符,为字母、数字和下划线的组合且必须以字母开头,不支持中文字符,不能包含空格。

开发者通过声明一个VerifierListener对象并重写onResult方法来处理注册结果。在结果result中携带了一个返回码(0表示成功,-

1为失败)和错误码,用来判别注册是否成功以及出错原因,错误码的含义如下:

错误码 说明

MSS_ERROR_IVP_GENERAL 正常,请继续传音频

MSS_ERROR_IVP_EXTRA_RGN_SOPPORT rgn超过最大支持次数9

MSS_ERROR_IVP_TRUNCATED 音频波形幅度太大,超出系统范围,发生截幅

MSS_ERROR_IVP_MUCH_NOISE 太多噪音

MSS_ERROR_IVP_TOO_LOW 声音太小

MSS_ERROR_IVP_ZERO_AUDIO 没检测到音频

MSS_ERROR_IVP_UTTER_TOO_SHORT 音频太短

MSS_ERROR_IVP_TEXT_NOT_MATCH 音频内容与给定文本不一致

MSS_ERROR_IVP_NO_ENOUGH_AUDIO 音频长达不到自由说的要求

验证结果VerifierResult类中有一个vid字段,用于标识成功注册的声注模型。结果中包含的所有字段,以及各字段的含义见附录(4)。

3. 声纹验证

声纹验证过程与声纹注册类似,不同之处仅在于ISV_SST需要设置为“verify”,且不用设置ISV_RGN参数,其他参数的设置、验证结果的处理过程完全可参考上一节。

另外,为了达到较好的效果,请在声纹注册与验证过程中尽量与麦克风保持同样的距离(建议的最佳距离是15厘米左右)。如果距离差距较大的话,可能会对验证通过率产生较大影响。

4. 声纹模型操作

声纹注册成功后,在语音云端上会生成一个对应的模型来存储声纹信息,声纹模型的操作即对模型进行查询和删除。

[java]

// 首先设置声纹密码类型

mVerify.setParameter(SpeechConstant.ISV_PWDT, "" + pwdType);

// 对于文本和数字密码,必须设置声纹注册时用的密码文本,pwdText的取值为“芝麻开门”或者是从云平台拉取的数字密码。自由说略过此步

mVerify.setParameter(SpeechConstant.ISV_PWD, pwdText);

// 特别地,自由说一定要设置采样频率为8000,其他密码则不需要

mVerify.setParameter(SpeechConstant.SAMPLE_RATE, “8000”);

// 设置待操作的声纹模型的vid

mVerify.setParameter(SpeechConstant.ISV_VID, vid);

// 调用sendRequest方法查询或者删除模型,cmd的取值为“que”或“del”,表示查询或者删除,auth_id是声纹对应的用户标识,操作结果以异步方式回调SpeechListener类型对象listener的onBufferReceived方法进行处理,处理方法详见Demo示例

mVerify.sendRequest(cmd, auth_id, listener);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值