setting alipay wechat success appmanage dollor user cart order workorder logout left1 left2 app unfree free chart coupon note copy pencil price-tag database cog bin list link plus minus codepen 审核 cross table search user-tie eye github cancel-circle checkmark icon-upload icon-smartphon icon-auth-user icon-arroba-symbol icon-check-pass icon-red-cross icon-pwd-key icon-used icon-expired android appleinc tux windows8 java webAPI mail vip

    # 声纹识别 Android SDK 文档

    # 1、简介

    声纹识别(Voiceprint Recognition),是一项提取说话人声音特征和说话内容信息,自动核验说话人身份的技术。MSC SDK 声纹识别(IdentityVerfier)的使用包括注册(训练)、验证和模型操作。类似于一个网站的用户登录一样,用户必须先注册,才能登录(验证),在用户忘记密码时,可以提供重设密码的操作(模型操作)。

    语音合成详细的接口介绍及说明请参考: MSC Android API 文档, 在集成过程中如有疑问,可登录讯飞开放平台论坛,查找答案或与其他开发者交流。

    # 2、SDK集成指南

    # 1、导入SDK

    将在官网下载的Android SDK 压缩包中libs目录下所有子文件拷贝至Android工程的libs目录下。如下图所示:

    注:

    1. arm版本已经逐步淘汰了,arm架构的推荐使用armeabi-v7a。
    2. 如果您需要将应用push到设备使用,请将设备cpu对应指令集的libmsc.so push到/system/lib中。

    # 2、添加用户权限

    在工程 AndroidManifest.xml 文件中添加如下权限

    <!--连接网络权限,用于执行云端语音能力 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <!--读取网络信息状态 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!--获取当前wifi状态 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <!--允许程序改变网络连接状态 -->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <!--读取手机信息权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <!--读取联系人权限,上传联系人需要用到此权限 -->
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <!--外存储写权限,构建语法需要用到此权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!--外存储读权限,构建语法需要用到此权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <!--配置权限,用来记录应用配置信息 -->
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务-->
    <!--定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <!--如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 -->
    <uses-permission android:name="android.permission.CAMERA" />
    

    注意:如需在打包或者生成APK的时候进行混淆,请在proguard.cfg中添加如下代码:

    -keep class com.iflytek.**{*;}
    -keepattributes Signature
    

    # 3、初始化

    初始化即创建语音配置对象,只有初始化后才可以使用MSC的各项服务。建议将初始化放在程序入口处(如Application、Activity的onCreate方法),初始化代码如下:

    // 将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn
    // 请勿在“=”与appid之间添加任何空字符或者转义符
    SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");
    

    # 3.获取注册密码

    目前 MSC SDK 支持两种类型的声纹密码:数字密码和文本密码。文本密码的效果在优化中,建议使用数字密码。密码类型的取值说明如下表所示:

    • 文本密码。用户通过读出指定的文本内容来进行声纹注册和验证,现阶段不支持。
    • 自由说。用户通过录入一段任意20s以上音频进行注册,验证时录入任意5s以上音频即可完成验证,现阶段不支持。
    • 数字密码。从云端拉取若干组特定的数字串(默认有5组,每组8位数字),用户依次读出这5组数字进行注册,在验证过程中会生成一串特定的数字,用户通过读出这串数字进行验证。
    // 设置会话场景
    mIdVerifier.setParameter(SpeechConstant.MFV_SCENES, "ivp");
    
    // 子业务执行参数,若无可以传空字符传
    StringBuffer params = new StringBuffer();
    // 设置模型操作的密码类型
    params.append("pwdt=" + mPwdType + ",");
    // 执行密码下载操作
    mIdVerifier.execute("ivp", "download", params.toString(), mDownloadPwdListener);
    

    # 4.声纹注册

    根据返回的注册密码,来进行声纹注册。应用通过 mEnrollListener的 onResult 方法来处理注册结果。在结果result中携带了一个返回码(0表示成功,-1为失败)和错误码(具体错误码信息,请查看这里

    参数说明

    • 用户ID(AUTH_ID):标识每个使用声纹功能的终端用户的唯一ID 注:长度为6-18个字符(由英文字母、数字、下划线组成,不能以数字开头),不支持中文字符。
    • 业务类型(MFV_SST):用来标识本次会话是注册还是验证
    • 密码类型(MFV_PWDT)
    • 密码(MFV_PWD):进行声纹注册(训练)时传入的密码
    • 模型操作命令(CMD):进行声纹模型查询和删除
    • 注册次数(MFV_RGN):声纹训练次数 不同 APPID 的用户 ID 相互独立,即不同的 APPID 可以用相同的用户 ID——他们注册的模型也相互独立。如果您的项目使用了多个appid(例如分Android和iOS两个app版本),需要多个appid的用户id数据打通,可以通过文章末尾的技术支持联系方式与我们联系。
    // 设置会话场景
    mIdVerifier.setParameter(SpeechConstant.MFV_SCENES, "ivp");
    // 设置会话类型
    mIdVerifier.setParameter(SpeechConstant.MFV_SST, "enroll");
    // 设置训练次数(可以不做设置,sdk中默认设置为5次)
    mIdVerifier.setParameter(SpeechConstant.MFV_RGN, "5");
    // 用户id
    mIdVerifier.setParameter(SpeechConstant.AUTH_ID, authid);
    // 设置监听器,开始会话
    mIdVerifier.startWorking(mEnrollListener);
    

    # 5.声纹验证

    根据mVerifyListener的onResult方法,得到识别结果

    // 清空参数
    mIdVerifier.setParameter(SpeechConstant.PARAMS, null);
    // 设置会话场景
    mIdVerifier.setParameter(SpeechConstant.MFV_SCENES, "ivp");
    // 设置会话类型
    mIdVerifier.setParameter(SpeechConstant.MFV_SST, "verify");
    // 验证模式,单一验证模式:sin
    mIdVerifier.setParameter(SpeechConstant.MFV_VCM, "sin");
    // 用户的唯一标识,在声纹业务获取注册、验证、查询和删除模型时都要填写,不能为空
    mIdVerifier.setParameter(SpeechConstant.AUTH_ID, authid);
    // 设置监听器,开始会话
    mIdVerifier.startWorking(mVerifyListener);
    

    # 6.模型操作

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

    // 设置会话场景
    mIdVerifier.setParameter(SpeechConstant.MFV_SCENES, "ivp");
    // 用户id
    mIdVerifier.setParameter(SpeechConstant.AUTH_ID, authid);
    // 子业务执行参数,若无可以传空字符传
    StringBuffer params3 = new StringBuffer();
    // 设置模型操作的密码类型
    params3.append("pwdt=" + mPwdType + ",");
    // 执行模型操作,cmd 取值为"query","delete",分别表示查询和删除
    mIdVerifier.execute("ivp", cmd, params3.toString(), mModelListener);
    

    # 7.1:N检索

    鉴别与验证的过程相似,不过鉴别需要设置组 ID,以指定要鉴别的组。 其参数设置如下:

    // 设置业务场景
    mIdVerifier.setParameter( SpeechConstant.MFV_SCENES, "ivp" ); 
    // 设置业务类型:鉴别(identify)
    mIdVerifier.setParameter( SpeechConstant.MFV_SST, "identify" );
    // 设置监听器,开始会话
    mIdVerifier.startWorking( listener );
    // 指定组id,最相似结果数
    String params = "group_id="+groudID
    while( !isDataFinished ){
    // 写入数据
    mIdVerifier.writeData( scence, params, data, offset, length );
    }
    mIdVerifier.stopWrite( scence );
    

    # 8.声纹结果

    数字密码JSON示例

    {"num_pwd":["03285469","09734658","53894276","57392804","68294073"]}
    

    声纹业务结果(VerifierResult)成员说明

    成员 说明
    sst 业务类型,取值为train或verify
    ret 返回值,0为成功,-1为失败
    vid 注册成功的声纹模型id
    voice_score 当前声纹相似度
    suc 本次注册已成功的训练次数
    rgn 本次注册需要的训练次数
    ssub 业务类型为ivp
    err 注册/验证返回的错误码
    decision 描述信息,accepted:验证成功,rejected:验证失败

    声纹1:N检索

    JSON字段 类型 说明
    sst String 业务类型,鉴别业务为identify
    ssub String 子业务类型,取值:ivp:声纹;ifr:人脸。
    ret int 返回值,0为请求成功,其他为请求失败
    group_id String 本次鉴别的成员组id
    group_name String 本次鉴别的成员组id对应的组名称
    topc int 本次鉴别返回的结果数
    model_id String 模型id
    decision String accepted:匹配成功,rejected:匹配失败
    score double 匹配相似度
    user_name String 该模型对应用户名
    {
        "ret": 0,
        "group_id": "xxxxxx",
        "group_name": "xxxxxx",
        "ifv_result": {
            "candidates": [
                {
                    "model_id": "xxxxxxxx",
                    "decision": "accepted",
                    "score": 88.888888,
                    "user": "user_name"
                }
            ]
        },
        "sst": "identify",
        "ssub": "ivp",
        "topc": 1
    }
    

    # 3、视频教程

    声纹识别-SDK集成指南Android

    # 4、常见问题

    # 声纹识别的主要功能是什么,可以过滤不需要的噪音吗?

    答:声纹识别,是一项提取说话人声音特征和说话内容信息,自动核验说话人身份的技术。不具有过滤声音的功能。

    # 声纹识别支持什么应用平台?

    答:目前声纹识别支持Android/iOS应用平台。

    # 声纹识别支持什么语言?

    答:目前声纹识别支持的语言是:中文数字。

    # 声纹识别是否支持离线?

    答:目前还没有离线声纹识别功能。

    # 安卓声纹sdk如何下载试用?

    答:文档中心---快速指引有介绍步骤根据步骤下载声纹sdk

    # 声纹识别如何试用免费次数?免费次数是多少?

    答:登录讯飞开放平台---控制台---我的应用(没有应用先创建一个应用)---其他---声纹识别---服务管理(可免费调用SDK接口500次服务量/日)