import gradio as gr from transformers import AutoImageProcessor, AutoModelForObjectDetection import torch # Load the processor and model for table structure recognition processor = AutoImageProcessor.from_pretrained("microsoft/table-transformer-structure-recognition") model = AutoModelForObjectDetection.from_pretrained("microsoft/table-transformer-structure-recognition") # Define the inference function def predict(image): # Preprocess the input image inputs = processor(images=image, return_tensors="pt") # Perform object detection using the model with torch.no_grad(): outputs = model(**inputs) # Extract bounding boxes and class labels predicted_boxes = outputs.pred_boxes[0].cpu().numpy() # First image predicted_classes = outputs.logits.argmax(-1).cpu().numpy() # Class predictions # Filter predictions to only include columns column_class_id = 1 # Assuming class ID 1 corresponds to columns, adjust if needed column_boxes = predicted_boxes[predicted_classes == column_class_id] # Return the bounding boxes for columns return {"boxes": column_boxes.tolist(), "classes": ["column"] * len(column_boxes)} # Set up the Gradio interface interface = gr.Interface( fn=predict, # The function that gets called when an image is uploaded inputs=gr.Image(type="pil"), # Image input (as PIL image) outputs="json", # Outputting a JSON with the boxes and classes ) # Launch the Gradio app interface.launch()