
# 调用Java SDK实现一句话识别
语音交互服务软件开发工具包（SIS SDK）是对语音交互服务提供的REST API进行的封装，用户直接调用语音交互SDK提供的接口函数即可实现使用语音交互业务能力的目的，以简化用户的开发工作。
本章节提供了通过Java SDK调用一句话识别服务的样例，帮助用户快速了解如何使用Java SDK调用华为云SIS服务。具体操作如下所示：
[步骤1：配置环境]
[步骤2：修改配置信息]
[步骤3：调用一句话识别]
#### 准备工作
注册华为账号并开通华为云，并完成实名认证，账号不能处于欠费或冻结状态。
#### 操作须知
语音交互服务的API接口已全部商用，无需开通，可直接调用。调用费用请参见[语音交互价格计算器](https://www.huaweicloud.com/pricing.html#/sis)
 #### 步骤1：配置环境
1. 下载SIS Java SDK。 下载地址：<https://sis-sdk-repository.obs.cn-north-1.myhuaweicloud.com/java/huaweicloud-java-sdk-sis-1.8.2.zip>
   
2. 准备Java开发环境。
   - 从[Oracle官网](http://www.oracle.com/technetwork/java/archive-139210.html)下载并安装JDK。版本要求：强烈推荐使用1.8版本。
   
   - 从[Eclipse官网](http://www.eclipse.org/downloads/eclipse-packages/)下载并安装Eclipse IDE for Java Developers最新版本，例如：eclipse-jee-mars-R-win32-x86_64.zip。
   
   - 在[Idea官网](https://www.jetbrains.com/zh-cn/idea/)下载对应平台的idea版本，比如：ideaIU-2023.2.2.exe。
   
   
   具体操作请参见[配置Java环境](https://support.huaweicloud.com/sdkreference-sis/sis_05_0041.html)章节。
   
3. 新建SIS Java SDK工程。
   1. 解压eclipse后，直接打开。在主菜单选择"Window -\> Preferences -\> Java -\> installed JREs"配置正确的JRE路径。
   
   2. 新建工程，在工程下建立一个文件（"New -\> Folder"），命名为lib。将下载的jar包拷贝至lib中。 如果您是更新SDK，请检查与旧版本依赖的jar包有无版本冲突，否则会影响使用。
      例如：旧版本的SDK日志支持log4j 1xx版本，依赖jar包为log4j-1.2.17.jar、slf4j-api-1.7.21.jar、slf4j-log4j12-1.7.5.jar。新版本需要将其替换成log4j-api-2.12.0.jar、log4j-core-2.12.0.jar、log4j-slf4j-impl-2.12.0.jar、slf4j-api-1.7.30.jar。旧版本依赖java-sdk-core-2.0.1.jar，新版本依赖java-sdk-core-3.0.12.jar。
      
   
   3. 选中新建的工程，单击右键，下拉选择"Build Path -\> Configure Build Path"，在" Java Build Path" 对话框中，单击"Libraries "页签，选择"Add JARs"。在打开的窗口中，选择刚放进lib的jar包。单击"OK"，导入完成。 ![](https://support.huaweicloud.com/qs-sis/zh-cn_image_0000001165927937.png)
      
    
 
 #### 步骤2：修改配置信息
Java SDK Demo中认证鉴权方式可选AK/SK认证或者Token认证，本示例中使用AK/SK认证。
1. 获取AK/SK。 AK/SK即访问密钥，请登录["我的凭证"](https://console.huaweicloud.com/iam/?locale=zh-cn#/myCredential)界面，选择"管理访问密钥 \> 新增访问密钥"获取。
   
2. AK/SK认证鉴权，配置Java SDK中的AK/SK。 根据获取的AK/SK，修改Demo工程"AsrCustomizationDemo.java"文件中函数的"AK"和"SK"的值。
   
3. 设置SDK中demo文件夹下的示例文件AsrCustomizationDemo.java相关参数，参数说明具体请参考[表1]、[表2]、[表3]参数说明。
   ```
   import com.huawei.sis.bean.SisConfig;
   import com.huawei.sis.bean.SisConstant;
   import com.huawei.sis.bean.request.AsrCustomLongRequest;
   import com.huawei.sis.bean.response.AsrCustomLongResponse;
   import com.huawei.sis.bean.request.AsrCustomShortRequest;
   import com.huawei.sis.bean.response.AsrCustomShortResponse;
   import com.huawei.sis.bean.AuthInfo;
   import com.huawei.sis.bean.base.AsrcLongAnalysisInfo;
   import com.huawei.sis.bean.base.AsrcLongSentence;
   import com.huawei.sis.client.AsrCustomizationClient;
   import com.huawei.sis.exception.SisException;
   import com.huawei.sis.util.IOUtils;
   import java.util.List;
   /**
    * 一句话识别demo
    *
    * Copyright 2019 Huawei Technologies Co.,Ltd.
    */
   public class AsrCustomizationDemo {
     private static final int SLEEP_TIME = 500;
     private static final int MAX_POLLING_NUMS = 1000;
     // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全；
     // 本示例以ak和sk保存在环境变量中来实现身份验证为例，运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
     private String ak = System.getenv("HUAWEICLOUD_SDK_AK");
     private String sk = System.getenv("HUAWEICLOUD_SDK_SK");
     private String region = "";    // 区域，如cn-north-1、cn-north-4
     private String projectId = ""; // 项目id。登录管理控制台，鼠标移动到右上角的用户名上，在下拉列表中选择我的凭证。在我的凭证页面，可以查看用户名、账号名，选择“项目列表”页签，在项目列表中查看项目。多项目时，展开“所属区域”，从“项目ID”列获取子项目ID。
     // 一句话识别参数
     private String path = "";             // 文件路径，一句话识别目前仅支持上传音频文件的base64编码
     private String pathAudioFormat = "";  // 文件格式，如wav等
     private String pathProperty = "";     // 属性字符串，language_sampleRate_domain, 如chinese_8k_common
     private void setShortParameter(AsrCustomShortRequest request) {
       // 设置是否添加标点，默认是no
       request.setAddPunc("yes");
       // 设置热词id，不使用则不用填写
       // request.setVocabularyId("");
     }
     private SisConfig getConfig() {
       SisConfig config = new SisConfig();
       // 设置连接超时，默认10000ms
       config.setConnectionTimeout(SisConstant.DEFAULT_CONNECTION_TIMEOUT);
       // 设置请求超时，默认10000ms
       config.setRequestTimeout(SisConstant.DEFAULT_CONNECTION_REQUEST_TIMEOUT);
       // 设置socket超时，默认10000ms
       config.setSocketTimeout(SisConstant.DEFAULT_SOCKET_TIMEOUT);
       // 设置代理, 一定要确保代理可用才启动此设置。 代理初始化也可用不加密的代理，new ProxyHostInfo(host, port);
       // ProxyHostInfo proxy = new ProxyHostInfo(host, port, username, password);
       // config.setProxy(proxy);
       return config;
     }
     private void printAsrShortResponse(AsrCustomShortResponse response) {
       System.out.println("traceId=" + response.getTraceId());
       System.out.println("text=" + response.getText());
       System.out.println("score=" + response.getScore());
       System.out.println("\n");
     }
     /**
      * 一句话识别demo。
      */
     private void shortDemo() {
       try {
         // 1. 初始化AsrCustomizationClient
         // 定义authInfo，根据ak，sk，region，projectId
         AuthInfo authInfo = new AuthInfo(ak, sk, region, projectId);
         // 设置config，主要与超时有关
         SisConfig config = getConfig();
         // 根据authInfo和config，构造AsrCustomizationClient
         AsrCustomizationClient asr = new AsrCustomizationClient(authInfo, config);
         // 2. 配置请求
         String data = IOUtils.getEncodeDataByPath(path);
         AsrCustomShortRequest request = new AsrCustomShortRequest(data, pathAudioFormat, pathProperty);
         // 设置请求参数，所有参数均为可选
         setShortParameter(request);
         // 3. 发送请求，获取响应
         AsrCustomShortResponse response = asr.getAsrShortResponse(request);
         // 打印结果
         printAsrShortResponse(response);
       } catch (SisException e) {
         e.printStackTrace();
         System.out.println("error_code:" + e.getErrorCode() + "\nerror_msg" + e.getErrorMsg());
       }
     }
     public static void main(String[] args) {
       AsrCustomizationDemo demo = new AsrCustomizationDemo();
       // 选择1 一句话识别
       demo.shortDemo();
     }
   }
   ```
    表1用户信息 
   | 参数名称      | 是否必选 | 参数说明                                                                                         |
   |:---|:---|:---|
   | AK        | 必选   | 用户的AK，获取AK、SK参考[AK/SK认证](https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html)。 |
   | SK        | 必选   | 用户的SK，获取AK、SK参考[AK/SK认证](https://support.huaweicloud.com/sdkreference-sis/sis_05_0003.html)。 |
   | Region    | 必选   | 服务所在区域，如"cn-north-4"。                                                                        |
   | ProjectId | 必选   | 项目ID，同Region一一对应，参考[获取项目ID](https://support.huaweicloud.com/api-sis/sis_03_0008.html)。       |
   | Endpoint  | 可选   | 终端节点，可不填，使用默认即可。                                                                             |
      
    表2config配置参数 
   | 参数名称              | 是否必选 | 参数说明                    |
   |:---|:---|:---|
   | SocketTimeout     | 可选   | Socket超时，默认10000，单位ms。  |
   | ConnectionTimeout | 可选   | 连接超时，默认10000，单位ms。      |
   | RequestTimeout    | 可选   | 请求超时，默认10000，单位ms。      |
   | Proxy             | 可选   | 使用前务必确认代理能否可用，最好避免使用代理。 |
      
    表3请求参数 
   | 参数名称          | 是否必选 | 参数说明                                                                                                                               |
   |:---|:---|:---|
   | Data          | 必选   | 本地音频文件经过Base64编码后的字符串。                                                                                                             |
   | AudioFormat   | 必选   | 音频格式。                                                                                                                              |
   | Property      | 必选   | 属性字符串，语言_采样率_模型，如chinese_8k_common。具体信息请参见《API参考》[一句话识别](https://support.huaweicloud.com/api-sis/sis_03_0040.html)。                |
   | Add_punc      | 可选   | "yes"或"no"，识别结果是否添加标点，默认"no"。                                                                                                      |
   | Digit_norm    | 可选   | "yes"或"no"，是否将语音中数字转写成阿拉伯数字，默认"yes"。                                                                                               |
   | Vocabulary_id | 可选   | 热词表ID，不使用则不填写。 创建热词表请参考《API参考》中[创建热词表](https://support.huaweicloud.com/api-sis/sis_03_0071.html)章节。 |
      
   
 
 #### 步骤3：调用一句话识别
执行AsrCustomizationDemo.java文件，"main"函数调用一句话识别（注意注释掉录音文件识别），可查看返回结果，显示如下。
```
{
    "trace_id": "7f0ba401-d82d-4bfb-8ae7-600bf54ce4f6",
    "result": {
        "text": "欢迎来到xx公司。",
        "score": 0.06588845654993515
    }
}
```
