天天看點

Java(騰訊雲)[語音識别]

注冊騰訊雲

騰訊雲官網:https://cloud.tencent.com/

微信掃碼注冊後,以後掃碼就可以登入了。

開通語音識别服務

第一步:在産品中找到 人工智能 → 語音識别。

Java(騰訊雲)[語音識别]

第二步:點選立即使用。

Java(騰訊雲)[語音識别]

開發文檔

第一步:點選文檔與資源,選擇錄音檔案識别。

Java(騰訊雲)[語音識别]

第二步:主要看 離線語音識别 和 識别結果回調 兩部分。

Java(騰訊雲)[語音識别]

栗子

轉寫方法:

  • 在騰訊雲的賬号管理中,選擇 通路管理 → 通路密鑰 → 建立密鑰,可以得到 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 "";
}