音频录音文件实现语音转换辨认文字最初文档输入后果
实现对mp3等录音文件进行语音辨认成文字,最终获取文档格局或者其它定义格式文件,也能够进行提取数据处理逻辑,轻松实现大文件的语音文字转换性能,精准高效便捷...
性能技术:java+阿里云语音辨认+OSS文件存储
*留神:文件须要有读写和可下载拜访权限
代码实现
配置地区ID、常量、固定值:
// 地区ID,常量,固定值。(依据本人开明地址配置) public static final String REGIONID = "cn-shenzhen"; public static final String ENDPOINTNAME = "cn-shenzhen"; public static final String PRODUCT = "nls-filetrans"; public static final String DOMAIN = "filetrans.cn-shenzhen.aliyuncs.com"; public static final String API_VERSION = "2018-08-17"; // 中国站版本 // public static final String API_VERSION = "2019-08-23"; // 国内站版本 public static final String POST_REQUEST_ACTION = "SubmitTask"; public static final String GET_REQUEST_ACTION = "GetTaskResult"; // 申请参数 public static final String KEY_APP_KEY = "appkey"; public static final String KEY_FILE_LINK = "file_link"; public static final String KEY_VERSION = "version"; public static final String KEY_ENABLE_WORDS = "enable_words"; // 响应参数 public static final String KEY_TASK = "Task"; public static final String KEY_TASK_ID = "TaskId"; public static final String KEY_STATUS_TEXT = "StatusText"; public static final String KEY_RESULT = "Result"; // 状态值 public static final String STATUS_SUCCESS = "SUCCESS"; private static final String STATUS_RUNNING = "RUNNING"; private static final String STATUS_QUEUEING = "QUEUEING";
残缺代码:
package com.jame.excel.excelManager;import cn.hutool.core.io.FileUtil;import cn.hutool.core.io.IoUtil;import cn.hutool.json.JSONUtil;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.aliyuncs.CommonRequest;import com.aliyuncs.CommonResponse;import com.aliyuncs.DefaultAcsClient;import com.aliyuncs.IAcsClient;import com.aliyuncs.exceptions.ClientException;import com.aliyuncs.http.MethodType;import com.aliyuncs.profile.DefaultProfile;import java.io.File;import java.util.ArrayList;import java.util.List;public class FileTransJavaDemo { // 地区ID,常量,固定值。 public static final String REGIONID = "cn-shenzhen"; public static final String ENDPOINTNAME = "cn-shenzhen"; public static final String PRODUCT = "nls-filetrans"; public static final String DOMAIN = "filetrans.cn-shenzhen.aliyuncs.com"; public static final String API_VERSION = "2018-08-17"; // 中国站版本 // public static final String API_VERSION = "2019-08-23"; // 国内站版本 public static final String POST_REQUEST_ACTION = "SubmitTask"; public static final String GET_REQUEST_ACTION = "GetTaskResult"; // 申请参数 public static final String KEY_APP_KEY = "appkey"; public static final String KEY_FILE_LINK = "file_link"; public static final String KEY_VERSION = "version"; public static final String KEY_ENABLE_WORDS = "enable_words"; // 响应参数 public static final String KEY_TASK = "Task"; public static final String KEY_TASK_ID = "TaskId"; public static final String KEY_STATUS_TEXT = "StatusText"; public static final String KEY_RESULT = "Result"; // 状态值 public static final String STATUS_SUCCESS = "SUCCESS"; private static final String STATUS_RUNNING = "RUNNING"; private static final String STATUS_QUEUEING = "QUEUEING"; // 阿里云鉴权client IAcsClient client; public FileTransJavaDemo(String accessKeyId, String accessKeySecret) { // 设置endpoint try { DefaultProfile.addEndpoint(ENDPOINTNAME, REGIONID, PRODUCT, DOMAIN); } catch (ClientException e) { e.printStackTrace(); } // 创立DefaultAcsClient实例并初始化 DefaultProfile profile = DefaultProfile.getProfile(REGIONID, accessKeyId, accessKeySecret); this.client = new DefaultAcsClient(profile); } public String submitFileTransRequest(String appKey, String fileLink) { /** * 1. 创立CommonRequest,设置申请参数。 */ CommonRequest postRequest = new CommonRequest(); // 设置域名 postRequest.setDomain(DOMAIN); // 设置API的版本号,格局为YYYY-MM-DD。 postRequest.setVersion(API_VERSION); // 设置action postRequest.setAction(POST_REQUEST_ACTION); // 设置产品名称 postRequest.setProduct(PRODUCT); /** * 2. 设置录音文件辨认申请参数,以JSON字符串的格局设置到申请Body中。 */ JSONObject taskObject = new JSONObject(); // 设置appkey taskObject.put(KEY_APP_KEY, appKey); // 设置音频文件拜访链接 taskObject.put(KEY_FILE_LINK, fileLink); // 新接入请应用4.0版本,已接入(默认2.0)如需维持现状,请正文掉该参数设置。 taskObject.put(KEY_VERSION, "4.0"); // 设置是否输入词信息,默认为false,开启时须要设置version为4.0及以上。 taskObject.put(KEY_ENABLE_WORDS, true); taskObject.put("enable_sample_rate_adaptive", true); String task = taskObject.toJSONString(); System.out.println(task); // 设置以上JSON字符串为Body参数。 postRequest.putBodyParameter(KEY_TASK, task); // 设置为POST形式的申请。 postRequest.setMethod(MethodType.POST); /** * 3. 提交录音文件辨认申请,获取录音文件辨认申请工作的ID,以供辨认后果查问应用。 */ String taskId = null; try { CommonResponse postResponse = client.getCommonResponse(postRequest); System.err.println("提交录音文件辨认申请的响应:" + postResponse.getData()); if (postResponse.getHttpStatus() == 200) { JSONObject result = JSONObject.parseObject(postResponse.getData()); String statusText = result.getString(KEY_STATUS_TEXT); if (STATUS_SUCCESS.equals(statusText)) { taskId = result.getString(KEY_TASK_ID); } } } catch (ClientException e) { e.printStackTrace(); } return taskId; } public String getFileTransResult(String taskId) { /** * 1. 创立CommonRequest,设置工作ID。 */ CommonRequest getRequest = new CommonRequest(); // 设置域名 getRequest.setDomain(DOMAIN); // 设置API版本 getRequest.setVersion(API_VERSION); // 设置action getRequest.setAction(GET_REQUEST_ACTION); // 设置产品名称 getRequest.setProduct(PRODUCT); // 设置工作ID为查问参数 getRequest.putQueryParameter(KEY_TASK_ID, taskId); // 设置为GET形式的申请 getRequest.setMethod(MethodType.GET); /** * 2. 提交录音文件辨认后果查问申请 * 以轮询的形式进行辨认后果的查问,直到服务端返回的状态形容为“SUCCESS”或谬误形容,则完结轮询。 */ String result = null; while (true) { try { CommonResponse getResponse = client.getCommonResponse(getRequest); System.err.println("辨认查问后果:" + getResponse.getData()); if (getResponse.getHttpStatus() != 200) { break; } JSONObject rootObj = JSONObject.parseObject(getResponse.getData()); String statusText = rootObj.getString(KEY_STATUS_TEXT); if (STATUS_RUNNING.equals(statusText) || STATUS_QUEUEING.equals(statusText)) { // 持续轮询,留神设置轮询工夫距离。 Thread.sleep(10000); } else { // 状态信息为胜利,返回辨认后果;状态信息为异样,返回空。 if (STATUS_SUCCESS.equals(statusText)) { result = rootObj.getString(KEY_RESULT); // 状态信息为胜利,但没有辨认后果,则可能是因为文件里全是静音、乐音等导致辨认为空。 if(result == null) { result = ""; } } break; } } catch (Exception e) { e.printStackTrace(); } } return result; } public static void main(String args[]) throws Exception { //写出文本门路文件 String path = "C:\\Users\\Administrator\\Desktop\\" +System.currentTimeMillis()+".txt"; //txt数据 List<String> list = new ArrayList<>(); final String accessKeyId = "你的_accessKeyId"; final String accessKeySecret = "你的_accessKeySecret"; //创立辨认我的项目就有 final String appKey = "你的_appKey"; //oss存储音频文件地址 String fileLink = "http://aabbcc/voice_word.mp3"; FileTransJavaDemo demo = new FileTransJavaDemo(accessKeyId, accessKeySecret); // 第一步:提交录音文件辨认申请,获取工作ID用于后续的辨认后果轮询。 String taskId = demo.submitFileTransRequest(appKey, fileLink); System.out.println("taskId_"+taskId); if (taskId != null) { System.out.println("录音文件辨认申请胜利,task_id: " + taskId); } else { System.out.println("录音文件辨认申请失败!"); return; } // 第二步:依据工作ID轮询辨认后果。 String result = demo.getFileTransResult(taskId); if (result != null) { System.out.println("录音文件辨认后果查问胜利:" + result); JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(result); JSONArray jsonArray = (JSONArray)jsonObject.get("Sentences");// StringBuffer stringBuffer = new StringBuffer(); for (Object strTwo : jsonArray) { cn.hutool.json.JSONObject text = JSONUtil.parseObj(strTwo); String word = text.get("Text").toString();// stringBuffer.append(word); list.add(word); System.out.println(word); }// list.add(stringBuffer.toString()); //写出.txt文件 FileUtil.writeLines(list, new File(path), "utf-8"); System.out.println("文件voiceToWord_写出胜利!"); } else { System.out.println("录音文件辨认后果查问失败!"); } }}