import gradio as gr import json import zipfile import pandas as pd from sentence_transformers import SentenceTransformer # Importa le funzioni dal tuo script from scripts.aulsign import AulSign from scripts.scripts.sign2text_mapping import sign2text # Configurazione iniziale del modello e dei dati def load_resources(): zip_file_path = 'tools/corpus_embeddings.json.zip' output_folder = 'tools/' with zipfile.ZipFile(zip_file_path, 'r') as zip_ref: zip_ref.extractall(output_folder) print("File estratto con successo.") # Modello di embedding model_name = "mixedbread-ai/mxbai-embed-large-v1" model = SentenceTransformer(model_name) # Percorsi dei file corpus_embeddings_path = 'tools/corpus_embeddings.json' sentences_train_embeddings_path = 'tools/sentences_train_embeddings_filtered_01.json' rules_prompt_path_text2sign = 'tools/rules_prompt_text2sign.txt' rules_prompt_path_sign2text = 'tools/rules_prompt_sign2text.txt' # Carica dati with open(corpus_embeddings_path, 'r') as file: corpus_embeddings = pd.DataFrame(json.load(file)) with open(sentences_train_embeddings_path, 'r') as file: sentences_train_embeddings = pd.DataFrame(json.load(file)) return model, corpus_embeddings_path, corpus_embeddings, sentences_train_embeddings, rules_prompt_path_text2sign, rules_prompt_path_sign2text # Funzione per la modalità text2sign def text_to_sign(sentence_to_analyse): try: pseudo_can, fsw_seq, can_desc_association_seq, _ = AulSign( input=sentence_to_analyse, rules_prompt_path=rules_prompt_path_text2sign, train_sentences=sentences_train_embeddings, vocabulary=corpus_embeddings, model=model, ollama=False, modality="text2sign" ) return fsw_seq,can_desc_association_seq except Exception as e: return f"Error: {str(e)}" # Funzione per la modalità sign2text def sign_to_text(fsw_to_analyse): try: mapped_input = sign2text(fsw_to_analyse,corpus_embeddings_path) print(mapped_input) except Exception as e: return f"Error on mapping : {str(e)}" try: translation = AulSign( input=mapped_input, rules_prompt_path=rules_prompt_path_sign2text, train_sentences=sentences_train_embeddings, vocabulary=corpus_embeddings, model=model, ollama=False, modality="sign2text" ) return translation, mapped_input except Exception as e: return f"Error on AulSign: {str(e)}" # Carica le risorse model, corpus_embeddings_path, corpus_embeddings, sentences_train_embeddings, rules_prompt_path_text2sign, rules_prompt_path_sign2text = load_resources() # Interfaccia Gradio with gr.Blocks() as demo: gr.Markdown("# AulSign Translator") gr.Markdown("Translate from Natural Language to Formal SignWriting (FSW) or viceversa.") with gr.Tab("Text to Sign"): text_input = gr.Textbox(label="Insert a sentence", placeholder="Digit here your sentence...") fsw_output = gr.Textbox(label="Output") intermediate_output = gr.Textbox(label="Intermediate Output") translate_button = gr.Button("Translate") translate_button.click(text_to_sign, inputs=text_input, outputs=[fsw_output,intermediate_output]) gr.Examples( examples=["This is a new ASL translator"], inputs=text_input, outputs=[fsw_output,intermediate_output], fn=text_to_sign ) with gr.Tab("Sign to Text"): sign_input = gr.Textbox(label="Insert a FSW sequence", placeholder="Digit here your FSW sequence...") text_output = gr.Textbox(label="Output") intermediate_output = gr.Textbox(label="Intermediate Output") reconstruct_button = gr.Button("Translate") reconstruct_button.click(sign_to_text, inputs=sign_input, outputs=[text_output,intermediate_output]) gr.Examples( examples=["M518x584S10004492x534S22a04493x569S30a00482x483 AS33b00S19210S20500S26504M519x547S33b00482x482S20500466x512S26504464x532S19210498x511 M530x522S15a36502x510S1813e501x503S2890f470x478 M512x535S1f720492x466S20320497x485S1dc20488x505 M528x595S10009483x405S10021473x422S2e024488x453S10001491x488S10029493x504S15a48477x548S15a40515x548S22a14476x580S22a04515x580"], inputs=sign_input, outputs=[text_output,intermediate_output], fn=sign_to_text ) # Avvia l'app if __name__ == "__main__": demo.launch(share=True)