Spaces:
Sleeping
Sleeping
import gradio as gr | |
from helper.examples.examples import DemoImages | |
from src.htr_pipeline.gradio_backend import FastTrack, SingletonModelLoader | |
model_loader = SingletonModelLoader() | |
fast_track = FastTrack(model_loader) | |
images_for_demo = DemoImages() | |
terminate = False | |
with gr.Blocks() as htr_tool_tab: | |
with gr.Row(equal_height=True): | |
with gr.Column(scale=2): | |
with gr.Row(): | |
fast_track_input_region_image = gr.Image( | |
label="Image to run HTR on", type="numpy", tool="editor", elem_id="image_upload", height=395 | |
) | |
with gr.Row(): | |
with gr.Tab("Output and Settings") as tab_output_and_setting_selector: | |
with gr.Row(): | |
stop_htr_button = gr.Button( | |
value="Stop HTR", | |
variant="stop", | |
) | |
htr_pipeline_button = gr.Button( | |
"Run HTR", | |
variant="primary", | |
visible=True, | |
elem_id="run_pipeline_button", | |
) | |
htr_pipeline_button_api = gr.Button("Run pipeline", variant="primary", visible=False, scale=1) | |
fast_file_downlod = gr.File( | |
label="Download output file", visible=True, scale=1, height=100, elem_id="download_file" | |
) | |
with gr.Tab("Image Viewer") as tab_image_viewer_selector: | |
with gr.Row(): | |
gr.Button( | |
value="External Image Viewer", | |
variant="secondary", | |
link="https://huggingface.co/spaces/Riksarkivet/Viewer_demo", | |
interactive=True, | |
) | |
run_image_visualizer_button = gr.Button( | |
value="Visualize results", variant="primary", interactive=True | |
) | |
selection_text_from_image_viewer = gr.Textbox( | |
interactive=False, label="Text Selector", info="Select a mask on Image Viewer to return text" | |
) | |
with gr.Column(scale=4): | |
with gr.Box(): | |
with gr.Row(visible=True) as output_and_setting_tab: | |
with gr.Column(scale=3): | |
with gr.Row(): | |
with gr.Group(): | |
gr.Markdown(" ⚙️ Settings ") | |
with gr.Row(): | |
radio_file_input = gr.CheckboxGroup( | |
choices=["Txt", "XML"], | |
value=["Txt", "XML"], | |
label="Output file extension", | |
# info="Only txt and page xml is supported for now!", | |
scale=1, | |
) | |
with gr.Row(): | |
gr.Checkbox( | |
value=True, | |
label="Binarize image", | |
info="Binarize image to reduce background noise", | |
) | |
gr.Checkbox( | |
value=True, | |
label="Output prediction threshold", | |
info="Output XML with prediction score", | |
) | |
with gr.Row(): | |
gr.Slider( | |
value=0.6, | |
minimum=0.5, | |
maximum=1, | |
label="HTR threshold", | |
info="Prediction score threshold for transcribed lines", | |
scale=1, | |
) | |
gr.Slider( | |
value=0.7, | |
minimum=0.6, | |
maximum=1, | |
label="Avg threshold", | |
info="Average prediction score for a region", | |
scale=1, | |
) | |
htr_tool_region_segment_model_dropdown = gr.Dropdown( | |
choices=["Riksarkivet/rtmdet_region"], | |
value="Riksarkivet/rtmdet_region", | |
label="Region Segment models", | |
info="Will add more models later!", | |
) | |
# with gr.Accordion("Transcribe settings:", open=False): | |
htr_tool_line_segment_model_dropdown = gr.Dropdown( | |
choices=["Riksarkivet/rtmdet_lines"], | |
value="Riksarkivet/rtmdet_lines", | |
label="Line Segment models", | |
info="Will add more models later!", | |
) | |
htr_tool_transcriber_model_dropdown = gr.Dropdown( | |
choices=["Riksarkivet/satrn_htr", "microsoft/trocr-base-handwritten"], | |
value="Riksarkivet/satrn_htr", | |
label="Transcriber models", | |
info="Models will be continuously updated with future additions for specific cases.", | |
) | |
with gr.Column(scale=2): | |
fast_name_files_placeholder = gr.Markdown(visible=False) | |
gr.Examples( | |
examples=images_for_demo.examples_list, | |
inputs=[fast_name_files_placeholder, fast_track_input_region_image], | |
label="Example images", | |
examples_per_page=5, | |
) | |
with gr.Row(visible=False) as image_viewer_tab: | |
text_polygon_dict = gr.Variable() | |
fast_track_output_image = gr.Image( | |
label="Image Viewer", type="numpy", height=600, interactive=False | |
) | |
xml_rendered_placeholder_for_api = gr.Textbox(visible=False) | |
htr_event_click_event = htr_pipeline_button.click( | |
fast_track.segment_to_xml, | |
inputs=[fast_track_input_region_image, radio_file_input], | |
outputs=[fast_file_downlod, fast_file_downlod], | |
) | |
htr_pipeline_button_api.click( | |
fast_track.segment_to_xml_api, | |
inputs=[fast_track_input_region_image], | |
outputs=[xml_rendered_placeholder_for_api], | |
api_name="predict", | |
) | |
def dummy_update_htr_tool_transcriber_model_dropdown(htr_tool_transcriber_model_dropdown): | |
return gr.update(value="Riksarkivet/satrn_htr") | |
htr_tool_transcriber_model_dropdown.change( | |
fn=dummy_update_htr_tool_transcriber_model_dropdown, | |
inputs=htr_tool_transcriber_model_dropdown, | |
outputs=htr_tool_transcriber_model_dropdown, | |
) | |
def update_selected_tab_output_and_setting(): | |
return gr.update(visible=True), gr.update(visible=False) | |
def update_selected_tab_image_viewer(): | |
return gr.update(visible=False), gr.update(visible=True) | |
tab_output_and_setting_selector.select( | |
fn=update_selected_tab_output_and_setting, outputs=[output_and_setting_tab, image_viewer_tab] | |
) | |
tab_image_viewer_selector.select( | |
fn=update_selected_tab_image_viewer, outputs=[output_and_setting_tab, image_viewer_tab] | |
) | |
def stop_function(): | |
from src.htr_pipeline.utils import pipeline_inferencer | |
pipeline_inferencer.terminate = True | |
gr.Info("The HTR execution was halted") | |
stop_htr_button.click(fn=stop_function, inputs=None, outputs=None, cancels=[htr_event_click_event]) | |
run_image_visualizer_button.click( | |
fn=fast_track.visualize_image_viewer, | |
inputs=fast_track_input_region_image, | |
outputs=[fast_track_output_image, text_polygon_dict], | |
) | |
fast_track_output_image.select( | |
fast_track.get_text_from_coords, inputs=text_polygon_dict, outputs=selection_text_from_image_viewer | |
) | |