语音转文字工具ChatTTS(Api版本) 超详细图文windows部署教程,包括如何在Java的SpringBoot项目中调用此api

主要介绍其中的Api调用版本,用于将ChatTTS部署至本地供Java项目调用使用。

https://github.com/jianchang512/ChatTTS-ui

一、ChatTTS介绍

ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。在HuggingFace中开源的版本为4万小时训练且未SFT的版本。

二、ChatTTS部署流程

Windows预打包版本部署

下载资源

这一步请自行准备梯子,否则下载速度非常慢

1. 从 Releases中下载压缩包,解压后双击 app.exe 即可使用
2. 某些安全软件可能报毒,请退出或使用源码部署
3. 英伟达显卡大于4G显存,并安装了CUDA11.8+后,将启用GPU加速

Releases · jianchang512/ChatTTS-ui (github.com)

下载完整包
v1.0完整包下载(1.7G含模型)
百度网盘下载: https://pan.baidu.com/s/1ch8dUXhOtK0VOnvq5FnJWw?pwd=vagn
123网盘下载: https://www.123pan.com/s/03Sxjv-s9VB3.html
GitHub: https://github.com/jianchang512/ChatTTS-ui/releases/download/v1.0/win-ChatTTS-ui-v1.0.7z
下载补丁包
补丁包仅用于覆盖旧版本升级,不可独立使用,如果未下载过完整包,请先下载完整包并解压,然后再下载补丁包覆盖。
升级补丁包GitHub下载地址: https://github.com/jianchang512/ChatTTS-ui/releases/download/v1.0/win-PatchUpdate-v1.02.7z

下载完成解压后需要将补丁包中的文件解压覆盖完整包中的内容

不同的解压软件可能选项不同,选择全部替换即可。

下载全部模型
默认将在第一次运行时自动下载模型,如果网络问题下载失败,请手动下载
GitHub 下载地址: https://github.com/jianchang512/ChatTTS-ui/releases/download/v1.0/all-models.7z
百度网盘下载: https://pan.baidu.com/s/1yGDZM9YNN7kW9e7SFo8lLw?pwd=ct5x
下载后解压后,会看到asset文件夹,该文件夹内有多个pt文件,将所有pt文件复制到本目录下,然后重启软件

虽然完整包中说明已经含有模型,但是实际运行会出现错误,所以推荐提前下载解压好

下载完成解压后需要将asset文件夹中的文件,复制完整包的asset文件夹下

运行

如果条件允许请启用GPU加速,会大大提高处理速度

上述准备工作完成后,双击文件夹下的app.exe即可运行

运行完成后自动打开浏览器窗口,默认地址 http://127.0.0.1:9966


源码部署

参考ReadME下的部署教程

1. 下载python3.9-3.11,安装时注意选中 Add Python to environment variables
2. 下载 ffmpeg.exe 放在 软件目录下的ffmpeg文件夹内
3.下载并安装git, https://github.com/git-for-windows/git/releases/download/v2.45.1.windows.1/Git-2.45.1-64-bit.exe
4.创建空文件夹 D:/chattts 并进入,地址栏输入 cmd回车,在弹出的cmd窗口中执行命令 git clone https://github.com/jianchang512/chatTTS-uigit clone https://github.com/jianchang512/chatTTS-ui .
5.创建虚拟环境,执行命令 python -m venv venv
6.激活虚拟环境,执行 .\venv\scripts\activate
7.安装依赖,执行 pip install -r requirements.txt
8.如果不需要CUDA加速,执行 pip install torch==2.2.0 torchaudio==2.2.0
10.如果需要CUDA加速,执行 pip install torch==2.2.0 torchaudio==2.2.0 --index-url https://download.pytorch.org/whl/cu118
11.另需安装 CUDA11.8+ ToolKit,请自行搜索安装方法或参考 https://juejin.cn/post/7318704408727519270
12.执行 python app.py 启动,将自动打开浏览器窗口,默认地址 http://127.0.0.1:9966 (注意:默认从 modelscope 魔塔下载模型,不可使用代理下载,请关闭代理)

修改http地址

默认地址是 http://127.0.0.1:9966,如果想修改,可打开目录下的 .env文件,将 WEB_ADDRESS=127.0.0.1:9966改为合适的ip和端口,比如修改为 WEB_ADDRESS=192.168.0.10:9966以便局域网可访问

三、Api用法(Java)

应用的请求类型为Post x-www-form-urlencoded

代码如下:

控制层:

     /**
     * post方式获取入参,插入数据并发起流程
     *
     * @param jsonObject 请求参数
     * @since 2024/9/19 上午9:45
     */
    @PostMapping("/submit2")
    public Object insertFinanceCompensation(@RequestBody JSONObject jsonObject) {
        String url = "http://127.0.0.1:9966/tts";
        return this.tblExamService.submit(url, jsonObject);
    }

