关于java:录音文件音频实现mp3等文件语音转换文字txt文档提取文字精准高效识别

37次阅读

共计 6988 个字符,预计需要花费 18 分钟才能阅读完成。

音频录音文件实现语音转换辨认文字最初文档输入后果

实现对 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("录音文件辨认后果查问失败!");
        }
    }
}

最终成果

欢送技术沟通和业务单干 -> 微 / 电: 16717696360

正文完
 0