HirCoir's picture
Update app.py
54412ba verified
raw
history blame
2.86 kB
import os
import random
import re
import string
import subprocess
import base64
from flask import Flask, render_template, request, jsonify, after_this_request
app = Flask(__name__)
# Define the folder where files are saved
file_folder = '/home/app/'
def filter_text(text):
# Filtra caracteres no deseados y limita la longitud del texto
filtered_text = re.sub(r'[^\w\s,.\(\):\u00C0-\u00FF]', '', text)
filtered_text = filtered_text.replace('\n', ' ')
filtered_text = filtered_text.replace('(', ',').replace(')', ',')
return filtered_text[:500]
def convert_text_to_speech(parrafo, model):
parrafo_filtrado = filter_text(parrafo)
random_name = ''.join(random.choices(string.ascii_letters + string.digits, k=8)) + '.wav'
output_file = os.path.join(file_folder, random_name)
app.logger.info("Audio file created at: %s", output_file)
piper_exe = os.path.join(file_folder, 'piper') # Adjusted the path for piper
if os.path.isfile(piper_exe):
comando = f'echo "{parrafo_filtrado}" | "{piper_exe}" -m {model} -f {output_file}'
try:
subprocess.run(comando, shell=True, check=True)
return output_file
except subprocess.CalledProcessError as e:
app.logger.error("Error executing command: %s", e)
return None
else:
return "The piper.exe file was not found in the correct directory."
@app.route('/')
def index():
model_folder = file_folder # Adjusted the model folder to file_folder
model_options = [file for file in os.listdir(model_folder) if file.endswith('.onnx')]
# Log the contents of the current folder
app.logger.info("Contents of current folder: %s", os.listdir(file_folder))
return render_template('index.html', model_options=model_options)
@app.route('/convert', methods=['POST'])
def convert_text():
text = request.form.get('text')
model = request.form.get('model')
if not text or not model:
return jsonify({'error': 'Invalid request'}), 400
output_file = convert_text_to_speech(text, model)
if output_file:
@after_this_request
def remove_file(response):
try:
os.remove(output_file)
app.logger.info("Audio file deleted: %s", output_file)
except Exception as error:
app.logger.error("Error deleting file: %s", error)
return response
with open(output_file, 'rb') as audio_file:
audio_content = audio_file.read()
audio_base64 = base64.b64encode(audio_content).decode('utf-8')
response = jsonify({'audio_base64': audio_base64})
return response
else:
return jsonify({'error': 'Conversion failed'}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=False)