File size: 3,444 Bytes
2a0d582
21c87da
c115883
21c87da
0658a37
dae80b9
e03657f
c115883
 
381bbf4
0658a37
5c2cbe3
21c87da
eb09877
 
 
5eb89c4
e03657f
c115883
 
 
 
 
 
 
 
 
 
 
 
 
e03657f
be3c9c0
e03657f
be3c9c0
 
3cb882a
 
be3c9c0
 
 
 
 
 
 
 
 
e03657f
be3c9c0
 
e03657f
 
 
21c87da
 
e03657f
 
5a98ee7
e03657f
5a98ee7
e03657f
 
 
21c87da
381bbf4
21c87da
381bbf4
21c87da
 
3bc2cfb
 
21c87da
c369c5b
c115883
5eb89c4
e03657f
 
 
 
c115883
 
 
 
 
 
 
 
 
44c7f77
 
e03657f
21c87da
 
 
 
44c7f77
 
8d7c1dd
42175c1
c115883
44c7f77
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
import shutil
import gradio as gr
import os
from app.gradio_config import css, theme
from app.tabs.submit import submit, collection_submit_state
from app.tabs.visualizer import visualizer, collection as collection_viz_state
from gradio_modal import Modal

from htrflow.models.huggingface.trocr import TrOCR

TEMPLATE_YAML_FOLDER = "app/assets/templates"
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(['setDomains', ['*.riksarkivet.se', 'huggingface.co']]);
  _paq.push(['enableCrossDomainLinking']);
  _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&amp;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="Submit Job") as tab_submit:
            submit.render()

        with gr.Tab(label="Result") as tab_visualizer:
            visualizer.render()

    @demo.load()
    def inital_trocr_load():
        TrOCR("Riksarkivet/trocr-base-handwritten-hist-swe-2")

    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_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,
    )