音频录音文件实现语音转换辨认文字最初文档输入后果
实现对 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("录音文件辨认后果查问失败!");
}
}
}