dawsonia-demo / app /tabs /visualizer_functions.py
Ashwin V. Mohanan
Sync on digitize and read from final output directory
d5ea0f1
import os
import gradio as gr
from jinja2 import Environment, FileSystemLoader
from typing_extensions import TypeAlias
_ENV = Environment(loader=FileSystemLoader("app/assets/jinja-templates"))
_IMAGE_TEMPLATE = _ENV.get_template("image.j2")
from typing import NamedTuple, TypeAlias
class TableCell(NamedTuple):
polygon: tuple[tuple[int, int], ...]
text_x: int
text_y: int
text: str
class Page(NamedTuple):
width: int
height: int
cells: list[TableCell]
path: str
Collection: TypeAlias = list[Page]
def render_image(collection: Collection, current_page_index: int) -> str:
return _IMAGE_TEMPLATE.render(
page=collection[current_page_index],
)
def toggle_navigation_button(collection: Collection):
visible = len(collection) > 1
return gr.update(visible=visible)
def activate_left_button(current_page_index):
interactive = current_page_index > 0
return gr.update(interactive=interactive)
def activate_right_button(collection: Collection, current_page_index):
interactive = current_page_index + 1 < len(collection)
return gr.update(interactive=interactive)
def right_button_click(collection: Collection, current_page_index):
max_index = len(collection) - 1
return min(max_index, current_page_index + 1)
def left_button_click(current_page_index):
return max(0, current_page_index - 1)
def update_image_caption(collection: Collection, current_page_index):
n_pages = len(collection)
label = os.path.split(collection[current_page_index].path)[-1]
return f"image {current_page_index + 1} of {n_pages}: `{label}`"