Spaces:
Running
Running
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}`" | |