Hello everyone in our today article we will continue the last article about creating a TTS in python in 10 minutes
And today we will create a flask app that will serve our application as a web application accessible to everyone.
And our TTS fine was the last thing we got. We must first create a new flask app. And for that we must install flask by typing:
pip install Flask
And then create a new app folder (called TTS for example). Then in that folder create a folder structure like this :
This means you will create a main.py file and an app folder and in that folder create two other folders called static and templates and the files __init__.py and views.py.
Here is the meaning of all those folders:
In our app entry point, we will simply launch our application. The content is the following:
from app import app
def main():
app.run(debug=1, host="::", port="5000")
if __name__ == "__main__":
main()
Here we import our app from the app folder and we run our flask app on a specific port.
Explaining everything in the app folder will take a lot of time. Here is the source code of the app Martha Github.
To resume in our __init__.py we create the flask app and import all our views:
from flask import Flask
app = Flask(__name__)
from app import views
in the views.py we declare the views.
from distutils.log import error
from app import app
import io
from flask import render_template, request, send_file
from app.tts import synthesizer
@app.route("/")
def index():
return render_template("index.html")
@app.route("/call/martha", methods = ["POST"])
def call_martha():
if(request.form["text"]):
text = request.form["text"]
outputs = synthesizer.tts(text)
out = io.BytesIO()
synthesizer.save_wav(outputs, out)
return send_file(out, mimetype="audio/wav")
else:
return {"error": "Please provide the text"}, 400
This @app expression is a decorator, and we use it to define our routes. And we use render_template function to send an HTML file from the template folder to the frontend.
As you can see, we have added a tts.py in the app folder (It is the TTS from part 1). We have changed it a bit to look like this:
# Install all the requirements
# pip install TTS
# import all the modules that we will need to use
from TTS.utils.manage import ModelManager
from TTS.utils.synthesizer import Synthesizer
import site
location = site.getsitepackages()[0]
path = location+"/TTS/.models.json"
model_manager = ModelManager(path)
model_path, config_path, model_item = model_manager.download_model("tts_models/en/ljspeech/tacotron2-DDC")
voc_path, voc_config_path, _ = model_manager.download_model(model_item["default_vocoder"])
synthesizer = Synthesizer(
tts_checkpoint=model_path,
tts_config_path=config_path,
vocoder_checkpoint=voc_path,
vocoder_config=voc_config_path
)
And after all that, we have created a simple HTML template that will be called in the backend via a rest API call (but I will not explain that part because it is out of the scope of our work here). Here is a preview:
And that is all. We have a flask app that we can call, and it will give us the audio of the text we gave him. In the following article (that you can find here ), we will protect the website again spams by adding a Recaptcha to it on the flask side of the application
You can find the complete source code here: Martha Github.
We have the knowledge and the infrastructure to build, deploy and monitor Ai solutions for any of your needs.
Contact us