注冊騰訊雲
騰訊雲官網:https://cloud.tencent.com/
微信掃碼注冊後,以後掃碼就可以登入了。
開通語音識别服務
第一步:在産品中找到 人工智能 → 語音識别。

第二步:點選立即使用。
開發文檔
第一步:點選文檔與資源,選擇錄音檔案識别。
第二步:主要看 離線語音識别 和 識别結果回調 兩部分。
栗子
轉寫方法:
- 在騰訊雲的賬号管理中,選擇 通路管理 → 通路密鑰 → 建立密鑰,可以得到 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 "";
}