Spaces:
Sleeping
Sleeping
import shutil | |
import gradio as gr | |
import os | |
from app.gradio_config import css, theme | |
from app.tabs.submit import ( | |
submit, | |
custom_template_yaml, | |
collection_submit_state, | |
) | |
from app.tabs.visualizer import visualizer, collection as collection_viz_state | |
from app.tabs.templating import ( | |
templating_block, | |
TEMPLATE_IMAGE_FOLDER, | |
TEMPLATE_YAML_FOLDER, | |
template_output_yaml_code, | |
) | |
from gradio_modal import Modal | |
from htrflow.models.huggingface.trocr import TrOCR | |
gr.set_static_paths(paths=[TEMPLATE_IMAGE_FOLDER]) | |
gr.set_static_paths(paths=[TEMPLATE_YAML_FOLDER]) | |
# TODO: fix api/ endpoints.. | |
# TODO add colab | |
# TDOO addd eexmaple for api | |
def load_markdown(language, section, content_dir="app/content"): | |
"""Load markdown content from files.""" | |
if language is None: | |
file_path = os.path.join(content_dir, f"{section}.md") | |
else: | |
file_path = os.path.join(content_dir, language, f"{section}.md") | |
if os.path.exists(file_path): | |
with open(file_path, "r", encoding="utf-8") as f: | |
return f.read() | |
return f"## Content missing for {file_path} in {language}" | |
matomo = """ | |
<!-- Matomo --> | |
<script> | |
var _paq = window._paq = window._paq || []; | |
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */ | |
_paq.push(['trackPageView']); | |
_paq.push(['enableLinkTracking']); | |
(function() { | |
var u="https://matomo.riksarkivet.se/"; | |
_paq.push(['setTrackerUrl', u+'matomo.php']); | |
_paq.push(['setSiteId', '25']); | |
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; | |
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); | |
})(); | |
</script> | |
<noscript><p><img referrerpolicy="no-referrer-when-downgrade" src="https://matomo.riksarkivet.se/matomo.php?idsite=25&rec=1" style="border:0;" alt="" /></p></noscript> | |
<!-- End Matomo Code --> | |
""" | |
with gr.Blocks(title="HTRflow", theme=theme, css=css, head=matomo) as demo: | |
with gr.Row(): | |
with gr.Column(scale=1): | |
help_button = gr.Button("Help", scale=0) | |
with Modal(visible=False) as help_modal: | |
# TODO: tutorial material? | |
with gr.Tab("How to use App"): | |
gr.Markdown(load_markdown(None, "how_it_works")) | |
with gr.Tab("Contact"): | |
pass | |
with gr.Column(scale=2): | |
gr.Markdown(load_markdown(None, "main_title")) | |
with gr.Column(scale=1): | |
gr.Markdown(load_markdown(None, "main_sub_title")) | |
with gr.Tabs(elem_classes="top-navbar") as navbar: | |
with gr.Tab(label="Templating") as tab_templating: | |
templating_block.render() | |
with gr.Tab(label="Submit Job") as tab_submit: | |
submit.render() | |
with gr.Tab(label="Result") as tab_visualizer: | |
visualizer.render() | |
def inital_trocr_load(): | |
TrOCR("Riksarkivet/trocr-base-handwritten-hist-swe-2") | |
def inital_yaml_code(): | |
tmp_dir = "tmp/" | |
if os.path.exists(tmp_dir) and os.path.isdir(tmp_dir): | |
shutil.rmtree(tmp_dir) | |
def inital_yaml_code(template_output_yaml_code): | |
return template_output_yaml_code | |
def sync_gradio_objects(input_value, state_value): | |
"""Synchronize the YAML state if there is a mismatch.""" | |
return input_value if input_value != state_value else gr.skip() | |
def sync_gradio_object_state(input_value, state_value): | |
"""Synchronize the Collection.""" | |
state_value = input_value | |
return state_value if state_value is not None else gr.skip() | |
tab_templating.select( | |
inputs=[custom_template_yaml, template_output_yaml_code], | |
outputs=[template_output_yaml_code], | |
fn=sync_gradio_objects, | |
) | |
tab_submit.select( | |
inputs=[template_output_yaml_code, custom_template_yaml], | |
outputs=[custom_template_yaml], | |
fn=sync_gradio_objects, | |
) | |
tab_visualizer.select( | |
inputs=[collection_submit_state, collection_viz_state], | |
outputs=[collection_viz_state], | |
fn=sync_gradio_object_state, | |
) | |
help_button.click(lambda: Modal(visible=True), None, help_modal) | |
demo.queue() | |
if __name__ == "__main__": | |
demo.launch( | |
server_name="0.0.0.0", | |
server_port=7860, | |
enable_monitoring=True, | |
# show_error=True, | |
) | |