|
import gradio as gr |
|
import speech_recognition as sr |
|
from ttsmms import TTS |
|
from deep_translator import GoogleTranslator |
|
|
|
import subprocess |
|
import os |
|
import time |
|
import math |
|
from threading import Thread |
|
|
|
from num2words import num2words |
|
import re |
|
|
|
|
|
input_language = 'es-ES' |
|
output_audio_format = 'mp3' |
|
output_video_format = 'mp4' |
|
|
|
|
|
spanish = TTS("data/spa") |
|
english = TTS("data/eng") |
|
misak = TTS("data/gum") |
|
quechua = TTS("data/quz") |
|
|
|
|
|
|
|
langs = [{"lang": 'english', "tts": english}, {"lang": 'quechua', "tts": quechua}, {"lang": 'spanish', "tts": spanish}] |
|
|
|
|
|
|
|
def text_to_text(text, lang, logs_file): |
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Traduciendo el texto a texto en el idioma seleccionado...") |
|
logs_file.write(tiempo[3] + " - Traduciendo el texto a texto en el idioma seleccionado...\n") |
|
selected_lang = next((lang_item for lang_item in langs if lang_item["lang"] == lang), None) |
|
if selected_lang is None: |
|
raise ValueError(f"Lenguaje '{lang}' no disponible.") |
|
|
|
if text.isdigit(): |
|
text = num2words (text, lang='es', ordinal=False) |
|
else: |
|
text_split = text.split() |
|
i=0 |
|
for word in text_split: |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) |
|
if word.startswith("$"): |
|
word = word.replace("$","") |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " pesos" |
|
if word.endswith("%"): |
|
word = word.replace("%","") |
|
if word.isdigit(): |
|
try: |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " por ciento" |
|
except NotImplementedError: |
|
None |
|
if word.count(".") == 1: |
|
word_split = word.split(".") |
|
word_split[0] = num2words(word_split[0], lang='es', ordinal=False) + " punto" |
|
word_split[1] = num2words(word_split[1], lang='es', ordinal=False) + " por ciento" |
|
text_split[i] = ' '.join(word_split) |
|
i += 1 |
|
|
|
text = ' '.join(text_split) |
|
|
|
text_translated = GoogleTranslator(source='auto', target=lang).translate(text) |
|
|
|
if text_translated.isdigit(): |
|
try: |
|
text_translated = num2words (text_translated, lang=lang, ordinal=False) |
|
except NotImplementedError: |
|
None |
|
else: |
|
text_split = text_translated.split() |
|
i=0 |
|
for word in text_split: |
|
if word.isdigit(): |
|
try: |
|
text_split[i] = num2words(word, lang=lang, ordinal=False) |
|
except NotImplementedError: |
|
None |
|
if word.startswith("$"): |
|
word = word.replace("$","") |
|
if word.isdigit(): |
|
try: |
|
text_split[i] = num2words(word, lang=lang, ordinal=False) + " pesos" |
|
except NotImplementedError: |
|
None |
|
if word.endswith("%"): |
|
word = word.replace("%","") |
|
if word.isdigit(): |
|
try: |
|
text_split[i] = num2words(word, lang=lang, ordinal=False) + " percent" |
|
except NotImplementedError: |
|
None |
|
if word.count(".") == 1: |
|
word_split = word.split(".") |
|
word_split[0] = num2words(word_split[0], lang=lang, ordinal=False) + " point" |
|
word_split[1] = num2words(word_split[1], lang=lang, ordinal=False) + " percent" |
|
text_split[i] = ' '.join(word_split) |
|
i += 1 |
|
|
|
text_translated = ' '.join(text_split) |
|
|
|
months = ['January','january','February','february','March','march','April','april','May','may','June','june','July','july','August','august','September','september','October','october','November','november','December','december'] |
|
for month in months: |
|
date_full_founded = re.search(month + " .., .....$", text_translated) |
|
date_founded = re.search(month + " ..,", text_translated) |
|
|
|
if date_full_founded != None: |
|
date = date_full_founded.group() |
|
date_split = date.split() |
|
day = date_split[1].replace(",","") |
|
year = date_split[2].replace(".","") |
|
|
|
if day.isdigit(): |
|
day = num2words (day, lang=lang, ordinal=False) + "," |
|
if year.isdigit(): |
|
year = num2words (year, lang=lang, ordinal=False) + "." |
|
|
|
text_translated = text_translated.replace(date, month + " " + day + " " + year) |
|
|
|
if date_founded != None: |
|
date = date_founded.group() |
|
date_split = date.split() |
|
day = date_split[1].replace(",","") |
|
|
|
if day.isdigit(): |
|
day = num2words (day, lang=lang, ordinal=False) + "," |
|
|
|
text_translated = text_translated.replace(date, month + " " + day) |
|
|
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Texto traducido: ", text_translated) |
|
logs_file.write(tiempo[3] + " - Texto traducido: " + text_translated + "\n") |
|
return text_translated |
|
|
|
|
|
def text_to_audio(text, lang, logs_file): |
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Convirtiendo el texto extraido a audio en el idioma seleccionado...") |
|
logs_file.write(tiempo[3] + " - Convirtiendo el texto extraido a audio en el idioma seleccionado...\n") |
|
selected_lang = next((lang_item for lang_item in langs if lang_item["lang"] == lang), None) |
|
if selected_lang is None: |
|
raise ValueError(f"Lenguaje '{lang}' no disponible.") |
|
selected_tts = selected_lang["tts"] |
|
if text.isdigit(): |
|
text = num2words (text, lang='es', ordinal=False) |
|
else: |
|
text_split = text.split() |
|
i=0 |
|
for word in text_split: |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) |
|
if word.startswith("$"): |
|
word = word.replace("$","") |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " pesos" |
|
if word.endswith("%"): |
|
word = word.replace("%","") |
|
if word.isdigit(): |
|
try: |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " por ciento" |
|
except NotImplementedError: |
|
None |
|
if word.count(".") == 1: |
|
word_split = word.split(".") |
|
word_split[0] = num2words(word_split[0], lang='es', ordinal=False) + " punto" |
|
word_split[1] = num2words(word_split[1], lang='es', ordinal=False) + " por ciento" |
|
text_split[i] = ' '.join(word_split) |
|
i += 1 |
|
|
|
text = ' '.join(text_split) |
|
|
|
text_translated = text_to_text(text, lang, logs_file) |
|
wav_path = "audio_output." + output_audio_format |
|
selected_tts.synthesis(text_translated, wav_path=wav_path) |
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Audio traducido generado: ",wav_path) |
|
logs_file.write(tiempo[3] + " - Audio traducido generado: " + wav_path + "\n") |
|
return wav_path, text_translated |
|
|
|
|
|
def audio_to_text(audio_file, logs_file): |
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Convirtiendo el audio a texto...") |
|
logs_file.write(tiempo[3] + " - Convirtiendo el audio a texto...\n") |
|
r = sr.Recognizer() |
|
with sr.AudioFile(audio_file) as source: |
|
audio = r.record(source) |
|
try: |
|
text = r.recognize_google(audio, language=input_language) |
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Reconocimiento de texto obtenido del audio: ",text) |
|
logs_file.write(tiempo[3] + " - Reconocimiento de texto obtenido del audio: " + text + "\n") |
|
return text |
|
except sr.UnknownValueError: |
|
print("Google Speech Recognition no pudo transcribir el audio.") |
|
logs_file.write("Google Speech Recognition no pudo transcribir el audio.\n") |
|
return None |
|
except sr.RequestError: |
|
print("Reconocimiento de audio no disponible.") |
|
logs_file.write("Reconocimiento de audio no disponible.\n") |
|
return None |
|
|
|
|
|
def video_to_audio(video_file, output_audio_ext, logs_file): |
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Extrayendo el audio del video...") |
|
logs_file.write(tiempo[3] + " - Extrayendo el audio del video...\n") |
|
filename, ext = os.path.splitext(video_file) |
|
subprocess.call(["ffmpeg", "-y", "-i", video_file, "-ar", "16000", "-ac", "1", f"{filename+'_audio'}.{output_audio_ext}"], |
|
stdout=subprocess.DEVNULL, |
|
stderr=subprocess.STDOUT) |
|
audio_video = filename + "_audio." + output_audio_ext |
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Audio extraido: ",audio_video) |
|
logs_file.write(tiempo[3] + " - Audio extraido: " + audio_video + "\n") |
|
return audio_video |
|
|
|
|
|
def video_to_video(video_file, audio_file_traslated, output_video_ext, logs_file): |
|
length_video = get_length_video(video_file) |
|
print("length_video: ", length_video) |
|
|
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Procesando el video para obtenerlo sin audio...") |
|
logs_file.write(tiempo[3] + " - Procesando el video para obtenerlo sin audio...\n") |
|
filename, ext = os.path.splitext(video_file) |
|
subprocess.call(["ffmpeg", "-y", "-i", video_file, "-an", f"{filename+'_muted'}.{output_video_ext}"], |
|
stdout=subprocess.DEVNULL, |
|
stderr=subprocess.STDOUT) |
|
video_mute = filename + "_muted." + output_video_ext |
|
length_video_mute = round(get_length_video(video_mute),3) |
|
print("length_video_mute: ", length_video_mute) |
|
length_audio = round(get_length_video(audio_file_traslated),3) |
|
print("length_audio: ", length_audio) |
|
|
|
if length_video_mute > length_audio: |
|
length_video_subtitled = str(length_video_mute) |
|
if length_audio > length_video_mute: |
|
length_video_subtitled = str(length_audio) |
|
|
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Doblando el video con el audio traducido...") |
|
logs_file.write(tiempo[3] + " - Doblando el video con el audio traducido...\n") |
|
|
|
subprocess.call(["ffmpeg", "-y", "-i", video_mute, "-i", audio_file_traslated, "-t", length_video_subtitled, f"{filename+'_traslated'}.{output_video_ext}"], |
|
stdout=subprocess.DEVNULL, |
|
stderr=subprocess.STDOUT) |
|
video_traslated = filename + "_traslated." + output_video_ext |
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Video traducido: ",video_traslated) |
|
logs_file.write(tiempo[3] + " - Video traducido: " + video_traslated + "\n") |
|
return video_traslated |
|
|
|
|
|
def video_to_video_subtitled(video_file, text_traslated, output_video_ext, logs_file): |
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Procesando el video subtitulado...") |
|
logs_file.write(tiempo[3] + " - Procesando el video subtitulado...\n") |
|
subtitles = text_traslated.split() |
|
filename, ext = os.path.splitext(video_file) |
|
length_video = get_length_video(video_file) |
|
miliseg, seg = math.modf(length_video) |
|
miliseg_video = int(round(miliseg,3)*1000) |
|
if miliseg_video == 0: |
|
miliseg_video = "000" |
|
length_line_subtitle = math.ceil(len(subtitles)/length_video) |
|
i=0 |
|
j=0 |
|
subtitles_line = [] |
|
print("length_video", length_video) |
|
print("length_line_subtitle", length_line_subtitle) |
|
print("length_video//length_line_subtitle: ", length_video//length_line_subtitle) |
|
print("len(subtitles)", len(subtitles)) |
|
while i < length_video//length_line_subtitle: |
|
while j < len(subtitles): |
|
line = ' '.join(subtitles[j:j+length_line_subtitle]) |
|
subtitles_line.append(line) |
|
j += length_line_subtitle |
|
i += 1 |
|
|
|
subtitles_file = open(f"{'video_subtitles'}.srt","w+") |
|
i=0 |
|
while i < len(subtitles_line): |
|
if len(subtitles_line)-i > 1: |
|
subtitles_content = (''''''+str(i+1)+''' |
|
'''+ time.strftime('%H:%M:%S', time.gmtime(i)) + ''',001 --> ''' + time.strftime('%H:%M:%S', time.gmtime(i+1)) + ''',000 --> ''' + |
|
''' |
|
''''''<b>'''+ subtitles_line[i] +'''</b>''' |
|
''' |
|
''') |
|
|
|
if len(subtitles_line)-i == 1: |
|
subtitles_content = (''''''+str(i+1)+''' |
|
'''+ time.strftime('%H:%M:%S', time.gmtime(i)) + ''',001 --> ''' + time.strftime('%H:%M:%S', time.gmtime(i+1)) + ''',''' + str(miliseg_video) + ''' --> ''' + |
|
''' |
|
''''''<b>'''+ subtitles_line[i] +'''</b>''' |
|
''' |
|
''') |
|
subtitles_file.write(subtitles_content) |
|
i += 1 |
|
|
|
subtitles_file.close() |
|
subprocess.call(["ffmpeg", "-y", "-copyts", "-i", video_file, "-vf", "subtitles=video_subtitles.srt:force_style='Fontname=Futura,Fontsize=20,MarginV=50,Shadow=1'", f"{filename+'_subtitled'}.{output_video_ext}"], |
|
stdout=subprocess.DEVNULL, |
|
stderr=subprocess.STDOUT) |
|
|
|
video_subtitled = filename + "_subtitled." + output_video_ext |
|
tiempo = time.ctime().split() |
|
print(tiempo[3] + " - Video subtitulado: ",video_subtitled) |
|
logs_file.write(tiempo[3] + " - Video subtitulado: " + video_subtitled + "\n") |
|
return video_subtitled |
|
|
|
def get_length_video(filename): |
|
result = subprocess.run(["ffprobe", "-v", "error", "-show_entries", |
|
"format=duration", "-of", |
|
"default=noprint_wrappers=1:nokey=1", filename], |
|
stdout=subprocess.PIPE, |
|
stderr=subprocess.STDOUT) |
|
return float(result.stdout) |
|
|
|
|
|
|
|
|
|
def multimedia_to_multimedia_app(lang_input, video_file_upload, audio_file_upload, video_file_webcam, audio_file_microphone, text_input): |
|
tiempo = time.ctime().split() |
|
logs_file = open("logs.txt","w+") |
|
logs_file.write("LOGS TRADUCTOR MULTILENGUAJE\n") |
|
if video_file_webcam and lang_input: |
|
print("PROCESANDO GRABACIÓN VIDEO DE LA WEBCAM") |
|
logs_file.write("PROCESANDO GRABACIÓN VIDEO DE LA WEBCAM\n") |
|
print(tiempo[3] + " - Traduciendo el video grabado: " + video_file_webcam + " al idioma " + lang_input) |
|
logs_file.write(tiempo[3] + " - Traduciendo el video grabado: " + video_file_webcam + " al idioma " + lang_input + "\n") |
|
text_transcribed = convert_video_to_text_app(lang_input, video_file_webcam, logs_file) |
|
if text_transcribed.isdigit(): |
|
text_transcribed = num2words (text_transcribed, lang='es', ordinal=False) |
|
else: |
|
text_split = text_transcribed.split() |
|
i=0 |
|
for word in text_split: |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) |
|
if word.startswith("$"): |
|
word = word.replace("$","") |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " pesos" |
|
if word.endswith("%"): |
|
word = word.replace("%","") |
|
if word.isdigit(): |
|
try: |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " por ciento" |
|
except NotImplementedError: |
|
None |
|
if word.count(".") == 1: |
|
word_split = word.split(".") |
|
word_split[0] = num2words(word_split[0], lang='es', ordinal=False) + " punto" |
|
word_split[1] = num2words(word_split[1], lang='es', ordinal=False) + " por ciento" |
|
text_split[i] = ' '.join(word_split) |
|
i += 1 |
|
|
|
text_transcribed = ' '.join(text_split) |
|
|
|
audio_traslated, text_translated = text_to_audio(text_transcribed, lang_input, logs_file) |
|
return_video_subtitled = [None]*1 |
|
return_video_traslated = [None]*1 |
|
hilo_video_subtitled = Thread(target=convert_video_to_video_subtitled_app, args=(video_file_webcam, text_translated,logs_file,return_video_subtitled,)) |
|
hilo_video_traslated = Thread(target=convert_video_to_video_app, args=(video_file_webcam, audio_traslated,logs_file,return_video_traslated,)) |
|
hilo_video_subtitled.start() |
|
hilo_video_traslated.start() |
|
hilo_video_subtitled.join() |
|
hilo_video_traslated.join() |
|
video_subtitled = return_video_subtitled[0] |
|
video_traslated = return_video_traslated[0] |
|
print("FIN PROCESO GRABACIÓN VIDEO DE LA WEBCAM") |
|
logs_file.write("FIN PROCESO GRABACIÓN VIDEO DE LA WEBCAM\n") |
|
logs_file.close() |
|
return text_transcribed, text_translated, audio_traslated, video_subtitled, video_traslated |
|
if audio_file_microphone and lang_input: |
|
print("PROCESANDO GRABACIÓN AUDIO DEL MICRÓFONO") |
|
logs_file.write("PROCESANDO GRABACIÓN AUDIO DEL MICRÓFONO\n") |
|
print(tiempo[3] + " - Traduciendo el audio grabado " + audio_file_microphone + " al idioma " + lang_input) |
|
logs_file.write(tiempo[3] + " - Traduciendo el audio grabado " + audio_file_microphone + " al idioma " + lang_input + "\n") |
|
text_translated, text_transcribed, audio_traslated = convert_audio_to_audio_app(lang_input,audio_file_microphone,logs_file) |
|
video_subtitled = None |
|
video_traslated = None |
|
print("FIN PROCESO GRABACIÓN AUDIO DEL MICRÓFONO") |
|
logs_file.write("FIN PROCESO GRABACIÓN AUDIO DEL MICRÓFONO\n") |
|
logs_file.close() |
|
if text_transcribed.isdigit(): |
|
text_transcribed = num2words (text_transcribed, lang='es', ordinal=False) |
|
else: |
|
text_split = text_transcribed.split() |
|
i=0 |
|
for word in text_split: |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) |
|
if word.startswith("$"): |
|
word = word.replace("$","") |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " pesos" |
|
if word.endswith("%"): |
|
word = word.replace("%","") |
|
if word.isdigit(): |
|
try: |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " por ciento" |
|
except NotImplementedError: |
|
None |
|
if word.count(".") == 1: |
|
word_split = word.split(".") |
|
word_split[0] = num2words(word_split[0], lang='es', ordinal=False) + " punto" |
|
word_split[1] = num2words(word_split[1], lang='es', ordinal=False) + " por ciento" |
|
text_split[i] = ' '.join(word_split) |
|
i += 1 |
|
|
|
text_transcribed = ' '.join(text_split) |
|
|
|
return text_transcribed, text_translated, audio_traslated, video_subtitled, video_traslated |
|
if video_file_upload and lang_input: |
|
print("PROCESANDO ARCHIVO DE VIDEO") |
|
logs_file.write("PROCESANDO ARCHIVO DE VIDEO\n") |
|
print(tiempo[3] + " - Traduciendo el video ingresado " + video_file_upload + " al idioma " + lang_input) |
|
logs_file.write(tiempo[3] + " - Traduciendo el video ingresado " + video_file_upload + " al idioma " + lang_input + "\n") |
|
text_transcribed = convert_video_to_text_app(lang_input,video_file_upload,logs_file) |
|
if text_transcribed.isdigit(): |
|
text_transcribed = num2words (text_transcribed, lang='es', ordinal=False) |
|
else: |
|
text_split = text_transcribed.split() |
|
i=0 |
|
for word in text_split: |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) |
|
if word.startswith("$"): |
|
word = word.replace("$","") |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " pesos" |
|
if word.endswith("%"): |
|
word = word.replace("%","") |
|
if word.isdigit(): |
|
try: |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " por ciento" |
|
except NotImplementedError: |
|
None |
|
if word.count(".") == 1: |
|
word_split = word.split(".") |
|
word_split[0] = num2words(word_split[0], lang='es', ordinal=False) + " punto" |
|
word_split[1] = num2words(word_split[1], lang='es', ordinal=False) + " por ciento" |
|
text_split[i] = ' '.join(word_split) |
|
i += 1 |
|
|
|
text_transcribed = ' '.join(text_split) |
|
|
|
audio_traslated, text_translated = text_to_audio(text_transcribed, lang_input,logs_file) |
|
return_video_subtitled = [None]*1 |
|
return_video_traslated = [None]*1 |
|
hilo_video_subtitled = Thread(target=convert_video_to_video_subtitled_app, args=(video_file_upload, text_translated,logs_file,return_video_subtitled,)) |
|
hilo_video_traslated = Thread(target=convert_video_to_video_app, args=(video_file_upload, audio_traslated,logs_file,return_video_traslated,)) |
|
hilo_video_subtitled.start() |
|
hilo_video_traslated.start() |
|
hilo_video_subtitled.join() |
|
hilo_video_traslated.join() |
|
video_subtitled = return_video_subtitled[0] |
|
video_traslated = return_video_traslated[0] |
|
|
|
print("FIN PROCESO ARCHIVO DE VIDEO") |
|
logs_file.write("FIN PROCESO ARCHIVO DE VIDEO\n") |
|
logs_file.close() |
|
return text_transcribed, text_translated, audio_traslated, video_subtitled, video_traslated |
|
if audio_file_upload and lang_input: |
|
print("PROCESANDO ARCHIVO DE AUDIO") |
|
logs_file.write("PROCESANDO ARCHIVO DE AUDIO\n") |
|
print(tiempo[3] + " - Traduciendo el audio ingresado " + audio_file_upload + " al idioma " + lang_input) |
|
logs_file.write(tiempo[3] + " - Traduciendo el audio ingresado " + audio_file_upload + " al idioma " + lang_input + "\n") |
|
text_translated, text_transcribed, audio_traslated = convert_audio_to_audio_app(lang_input,audio_file_upload,logs_file) |
|
video_subtitled = None |
|
video_traslated = None |
|
print("FIN PROCESO ARCHIVO DE AUDIO") |
|
logs_file.write("FIN PROCESO ARCHIVO DE AUDIO\n") |
|
logs_file.close() |
|
if text_transcribed.isdigit(): |
|
text_transcribed = num2words (text_transcribed, lang='es', ordinal=False) |
|
else: |
|
text_split = text_transcribed.split() |
|
i=0 |
|
for word in text_split: |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) |
|
if word.startswith("$"): |
|
word = word.replace("$","") |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " pesos" |
|
if word.endswith("%"): |
|
word = word.replace("%","") |
|
if word.isdigit(): |
|
try: |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " por ciento" |
|
except NotImplementedError: |
|
None |
|
if word.count(".") == 1: |
|
word_split = word.split(".") |
|
word_split[0] = num2words(word_split[0], lang='es', ordinal=False) + " punto" |
|
word_split[1] = num2words(word_split[1], lang='es', ordinal=False) + " por ciento" |
|
text_split[i] = ' '.join(word_split) |
|
i += 1 |
|
|
|
text_transcribed = ' '.join(text_split) |
|
|
|
return text_transcribed, text_translated, audio_traslated, video_subtitled, video_traslated |
|
if text_input and lang_input: |
|
print("PROCESANDO TEXTO INGRESADO") |
|
logs_file.write("PROCESANDO TEXTO INGRESADO\n") |
|
print(tiempo[3] + " - Traduciendo el texto ingresado " + text_input + " al idioma " + lang_input) |
|
logs_file.write(tiempo[3] + " - Traduciendo el texto ingresado " + text_input + " al idioma " + lang_input + "\n") |
|
|
|
if text_input.isdigit(): |
|
text_input = num2words(text_input, lang='es', ordinal=False) |
|
else: |
|
text_split = text_input.split() |
|
i=0 |
|
for word in text_split: |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) |
|
if word.startswith("$"): |
|
word = word.replace("$","") |
|
if word.isdigit(): |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " pesos" |
|
if word.endswith("%"): |
|
word = word.replace("%","") |
|
if word.isdigit(): |
|
try: |
|
text_split[i] = num2words(word, lang='es', ordinal=False) + " por ciento" |
|
except NotImplementedError: |
|
None |
|
if word.count(".") == 1: |
|
word_split = word.split(".") |
|
word_split[0] = num2words(word_split[0], lang='es', ordinal=False) + " punto" |
|
word_split[1] = num2words(word_split[1], lang='es', ordinal=False) + " por ciento" |
|
text_split[i] = ' '.join(word_split) |
|
i += 1 |
|
|
|
text_input = ' '.join(text_split) |
|
|
|
audio_traslated, text_translated = text_to_audio(text_input, lang_input, logs_file) |
|
video_subtitled = None |
|
video_traslated = None |
|
print("FIN PROCESO TEXTO INGRESADO") |
|
logs_file.write("FIN PROCESO TEXTO INGRESADO\n") |
|
logs_file.close() |
|
return text_input, text_translated, audio_traslated, video_subtitled, video_traslated |
|
if not lang_input: |
|
print("Error - Lenguaje no ingresado") |
|
raise gr.Error("Debes ingresar el idioma a traducir") |
|
|
|
|
|
|
|
def convert_text_to_text_app(lang_input, text_to_translate, logs_file): |
|
if text_to_translate: |
|
print("Traduciendo texto " + text_to_translate + " al idioma " + lang_input) |
|
logs_file.write("Traduciendo texto " + text_to_translate + " al idioma " + lang_input + "\n") |
|
text_translated = text_to_text(text_to_translate, lang_input, logs_file) |
|
return text_translated |
|
|
|
|
|
def convert_audio_to_text_app(lang_input, audio_file, logs_file): |
|
if audio_file: |
|
print("Convirtiendo audio " + audio_file + " al idioma " + lang_input) |
|
logs_file.write("Convirtiendo audio " + audio_file + " al idioma " + lang_input + "\n") |
|
text_translated = audio_to_text(audio_file, logs_file) |
|
return text_translated |
|
|
|
|
|
def convert_audio_to_audio_app(lang_input, audio_file, logs_file): |
|
if audio_file: |
|
print("Traduciendo audio " + audio_file + " al idioma deseado...") |
|
logs_file.write("Traduciendo audio " + audio_file + " al idioma deseado...\n") |
|
text_transcribed = audio_to_text(audio_file, logs_file) |
|
audio_traslated, text_translated = text_to_audio(text_transcribed, lang_input, logs_file) |
|
return text_translated, text_transcribed, audio_traslated |
|
|
|
|
|
def convert_video_to_text_app(lang_input,video_file, logs_file, output_audio_ext="wav"): |
|
print("Procesando video " + video_file + " para convertirlo a texto...") |
|
logs_file.write("Procesando video " + video_file + " para convertirlo a texto...\n") |
|
audio_video = video_to_audio(video_file, output_audio_ext, logs_file) |
|
text_translated = convert_audio_to_text_app(lang_input,audio_video, logs_file) |
|
return text_translated |
|
|
|
|
|
def convert_video_to_video_app(video_file, audio_file_traslated, logs_file, return_video_traslated, output_video_ext=output_video_format): |
|
print("Procesando video " + video_file + " para traducirlo...") |
|
logs_file.write("Procesando video " + video_file + " para traducirlo...\n") |
|
video_traslated = video_to_video(video_file, audio_file_traslated, output_video_ext,logs_file) |
|
return_video_traslated[0] = video_traslated |
|
|
|
|
|
|
|
def convert_video_to_video_subtitled_app(video_file, text_translated, logs_file, return_video_subtitled, output_video_ext=output_video_format): |
|
print("Procesando video " + video_file + " para subtitularlo...") |
|
logs_file.write("Procesando video " + video_file + " para subtitularlo...\n") |
|
video_subtitled = video_to_video_subtitled(video_file, text_translated, output_video_ext, logs_file) |
|
return_video_subtitled[0] = video_subtitled |
|
|
|
|
|
|
|
|
|
lang_input = gr.components.Dropdown(choices=[lang["lang"] for lang in langs], label="Selecciona el idioma al cual deseas traducir:*") |
|
|
|
|
|
video_input_file = gr.Video() |
|
video_input_file = gr.Video(label= "Noticias Caracol", source="upload") |
|
video_input_webcam = gr.Video(label= "Noticias Caracol en vivo", source="webcam", include_audio=1) |
|
|
|
audio_input_file = gr.Audio(label="Blue Radio", source="upload", type="filepath") |
|
audio_input_microphone = gr.Audio(label="Blue Radio en vivo", source="microphone", type="filepath") |
|
text_input = gr.components.Textbox(label="Noticia a traducir:") |
|
output_text_transcribed = gr.components.Textbox(label="Transcripción") |
|
output_text_traslated = gr.components.Textbox(label="Traducción") |
|
output_audio = gr.components.Audio(label="Audio traducido", format=output_audio_format) |
|
output_video_subtitled = gr.components.Video(label="Noticia subtitulada", format=output_video_format) |
|
output_video_traslated = gr.components.Video(label="Noticia traducida", format=output_video_format) |
|
|
|
""""""""" |
|
embed_html = '<iframe width="560" height="315" src="https://www.youtube.com/embed/EngW7tLk6R8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>' |
|
with gr.Blocks() as interface: |
|
gr.HTML(embed_html) |
|
""""""""" |
|
|
|
|
|
interface = gr.Interface( |
|
fn=multimedia_to_multimedia_app, |
|
inputs=[lang_input, video_input_file, audio_input_file, video_input_webcam, audio_input_microphone, text_input], |
|
outputs=[output_text_transcribed, output_text_traslated, output_audio, output_video_subtitled, output_video_traslated], |
|
title="TRADUCTOR MULTILENGUA DE NOTICIAS | AYTÉ - CARACOL", |
|
description="Ingresa la noticia que deseas traducir:", |
|
|
|
theme=gr.themes.Default(primary_hue="blue") |
|
) |
|
|
|
|
|
interface.launch() |
|
|