|
import gradio as gr |
|
from transformers import AutoImageProcessor, AutoModelForObjectDetection |
|
import torch |
|
|
|
|
|
processor = AutoImageProcessor.from_pretrained("microsoft/table-transformer-structure-recognition") |
|
model = AutoModelForObjectDetection.from_pretrained("microsoft/table-transformer-structure-recognition") |
|
|
|
|
|
def predict(image): |
|
|
|
inputs = processor(images=image, return_tensors="pt") |
|
|
|
|
|
with torch.no_grad(): |
|
outputs = model(**inputs) |
|
|
|
|
|
predicted_boxes = outputs.pred_boxes[0].cpu().numpy() |
|
predicted_class_logits = outputs.logits[0].cpu().numpy() |
|
predicted_classes = predicted_class_logits.argmax(-1) |
|
class_names = model.config.id2label |
|
|
|
|
|
column_boxes = [] |
|
for idx, class_id in enumerate(predicted_classes): |
|
class_name = class_names[class_id] |
|
if "column" in class_name.lower(): |
|
column_boxes.append(predicted_boxes[idx]) |
|
|
|
|
|
return {"boxes": column_boxes, "classes": ["column"] * len(column_boxes)} |
|
|
|
|
|
interface = gr.Interface( |
|
fn=predict, |
|
inputs=gr.Image(type="pil"), |
|
outputs="json", |
|
) |
|
|
|
|
|
interface.launch() |
|
|