import gradio as gr
from services.ocr import upload_file, ocr, ocr_languages
from services.interleave import interleave_text
from services.translation import translation_languages, translation, default_translation_lang
from services.transliteration import transliterate_languages, indic_transliteration
html_header = f"""
LMX
"""
html_footer = f"""
"""
with gr.Blocks(title="LMX", analytics_enabled=True) as interface:
with gr.Row():
gr.HTML(html_header)
gr.Button(variant="primary", scale=1, min_width=5, value="☕️ Buy me a coffee", size="lg", link_target="_blank", link="https://buymeacoffee.com/jobvargh")
gr.Button(variant="primary", scale=1, min_width=5, value="Github", size="lg", link_target="_blank", link="https://github.com/jobinv12/LMX")
with gr.Tab("OCR"):
with gr.Row():
with gr.Column():
ocr_image_url = gr.Textbox(interactive=False, visible=False)
ocr_languages = gr.Dropdown(label="Source language", choices=ocr_languages, filterable=True, info="Select source language", visible=False)
ocr_upload_file = gr.UploadButton(label="Upload a Image", file_types=[".png",".jpeg",".webp",".jpg"], file_count="single")
ocr_file = gr.Image(height=250, width=700, type="filepath", show_label=False, buttons=[], container=False)
ocr_upload_file.upload(upload_file, inputs=ocr_upload_file, outputs=[ocr_file, ocr_image_url])
with gr.Column():
ocr_output = gr.TextArea(label="Output", lines=15 ,interactive=False)
with gr.Row():
clear_btn = gr.ClearButton(value="Clear", variant="secondary", components=[ocr_image_url, ocr_file, ocr_output])
ocr_submit_btn = gr.Button(value="Run", variant="huggingface")
ocr_submit_btn.click(fn=ocr, inputs=[ocr_image_url, ocr_languages], outputs=ocr_output)
with gr.Tab("Transliteration"):
with gr.Row():
with gr.Column():
transliteration_src_lang = gr.Dropdown(label="Source Language", choices=transliterate_languages, filterable=True, interactive=True)
transliteration_input_area = gr.TextArea(label="Input")
with gr.Column():
transliteration_trgt_lang = gr.Dropdown(label="Target Language", choices=transliterate_languages, filterable=True, interactive=True)
transliteration_output_area = gr.TextArea(label="Output", interactive=False)
with gr.Row():
clear_btn = gr.ClearButton(value="Clear", variant="secondary", components=[transliteration_input_area, transliteration_output_area])
transliteration_submit_btn = gr.Button(value="Run", variant="huggingface")
transliteration_submit_btn.click(fn=indic_transliteration, inputs=[transliteration_src_lang, transliteration_trgt_lang, transliteration_input_area], outputs=transliteration_output_area)
with gr.Tab("Translation"):
with gr.Row():
with gr.Column():
translation_src_lang = gr.Dropdown(label="Source Language", choices=translation_languages, filterable=True, interactive=True)
translation_input_area = gr.TextArea(label="Input")
with gr.Column():
translation_trgt_lang = gr.Dropdown(label="Target Language", choices=translation_languages, filterable=True, interactive=True)
translation_output_area = gr.TextArea(label="Output", interactive=False)
with gr.Row():
translation_clear_btn = gr.ClearButton(value="Clear", variant="secondary", components=[translation_input_area, translation_output_area])
translation_submit_btn = gr.Button(value="Run", variant="huggingface")
translation_submit_btn.click(fn=translation, inputs=[translation_src_lang, translation_trgt_lang, translation_input_area], outputs=translation_output_area)
with gr.Tab("Interleave"):
with gr.Row():
interleave_input_area = gr.TextArea(label="First Input", type="text")
interleave_input2_area = gr.TextArea(label="Second Input", type="text")
with gr.Row():
interleave_clear_btn = gr.ClearButton(value="Clear", variant="secondary", components=[interleave_input_area, interleave_input2_area])
interleave_submit_btn = gr.Button(value="Run" ,variant="huggingface")
with gr.Row():
interleave_output_area = gr.TextArea(label="Output", interactive=False, type="text")
interleave_submit_btn.click(fn=interleave_text, inputs=[interleave_input_area, interleave_input2_area], outputs=[interleave_output_area])
with gr.Row():
gr.HTML(html_template=html_footer)
if __name__ == "__main__":
interface.launch(pwa=True, share=True,
allowed_paths=["assets", "bmc"],
enable_monitoring=True)