百度语音识别api使用(Java版本)

系列文章目录


一、pom依赖引入

  <!--百度语音识别-->
        <dependency>
            <groupId>com.baidu.aip</groupId>
            <artifactId>java-sdk</artifactId>
            <version>4.1.1</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

二、百度语音转文字

具体参考百度API文档

 	/**
     * 百度语音转文字
     *
     * @param voiceBytes pcm格式的文件字节数组
     * @param accessToken 百度AI的token
     * @param cuid  参考百度API文档,调试阶段入参随机值
     * @return 识别出的结果值
     */
    public String voiceIdentifyToString(byte[] voiceBytes, String accessToken, String cuid) {
        if (voiceBytes == null || voiceBytes.length == 0) {
            return StringUtils.EMPTY;
        }
        String speech = Base64.getEncoder().encodeToString(voiceBytes);
        BaiduReqDto baiduReqDto = new BaiduReqDto().setFormat("pcm").setRate(16000).setChannel(1)
                .setCuid(cuid).setSpeech(speech).setLen(voiceBytes.length).setToken(accessToken);
        String voiceResp = HttpUtil.simplePostJson(appConfig.getBaiduVopUrl(), JSON.toJSONString(baiduReqDto));
        BaiduRespDto baiduRespDto = JSONObject.parseObject(voiceResp, BaiduRespDto.class);
        System.out.println(baiduRespDto.getResult());
        if (baiduRespDto == null || baiduRespDto.getResult() == null || baiduRespDto.getResult().size() == 0) {
            return StringUtils.EMPTY;
        }
        return String.join("", baiduRespDto.getResult()).replaceAll("。", "");
    }
    
     /**
     * 获取百度Al的token
     *
     * @return
     */
    public String baiduAccessToken() {
        String cacheKey = "baidu:AlAccessToken";
        Object valueByKey = redisUtil.getValueByKey(cacheKey);
        if (valueByKey == null || StringUtils.isEmpty(valueByKey.toString())) {
            String url = String.format("https://aip.baidubce.com/oauth/2.0/token?client_id=%s&client_secret=%s&grant_type=client_credentials", "xxxxx", "xxxxxxx");
            String s = HttpUtil.simplePostJson(url, new JSONObject().toString());
            TokenRespDto tokenRespDto = JSONObject.parseObject(s, TokenRespDto.class);
            valueByKey = tokenRespDto.getAccess_token();
            redisUtil.setKeyValueWithExpire(cacheKey, valueByKey, 60 * 60 * 24 * 7l);
        }
        return valueByKey.toString();
    }

三、两个字符串相似度比较方法(补充)

/**
 * 匹配相似度
 *
 * @param var1 用户输入
 * @param var2 标准话术
 * @return
 */
public BigDecimal voiceSimilarity(String var1, String var2) {
    BigDecimal bd = new BigDecimal(0);
    // 1、用户输入为空
    if (StringUtils.isEmpty(var1)) {
        if (StringUtils.isBlank(var2)) {
            bd = bd.add(new BigDecimal(100));
        }
        return bd;
    }
    int v1Len = var1.length();
    int v2Len = var2.length();
    // 2、输入字符数大于标准
    String splitVar = v1Len > v2Len ? var2 : var1;
    String containVar = v1Len > v2Len ? var1 : var2;
    List<String> strings = this.splitSubstrings(splitVar);
    for (String st : strings) {
        if (containVar.contains(st)) {
            bd = new BigDecimal(st.length()).divide(new BigDecimal(v2Len), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP);
            System.out.println(bd);
            break;
        }
    }
    return bd;
}

  /**
   * 字符串拆解所有子集并按长度大小排序
   * @param s
   * @return
   */
  public List<String> splitSubstrings(String s) {
      int i, j;
      int stringLength = s.length();
      ArrayList<String> subStringList = new ArrayList<String>();
      // first for loop
      for (i = 0; i < stringLength; i++) {
          for (j = i + 1; j <= stringLength; j++) {
              subStringList.add(s.substring(i, j));
          }

      }
      return subStringList.stream().sorted(Comparator.comparing(String::length).reversed()).collect(Collectors.toList());
  }
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值