基于讯飞“声纹识别”的本地登录的实现

一. 成果展示(以文本密码为例)

物联网
物联网
物联网
物联网

  二. 具体操作步骤 1. 预备工作

  ①导入声纹识别 sdk 并新建一个 andriod 工程。

  ②将 IsvDemo 中 libs 目录下的 Msc.jar 和 armeabi 复制到新建的 Android工程的 libs 目录中,如下图所示:

物联网

  2. 添加用户权限

  > <uses-permission< p="">

  > android:name="android.permission.INTERNET"/>

  > <uses-permission< p="">

  > android:name="android.permission.RECORD_AUDIO"/>

  > <uses-permission< p="">

  > android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission< p="">

  > android:name="android.permission.ACCESS_WIFI_STATE"/>

  > <uses-permission< p="">

  > android:name="android.permission.READ_CONTACTS"/>

  >

  > <uses-permissionandroid:name="android.permission.write_external_storage">

  3 调用声纹识别的接口 3.1 声纹注册 现阶段语音云平台支持三种类型的声纹密码,即文本密码、自由说和数字密码,在注册之前要选择声纹的类型。

  // 首先创建 SpeakerVerifier 对象

  mVerify = SpeakerVerifier. createVerifier ( this, null);

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

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

  pwdType 的取值说明如下表所示:

  ![图片描述](http://img.blog.csdn.net/20160720152235059)

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

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

  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) {}

  };

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

  // 设置业务类型为训练

  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. AUTH_ID , auth_id);