Java(腾讯云)[语音识别]

注册腾讯云

腾讯云官网:https://cloud.tencent.com/
微信扫码注册后,以后扫码就可以登录了。

开通语音识别服务

第一步:在产品中找到 人工智能 → 语音识别。
Java(腾讯云)[语音识别]_第1张图片
第二步:点击立即使用。
Java(腾讯云)[语音识别]_第2张图片

开发文档

第一步:点击文档与资源,选择录音文件识别。
Java(腾讯云)[语音识别]_第3张图片
第二步:主要看 离线语音识别 和 识别结果回调 两部分。
Java(腾讯云)[语音识别]_第4张图片

栗子

转写方法:

  • 在腾讯云的账号管理中,选择 访问管理 → 访问密钥 → 新建密钥,可以得到 appid、secretid、secretkey。
  • callback:外网可以访问的回调地址(可使用 NATAPP 做内网穿透)。
  • 直接发送文件数据,大小不能超过 5M,相当于不到 5 分钟的音频,显然不能满足需求。所以采用发送地址的方式,就需要生产临时文件。
  • 生成签名时,参数要按照首字母从小到大的排列顺序。
@PostMapping("conver")
public String conver(@RequestParam("file") MultipartFile file) {
	// 生成临时文件
    String fileName = file.getOriginalFilename();
    String suffixName = fileName.substring(fileName.lastIndexOf("."));
    fileName = new Date().getTime() + suffixName;
    File downloadFile = new File(uploadFolder + fileName);
    try {
        file.transferTo(downloadFile);
    } catch (Exception e) {
        e.printStackTrace();
    }
    // 拼接参数
    String url = "aai.qcloud.com/asr/v1/" + appId;
    StringBuffer sb = new StringBuffer(url);
    sb.append("?callback_url=" + callback + "&");
    sb.append("engine_model_type=16k_0&");
    sb.append("expired=" + (System.currentTimeMillis() / 1000 + 3600) + "&");
    sb.append("nonce=" + ((int) ((Math.random() * 9 + 1) * 1000000000)) + "&");
    sb.append("res_text_format=0&");
    sb.append("res_type=1&");
    sb.append("secretid=" + secretid + "&");
    sb.append("source_type=0&");
    sb.append("sub_service_type=0&");
    sb.append("timestamp=" + (System.currentTimeMillis() / 1000) + "&");
    sb.append("url=" + parentPath + fileName);
    String param = sb.toString();
    String auth = HMAC_SHA1.genHMAC("POST" + param, secretKey);
    String httpOrgCreateTestRtn = HttpClientUtil.doPost("https://" + param, auth);
    try {
        // 生成订单
        Map resultData = JSONObject.fromObject(httpOrgCreateTestRtn);
        String taskId = resultData.get("requestId") + "";
        String currentUser = CookieUtil.getCookieValue("currentUser");
        Order order = new Order();
        order.setPhone(currentUser);
        order.setRequestId(taskId);
        order.setFileName(fileName);
        orderService.save(order);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "success";
}

回调方法:

  • 回调可能会执行多次,要判断订单是否已经完成
  • 注意要删除转写时生成的临时文件。
@PostMapping("result")
@ResponseBody
public String result(HttpServletRequest request) {
	String code = request.getParameter("code");
	String message = request.getParameter("message");
    String requestId = request.getParameter("requestId");
    String audioTime = request.getParameter("audioTime");
    // 根据回调结果中的任务号找到订单
    Order order = orderService.get(requestId);
    if (order.getResult() == null && code.equals("0")) {
        if (code.equals("0")) {
        	// 删除临时文件
            String path = uploadFolder + order.getFileName();
            File file = new File(path);
            file.delete();
        } else {
            order.setResult(message);
            order.setState(3);
        }
        orderService.saveResult(order);
    }
    return "";
}

你可能感兴趣的:(java,腾讯云,语音识别)