前言
本文主要讲解如何用python的pyttsx3库+flask框架,手写一个文字转语音api
准备工作
编译器:vscode
pip下载:pyttsx3、flask(跨域再下载一个flask_cors)
一、Flask+pyttsx基本使用
Flask
Flask是python的一个轻量级框架,适用于小微项目的创作,在下载完Flask框架后,先配置它的主路径
在终端中输入以下命令:
$env:Flask_APP="你的主函数py文件本地路径"
导入Flask框架
from flask import Flask,request
在上述代码中,导入Flask框架和request请求。
配置基础环境
app=Flask(__name__) 中间写路由api if __name__ == '__main__': app.run(debug=False, host='0.0.0.0', port=5000)
在最后一行代码中,我们关闭了debug模式,并且host设置成0.0.0.0能实现所有ip地址都能调用该接口,如果不想也可以在终端输入ipconfig/all
,查看自己的ip地址并放上去,port是端口号,没被占用的情况下可以随意修改。
初始Flask代码
from flask import Flask app=Flask(__name__) @app.route('/') def test(): return "hello" if __name__ == '__main__': app.run(debug=False, host='0.0.0.0', port=5000)
@app.route是路由,里面写的是具体接口名,def是函数关键词,在这个接口中,我们只做了返回hello字符串的操作。
pyttsx3库基本使用
导入pyttsx3
import pyttsx3
初始化pyttsx3
e=pyttsx3.init()
e是别名,能调用初始化后的这个库里的函数,如say,runAndWait等等。
文字转语音
e.say('世界真大,我想去看看')
say主要作用就是说,把里面的文字转成语音
运行
e.runAndWait()
runAndWait主要作用就是运行这个库中调用的函数,如say。
import pyttsx3 e=pyttsx3.init() e.say('123') e.runAndWait()
二、具体实现
1.引入库
from flask import Flask, request import pyttsx3 from flask_cors import CORS, cross_origin app = Flask(__name__) CORS(app) # 输入表单文字转语音 @app.route('/tts', methods=["POST"]) @cross_origin() def text_audio(): engine = pyttsx3.init() # 获取请求的text表单数据 text = request.form.get('text') # 如果存在转语音并运行pyttsx3 if text: engine.say(text) engine.runAndWait() return "Text Success" else: # 不存在返回Text is empty return "Text is empty" # 主函数,host任何IP地址都可以运行,debug模式关闭 if __name__ == '__main__': app.run(debug=False, host='0.0.0.0', port=5000)
在上述代码中,关键点在于用request方法的表单实现参数,这一点需要在header头是表单类型,也就是
Content-Type:application/x-www-form-urlencoded
在postman的body中找到application/x-www-form-urlencoded,key是text,value就可以输入你想要转语音的文字了.
其次就是跨域的应用,需要下载flask_cors,并配置对应的CORS(app),在你想要跨域的接口前输入@cross_origin()
就可以实现跨域的操作了.
总结
这是比较简单的实现文字转语音的方法,实现效果也是机器声音较重,如果想要模拟人声也可以采用机器学习的方式,用tacotron2模型进行训练,开源代码在github中可以看到.
同时pyttsx也能实现读取文本文件,将文本文件转换成mp3的功能,可以自行去官方文档搜索查阅.