服务层方法代码

    /**
     * 使用restTimeplate调外部接口
     *
     * @param url 请求地址
     * @param json 请求内容
     * @since 2024/9/19 上午9:56
     */
    @Override
    public JSONObject submit(String url, Map<String, Object> json) {
        RestTemplate restTemplate = new RestTemplate();
        //参数
        MultiValueMap<String, String> paramMap = new LinkedMultiValueMap() {
            {
                add("text", json.get("text"));
                add("prompt", json.get("prompt"));
                add("voice", json.get("voice"));
                add("temperature", json.get("temperature"));
                add("top_p", json.get("top_p"));
                add("top_k", json.get("top_k"));
                add("skip_refine", json.get("skip_refine"));
                add("custom_voice", json.get("custom_voice"));
            }
        };

        //封装请求头
        RequestEntity requestEntity = null;
        try {
            requestEntity = RequestEntity
                    .post(new URI(url))
                    // 可以不填
                    .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                    // 参数传输类型 url编码格式 application/x-www-form-urlencoded
                    .accept(MediaType.ALL).acceptCharset(StandardCharsets.UTF_8)
                    .body(paramMap);
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
        ResponseEntity<String> result = null;
        try {
            result = restTemplate.postForEntity(url, requestEntity, String.class);
        } catch (RestClientException e) {
            log.error("调用远程接口失败, 地址为: {}", url, e);
        }
        log.info("调用远程接口返回结果为: {}", result);
        return null;
    }
📌

上述代码不太符合阿里规范,如果启用阿里规范插件,会出现标黄

如果需要局域网访问,更改控制层中的url字段即可。

查看本机局域网ip地址

局域网ip查看方法 win + R 打开运行,输入cmd启动命令行,

输入ipconfig

下划找到IPv4地址,即为本机局域网ip地址

更改后即可被局域网访问服务,不仅能调用Api版本的ChatTTS,也可访问非Api版本的,只需更改配置中的url即可。

四、出错排查

贴一个官方的问题反馈解决地址,https://github.com/jianchang512/ChatTTS-ui/issues

预下载版本报错:

1.连接超时

原因是:第一次将从huggingface.co或github下载模型到asset目录下,图中为从Github下载模型压缩包时出现错误

解决方法:1. 挂梯子

2.手动下载模型

手动下载模型
下载后解压后,会看到asset文件夹,该文件夹内有多个pt文件,将所有pt文件复制到asset目录下,然后重启软件
GitHub下载地址: https://github.com/jianchang512/ChatTTS-ui/releases/download/v1.0/all-models.7z
百度网盘下载地址: https://pan.baidu.com/s/1yGDZM9YNN7kW9e7SFo8lLw?pwd=ct5x
### 实现 Spring Boot 调用百度文字语音 API 为了在 Spring Boot 项目中集成并使用百度的文字语音 (TTS) API,需遵循特定的设置流程。此过程涉及创建百度智能云账号、获取访问密钥以及编写必要的 Java 代码来发起 HTTP 请求。 #### 创建百度智能云账户和获取 API 密钥 首先,在百度智能云平台上注册一个开发者账号,并申请 TTS 服务权限。完成身份验证后,进入控制台找到对应的服务页面,记录下分配给用户的 `API Key` 和 `Secret Key` 这两个重要参数用于后续的身份认证[^1]。 #### 添加依赖项到 pom.xml 文件 确保项目的 Maven 构建文件包含了处理 JSON 数据的能力以及其他可能需要用到的支持库: ```xml <dependencies> <!-- 百度 AIP SDK --> <dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>5.0.2</version> </dependency> <!-- Http Client 库 --> <dependency> <groupId>org.apache.httpcomponents.client5</groupId> <artifactId>httpclient5</artifactId> <version>5.1</version> </dependency> <!-- Jackson Core Library For Json Processing --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <!-- Spring Web Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` #### 编写控制器和服务层逻辑 定义 RESTful 接口接收客户端发送过来待合成的声音文本字符串,并通过调用百度提供的接口返回 MP3 或 WAV 格式的音频流数据作为响应体的一部分。 ```java @RestController @RequestMapping("/api/tts") public class TextToSpeechController { @Autowired private BaiduAipService baiduAipService; @PostMapping(value = "/synthesize", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public ResponseEntity<Resource> synthesize(@RequestParam String text, HttpServletResponse response){ try { byte[] audioBytes = baiduAipService.synthesize(text); InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(audioBytes)); HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=synthesized_audio.mp3"); return ResponseEntity.ok() .headers(headers) .contentLength(audioBytes.length) .body(resource); } catch (Exception e) { throw new RuntimeException(e.getMessage()); } } } ``` 接着是负责实际业务处理的服务组件部分: ```java @Service @Slf4j public class BaiduAipServiceImpl implements BaiduAipService { private final AipSpeech client; public BaiduAipServiceImpl(){ this.client = new AipSpeech("your_api_key","your_secret_key",""); // 可选:设置连接超时时间和其他选项... client.setConnectionTimeoutInMillis(2000L); client.setSocketTimeoutInMillis(60000L); } @Override public byte[] synthesize(String text)throws Exception{ JSONObject res = client.text2audio(text,"zh",1,null); int errorCode = res.getInt("err_no"); if(errorCode != 0){ log.error("Error occurred while synthesizing speech: {}",res.getString("err_msg")); throw new RuntimeException(res.getString("err_msg")); } return Base64.getDecoder().decode((String)res.getJSONObject("result").get("data")); } } ``` 上述代码片段展示了如何利用百度官方提供的 Java SDK 来简化与云端服务器之间的交互操作。注意替换掉 `"your_api_key"` 和 `"your_secret_key"` 占位符为之前从百度获得的真实凭证信息。 #### 配置 application.properties 文件 最后一步是在应用程序属性配置文件中指定一些默认行为或者环境变量映射关系以便于灵活管理不同部署场景下的差异之处: ```properties server.port=8090 baidu.api.key=${BAIDU_API_KEY} # 使用环境变量覆盖硬编码值 baidu.secret.key=${BAIDU_SECRET_KEY} logging.level.com.example=DEBUG # 设置日志级别方便调试期间查看输出消息 ``` 这样就完成了整个功能模块的设计与实现工作。当一切准备妥当时启动应用即可测试效果了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值