提示:本文用dify简单实现文本转语音配置


前言

提示:使用dify配置工作流实现文字转语音(TTS):

想要低成本或者免费用dify实现文本转语音,几种方案,以及最终使用的方案。


提示:以下是本篇文章正文内容,下面案例可供参考

一、TTS是什么?

TTS模型是将文本信息转换为自然语音的计算机模型,实现“文字到声音”的自动生成。
要实现文本转语音,是需要计算的,而dify本身只是沙箱环境,即使添加python脚本也只是做一些逻辑处理,并不能实现计算处理,所以想要简单实现文本转语音必然是需要一个独立服务或者电脑来提供转换处理,无论是用Java还是python都是调开源的接口或服务,所以选择了TTS模型来处理,不过有的需要付费才能使用,所以综合判断。
这是在网上搜的几种用dify实现文本转语音的方式:
在这里插入图片描述
以上几个核心都是需要一个独立的服务或模型或电脑来单独实现TTS
我用Java和python都可以简单实现文本转语音,但是dify是部署在服务器上的,本地暴露网关接口之类去让dify也不太可能,公司也不让把脚本部署在服务器上,公司也不想再额外的付费去弄一些TTS的工具和模型,只能基于原本的找找有没有TTS,发现配置的通用模型里确实有两个TTS,所以根据这俩去配置工作流了。

二、dify配置步骤

1.查看是否有TTS模型

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
查看是否有tts模型,如果没有就申请,如果有就在模型模块找点并点击启用
在这里插入图片描述

2.新建工作流

在这里插入图片描述
新建工作流后,点击编排,然后点击左侧+,添加节点
在这里插入图片描述
在这里插入图片描述
但是我们是需要添加TTS文本转语音,就需要TTS模型,LLM里显然是找不到的,应该打开工具找到“Audio”,
在这里插入图片描述
选择文本转语音
在这里插入图片描述
设置节点变量和模型
在这里插入图片描述
在这里插入图片描述
添加节点接收输出音频
在这里插入图片描述
这样一个简单的文本转语音就设置成功了
在这里插入图片描述

3.测试验证

在这里插入图片描述
在这里插入图片描述
能成功生成音频文件即成功。

三、其他方案的选择

1.python本地调接口实现文字转语音

现在终端下载一下edge-tts
在这里插入图片描述

pip install fastapi uvicorn edge-tts
from fastapi import FastAPI
from fastapi.responses import FileResponse
import edge_tts, uuid, os

app = FastAPI()

@app.get("/tts")
async def tts(text: str):
    path = f"{uuid.uuid4()}.mp3"
    tts = edge_tts.Communicate(text, "zh-CN-XiaoxiaoNeural")
    await tts.save(path)
    return FileResponse(path, media_type="audio/mpeg")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, port=8000)

2.java调免费微软TTS生成mp3

pom.xml添加依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 开源免费EdgeTTS Java -->
        <dependency>
            <groupId>com.github.oldfishj</groupId>
            <artifactId>edge-tts-java</artifactId>
            <version>1.2.0</version>
        </dependency>
    </dependencies>

控制类调用接口:

package org.wx.controller;

import com.edge.tts.EdgeTTS;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.nio.file.Files;

@RestController
public class TtsController {

    // 常用中文音色
    // zh-CN-XiaoxiaoNeural 女声
    // zh-CN-YunxiNeural 男声

    @GetMapping("/api/tts")
    public ResponseEntity<byte[]> tts(
            @RequestParam String text,
            @RequestParam(required = false, defaultValue = "zh-CN-XiaoxiaoNeural") String voice
    ){
        try {
            File tempMp3 = File.createTempFile("tts_", ".mp3");
            // 免费微软TTS生成mp3
            EdgeTTS tts = new EdgeTTS();
            tts.ttsToFile(text, voice, tempMp3.getAbsolutePath());

            byte[] mp3Bytes = Files.readAllBytes(tempMp3.toPath());
            tempMp3.delete();

            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.parseMediaType("audio/mpeg"));
            return new ResponseEntity<>(mp3Bytes, headers, HttpStatus.OK);
        }catch (Exception e){
            e.printStackTrace();
            return ResponseEntity.internalServerError().build();
        }
    }
}

3.本地部署tts模型

这个是网上搜到的,需要在本地部署一个tts模型,能实现永久免费的效果,不过太麻烦了,没试过,电脑没显卡估计也带不动。

总结

以上就是用dify实现文本转语音的一些记录和尝试,把配置过程记录下来方便大家去配置,也算是一个小小的摸索过程吧,也不难就是查资料比较麻烦。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