讯飞星火模型-语音转文字实现

news2024/11/25 20:45:18

目录

项目结构

准备音频

接口Demo

准备代码(完整修改后)

测试提取中文文字代码

结果

下载链接:


这是上周打算试试,提取视频文字之后,制作视频字幕,从而想用大模型来实现,基本的demo可以在讯飞对应官网找到,之后就是api对接即可

项目结构

准备音频

接口Demo

示例demo请点击 这里 下载。

准备代码(完整修改后)

Ifasrdemo.java

package cn.xfyun;

import cn.hutool.json.JSONUtil;
import cn.xfyun.sign.LfasrSignature;
import cn.xfyun.utils.HttpUtil;
import com.google.gson.Gson;
import org.apache.commons.lang.StringEscapeUtils;

import java.io.*;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.SignatureException;
import java.util.HashMap;


public class Ifasrdemo {
    private static final String HOST = "https://raasr.xfyun.cn";
    private static String AUDIO_FILE_PATH;
    private static final String appid = "xxxxx";
    private static final String keySecret = "xxxxxxxx";

    private static final Gson gson = new Gson();

    static {
        try {
            AUDIO_FILE_PATH = Ifasrdemo.class.getResource("/").toURI().getPath() + "/audio/合成音频.wav";
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) throws Exception {
        String result = upload();
        String jsonStr = StringEscapeUtils.unescapeJavaScript(result);
        String orderId = String.valueOf(JSONUtil.getByPath(JSONUtil.parse(jsonStr), "content.orderId"));
        getResult(orderId);



    }

    private static String upload() throws SignatureException, FileNotFoundException {
        HashMap<String, Object> map = new HashMap<>(16);
        File audio = new File(AUDIO_FILE_PATH);
        String fileName = audio.getName();
        long fileSize = audio.length();
        map.put("appId", appid);
        map.put("fileSize", fileSize);
        map.put("fileName", fileName);
        map.put("duration", "200");
        LfasrSignature lfasrSignature = new LfasrSignature(appid, keySecret);
        map.put("signa", lfasrSignature.getSigna());
        map.put("ts", lfasrSignature.getTs());

        String paramString = HttpUtil.parseMapToPathParam(map);
        System.out.println("upload paramString:" + paramString);

        String url = HOST + "/v2/api/upload" + "?" + paramString;
        System.out.println("upload_url:" + url);
        String response = HttpUtil.iflyrecUpload(url, new FileInputStream(audio));

        System.out.println("upload response:" + response);
        return response;
    }

    private static String getResult(String orderId) throws SignatureException, InterruptedException, IOException {
        HashMap<String, Object> map = new HashMap<>(16);
        map.put("orderId", orderId);
        LfasrSignature lfasrSignature = new LfasrSignature(appid, keySecret);
        map.put("signa", lfasrSignature.getSigna());
        map.put("ts", lfasrSignature.getTs());
        map.put("appId", appid);
        map.put("resultType", "transfer,predict");
        String paramString = HttpUtil.parseMapToPathParam(map);
        String url = HOST + "/v2/api/getResult" + "?" + paramString;
        System.out.println("\nget_result_url:" + url);
        while (true) {
            String response = HttpUtil.iflyrecGet(url);
            JsonParse jsonParse = gson.fromJson(response, JsonParse.class);
            if (jsonParse.content.orderInfo.status == 4 || jsonParse.content.orderInfo.status == -1) {
                System.out.println("订单完成:" + response);
                write(response);
                return response;
            } else {
                System.out.println("进行中...,状态为:" + jsonParse.content.orderInfo.status);
                //建议使用回调的方式查询结果,查询接口有请求频率限制
                Thread.sleep(7000);
            }
        }
    }

   
    public static void write(String resp) throws IOException {
        // 使用 try-with-resources 确保资源被正确关闭
        try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream("src/main/resources/output/test.txt"), "UTF-8"))) {
            String ss = resp;
            // 用 UTF-8 写入
            bw.write(ss);
            System.out.println("写入txt成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }




    class JsonParse {
        Content content;
    }

    class Content {
        OrderInfo orderInfo;
    }

    class OrderInfo {
        Integer status;
    }
}

测试提取中文文字代码

ChineseTextExtractor.java

package cn.xfyun;

import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ChineseTextExtractor {

    public static void main(String[] args) {
        String inputFilePath = "src/main/resources/output/test.txt"; // 输入文件路径
        String outputFilePath = "src/main/resources/output/out.txt"; // 输出文件路径
        extractAndWriteChineseText(inputFilePath, outputFilePath);
    }

    public static void extractAndWriteChineseText(String inputFilePath, String outputFilePath) {
        Pattern pattern = Pattern.compile("[\\u4e00-\\u9fa5]+"); // 中文字符的正则表达式
        try (BufferedReader br = new BufferedReader(new FileReader(inputFilePath));
             BufferedWriter bw = new BufferedWriter(new FileWriter(outputFilePath))) {

            String line;
            while ((line = br.readLine()) != null) {
                Matcher matcher = pattern.matcher(line);
                while (matcher.find()) {
                    bw.write(matcher.group()); // 写入匹配的中文字符
                    bw.newLine(); // 每个匹配项后面添加一个新行
                }
            }
            System.out.println("中文字符提取完成,已写入 " + outputFilePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结果

这样就实现了文字的提取,但是我还是不满足,我想要的效果是直接做出字幕的效果,我只需要导入这个字幕文件就可以了,于是我发现了下面的这个神器

下载链接:

下载客户端-33字幕

真正意义上实现免费算力制作字幕,十分良心!

看图

看看那几天转换的效果,主要是需要在自己下载一个模型即可,460多M的模型就可以适用很多场景

如果实现人声伴奏分离:推荐这两个网站!

不免费:https://www.yinziai.com/personal

新用户注册就可以用,着急的话可以试试,效果也很好

免费:Vocal Remover and Isolation [AI]

再看看这个歌词字幕

 是的,我最后要的就是这样的效果

@ky 最后吐槽一下,自己最近心肝十分易上火,动不动就生气,昨晚跟女朋友打游戏,还对她发火……,而且明明是自己的问题,简单点处理不就好了吗,事后十分后悔,所以今天早上被人制裁了,用伞把我胳膊上的皮给戳破了,像被蛇咬了一样吗,还有我们这学校真的多蛇,大小操场都能看到,就到期末了,需要赶紧复习了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1817009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux和Windows下查看CPU运行频率的方法

文章目录 0.前言1.Linux系统中查看CPU运行频率的方法&#xff08;经测试在UnRaid中适用的&#xff09;1.1.最简单的lscpu命令1.2.查看CPU实时运行频率的watch -n 1 cpufreq-info命令 2.WIndows系统中查看CPU运行频率的方法2.1.系统属性大法2.2.任务管理器大法2.3.CPU-Z等硬件检…

MoneyPrinterPlus:AI自动短视频生成工具,赚钱从来没有这么容易过

这是一个轻松赚钱的项目。 短视频时代&#xff0c;谁掌握了流量谁就掌握了Money! 所以给大家分享这个经过精心打造的MoneyPrinterPlus项目。 它可以&#xff1a;使用AI大模型技术,一键批量生成各类短视频。 它可以&#xff1a;一键混剪短视频&#xff0c;批量生成短视频不是…

计算机网络(3) 字节顺序:网络字节序与IPv4

一.小端与大端 小端&#xff08;Little endian&#xff09;&#xff1a;低字节保存在内存低地址&#xff0c;高字节保存在内存高地址。 大端&#xff08;Big endian&#xff09;&#xff1a;低字节保存在内存高地址&#xff0c;高字节保存在内存低地址。 例如&#xff08;14…

FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外&#xff0c;还有比较两种比较新的流媒体协议&#xff0c;分别是SRT和RIST。 其中SRT全称为Secure Reliable Transport&#xf…

计算机相关专业的探讨

目录 一、计算机相关专业是否仍是“万金油”选择 二、计算机行业的未来发展态势 三、从专业与个人的匹配度判断选择计算机相关专业 四、对于高考生的建议 一、计算机相关专业是否仍是“万金油”选择 计算机相关专业在过去很长一段时间内确实被视为“万金油”专业&#xff0…

中文藏文翻译怎么在线翻译?通过这些方法

中文藏文翻译怎么在线翻译&#xff1f;随着全球化的加速和跨文化交流的日益频繁&#xff0c;中文与藏文之间的翻译需求逐渐增加。为了满足这一需求&#xff0c;各种在线翻译工具和方法应运而生。下面&#xff0c;本文将详细介绍三种中文藏文在线翻译的方法&#xff0c;帮助用户…

[数据集][目标检测]攀墙攀越墙壁数据集VOC格式-701张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;701 标注数量(xml文件个数)&#xff1a;701 标注类别数&#xff1a;1 标注类别名称:["fq"] 每个类别标…

Button按钮类

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 按钮是GUI界面中应用最为广泛的控件&#xff0c;它常用于捕获用户生成的单击事件&#xff0c;其最明显的用途是触发绑定到一个处理函数。 wxPython类…

51-57 CVPR 2024 | Cam4DOcc:自动驾驶应用中仅摄像机4D占用预测基准

23年12月&#xff0c;上海交通大学、国防科技大学、北京工业大学联合发布Cam4DOcc: Benchmark for Camera-Only 4D Occupancy Forecasting in Autonomous Driving Applications。 本文提出了一种仅摄像机4D占用预测的新基准Cam4Occ&#xff0c;利用现有nuScenes、nuScenes-Ocu…

从客户端WebAPI视角下解读前端学习

API 应用程序接口&#xff08;API&#xff0c;Application Programming Interface&#xff09;是基于编程语言构建的结构&#xff0c;使开发人员更容易地创建复杂的功能。它们抽象了复杂的代码&#xff0c;并提供一些简单的接口规则直接使用。 JavaScript VS 客户端 API VS 客…

信息学奥赛初赛天天练-27-CSP-J2022阅读程序位运算、数据类型范围、进制转换攻略

PDF文档公众号回复关键字:20240612 2022 CSP-J 阅读程序1 阅读程序(判断题1.5分 选择题3分 共计40分 ) 01 #include<iostream> 02 03 using namespace std; 04 05 int main() 06 { 07 unsigned short x,y; 08 cin>>x>>y; 09 x (x | x<…

DB-Engines Ranking 2024年6月数据库排行

DB-Engines Ranking 2024年6月数据库排行 DB-Engines排名根据数据库管理系统的受欢迎程度进行排名。排名每月更新一次。 2024年6月&#xff0c;共有421个数据库进入排行。 排行榜 前15名趋势图 关系型数据库前 10 名 键值数据库前 10 名 文档数据库前 10 名 时序数据库前 10 …

MySQL修改存储数据文件目录

MySQL修改存储数据文件目录&#xff0c;记录遇到的一个小麻烦 前提&#xff1a;使用mysql的exe文件执行安装时&#xff0c;有时会疏忽的安装到系统&#xff08;C盘&#xff09;&#xff0c;数据量庞大后&#xff0c;会将系统盘占满&#xff0c;为了处理这个问题&#xff0c;则需…

MFC上下文菜单与定时器学习笔记

本博文简单介绍了上下文菜单以及定时器的知识内容&#xff0c;作为笔记发表在csdn上面。 在这里插入图片描述 菜单资源的使用 添加菜单资源加载菜单资源&#xff1a; 注册窗口类时设置菜单创建窗口传参设置菜单在主窗口WM_CREATE消息中利用SetMenu函数设置 加载菜单资…

【Unity】RPG2D龙城纷争(一)搭建项目、导入框架、前期开发准备

更新日期&#xff1a;2024年6月12日。 项目源码&#xff1a;在第四章发布 免责声明&#xff1a;【RPG2D龙城纷争】使用的图片、音频等所有素材均有可能来自互联网&#xff0c;本专栏所有文章仅做学习和教程目的&#xff0c;不会将任何素材用于任何商业用途。 索引 【系列简介】…

winget install 命令快速安装git到Windows系统

打开命令提示符或PowerShell: 使用快捷键Win X&#xff0c;然后选择“Windows PowerShell”或“命令提示符”。你也可以直接在开始菜单中搜索“cmd”或“PowerShell”。 运行winget命令安装Git: 在命令提示符或PowerShell中&#xff0c;输入以下命令并按回车&#xff1a; win…

Allegro光绘Gerber文件、IPC网表、坐标文件、装配PDF文件导出打包

Allegro光绘Gerber文件、IPC网表、坐标文件、装配PDF文件导出打包 一、Gerber文件层叠与参数设置二、装配图文件设置导出三、光绘参数设置四、Gerber孔符图、钻孔表及钻孔文件输出五、输出Gerber文件六、输出IPC网表七、导出坐标文件八、文件打包 一、Gerber文件层叠与参数设置…

服务攻防-数据库安全(数据库与漏洞利用)

1.安全服务的渗透过程 1.1 判断服务 如果要进行安全服务的渗透&#xff0c;我们先需要知道这个服务是否开启了&#xff0c;在数据库这个部分我们的判断方法主要有以下三种&#xff1a; - 扫描端口&#xff1a;对于不同的数据库来说&#xff0c;使用的端口也是不一样的&#x…

智慧金融新视野:银行数据中心可视化大屏的崛起

在数字化浪潮的推动下&#xff0c;银行业正迎来一场前所未有的变革。在这场变革中&#xff0c;银行数据中心可视化大屏以其独特的魅力&#xff0c;为银行的数据分析和决策提供强有力的支持。 随着金融科技的不断发展&#xff0c;银行对于数据处理和分析的需求日益增长。银行数据…

umi 获取umirc下router配置的name

解决 import { useRouteProps } from umijs/maxexport default function Page() {const routeProps useRouteProps()console.log(routeProps)// use routeProps.custom_key }参数如下图 文档 https://umijs.org/docs/api/api#userouteprops