Spaces:
Sleeping
Sleeping
File size: 4,081 Bytes
ea1515b 9da88f6 a45435e 9da88f6 a45435e ea1515b a45435e 9da88f6 a45435e ea1515b 6f5b9db a45435e ea1515b a45435e 9da88f6 a45435e a4e4dc1 ea1515b 947c0e2 2947130 ef1feef 0698467 2947130 ef1feef ea1515b 2947130 ea1515b 7f7de8d ea1515b 7f7de8d ea1515b 947c0e2 b91b92a 947c0e2 ea1515b 947c0e2 ea1515b 0581182 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
import torch
import gradio as gr
import json
from transformers import pipeline
# Load the translation pipeline
text_translator = pipeline(
"translation",
model="facebook/nllb-200-distilled-600M",
torch_dtype=torch.bfloat16
)
# Load the JSON data for language codes
with open('language.json', 'r') as file:
language_data = json.load(file)
# Get all available languages (excluding duplicates with different scripts)
available_languages = []
seen_languages = set()
for entry in language_data:
base_language = entry['Language'].split('(')[0].strip()
if base_language not in seen_languages:
available_languages.append(base_language)
seen_languages.add(base_language)
# Sort languages alphabetically
available_languages.sort()
# Function to retrieve FLORES-200 code for a given language
def get_FLORES_code_from_language(language):
# Try exact match first
for entry in language_data:
if entry['Language'].lower() == language.lower():
return entry['FLORES-200 code']
# Fallback to matching base language name
for entry in language_data:
if entry['Language'].lower().startswith(language.lower()):
return entry['FLORES-200 code']
return None
# Translation function
def translate_text(text, destination_language):
dest_code = get_FLORES_code_from_language(destination_language)
if dest_code is None:
return f"Error: Could not find FLORES code for language {destination_language}"
try:
# Translation call
translation = text_translator(text, src_lang="eng_Latn", tgt_lang=dest_code)
return translation[0]["translation_text"]
except Exception as e:
return f"Error during translation: {str(e)}"
# Initialize the speech-to-text pipeline (Whisper model)
speech_to_text = pipeline("automatic-speech-recognition", model="openai/whisper-small")
# Function to transcribe audio to text
def transcribe_audio(audio_file, destination_language):
try:
transcription_result = speech_to_text(audio_file)
print(f"Transcription result: {transcription_result}") # Debugging output
if "text" in transcription_result:
transcription = transcription_result["text"]
else:
return "Error: Unable to transcribe audio."
# Translate the transcribed text
return translate_text(transcription, destination_language)
except Exception as e:
return f"Error during transcription: {str(e)}"
# Gradio interface
with gr.Blocks() as demo:
with gr.Row():
gr.Markdown(
"""
# π AI Translation Assistant
Translate **text or audio** into your desired language with professional accuracy.
"""
)
with gr.Tabs():
with gr.Tab("Text Translation"):
text_input = gr.Textbox(label="Input Text", lines=6, placeholder="Enter your text here...")
language_dropdown = gr.Dropdown(
choices=available_languages, label="Select Destination Language"
)
translated_text_output = gr.Textbox(label="Translated Text", lines=4)
translate_button = gr.Button("Translate")
translate_button.click(
translate_text, inputs=[text_input, language_dropdown], outputs=[translated_text_output]
)
with gr.Tab("Audio Translation"):
audio_input = gr.Audio(label="Upload Audio File", type="filepath")
audio_language_dropdown = gr.Dropdown(
choices=available_languages, label="Select Destination Language"
)
audio_translated_text_output = gr.Textbox(label="Transcribed and Translated Text", lines=2)
audio_translate_button = gr.Button("Transcribe and Translate")
audio_translate_button.click(
transcribe_audio,
inputs=[audio_input, audio_language_dropdown],
outputs=[audio_translated_text_output],
)
if __name__ == "__main__":
demo.launch()
|