Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import fitz # PyMuPDF for PDFs | |
| import easyocr # OCR for images | |
| import openpyxl # XLSX processing | |
| import pptx # PPTX processing | |
| import docx # DOCX processing | |
| import json # Exporting results | |
| from deep_translator import GoogleTranslator | |
| from transformers import pipeline | |
| from fastapi import FastAPI | |
| from starlette.responses import RedirectResponse | |
| # Initialize FastAPI app | |
| app = FastAPI() | |
| # Initialize AI Models | |
| qa_model = pipeline("question-answering", model="deepset/roberta-base-squad2") | |
| image_captioning = pipeline("image-to-text", model="nlpconnect/vit-gpt2-image-captioning") | |
| reader = easyocr.Reader(['en', 'fr']) # OCR for English & French | |
| # ---- TEXT EXTRACTION FUNCTIONS ---- | |
| def extract_text_from_pdf(pdf_file): | |
| """Extract text from a PDF file.""" | |
| text = [] | |
| try: | |
| with fitz.open(pdf_file) as doc: | |
| for page in doc: | |
| text.append(page.get_text("text")) | |
| except Exception as e: | |
| return f"Error reading PDF: {e}" | |
| return "\n".join(text) | |
| def extract_text_from_docx(docx_file): | |
| """Extract text from a DOCX file.""" | |
| doc = docx.Document(docx_file) | |
| return "\n".join([p.text for p in doc.paragraphs if p.text.strip()]) | |
| def extract_text_from_pptx(pptx_file): | |
| """Extract text from a PPTX file.""" | |
| text = [] | |
| try: | |
| presentation = pptx.Presentation(pptx_file) | |
| for slide in presentation.slides: | |
| for shape in slide.shapes: | |
| if hasattr(shape, "text"): | |
| text.append(shape.text) | |
| except Exception as e: | |
| return f"Error reading PPTX: {e}" | |
| return "\n".join(text) | |
| def extract_text_from_xlsx(xlsx_file): | |
| """Extract text from an XLSX file.""" | |
| text = [] | |
| try: | |
| wb = openpyxl.load_workbook(xlsx_file) | |
| for sheet in wb.sheetnames: | |
| ws = wb[sheet] | |
| for row in ws.iter_rows(values_only=True): | |
| text.append(" ".join(str(cell) for cell in row if cell)) | |
| except Exception as e: | |
| return f"Error reading XLSX: {e}" | |
| return "\n".join(text) | |
| # ---- MAIN PROCESSING FUNCTIONS ---- | |
| def answer_question_from_doc(file, question): | |
| """Process document and answer a question based on its content.""" | |
| ext = file.name.split(".")[-1].lower() | |
| if ext == "pdf": | |
| context = extract_text_from_pdf(file.name) | |
| elif ext == "docx": | |
| context = extract_text_from_docx(file.name) | |
| elif ext == "pptx": | |
| context = extract_text_from_pptx(file.name) | |
| elif ext == "xlsx": | |
| context = extract_text_from_xlsx(file.name) | |
| else: | |
| return """Unsupported file format.""" | |
| if not context.strip(): | |
| return """No text found in the document.""" | |
| # Generate answer using QA pipeline correctly | |
| try: | |
| result = qa_model({"question": question, "context": context}) | |
| return result["answer"] | |
| except Exception as e: | |
| return f"Error generating answer: {e}" | |
| try: | |
| result = qa_model({"question": question, "context": img_text}) | |
| return result["answer"] | |
| except Exception as e: | |
| return f"Error generating answer: {e}" | |
| with gr.Blocks() as img_interface: | |
| gr.Markdown("## 🖼️ Image Question Answering") | |
| image_input = gr.Image(label="Upload an Image") | |
| img_question_input = gr.Textbox(label="Ask a question") | |
| img_answer_output = gr.Textbox(label="Answer") | |
| image_submit = gr.Button("Get Answer") | |
| image_submit.click(answer_question_from_image, inputs=[image_input, img_question_input], outputs=img_answer_output) | |
| # ---- MOUNT GRADIO APP ---- | |
| demo = gr.TabbedInterface(img_interface, "Image QA") | |
| app = gr.mount_gradio_app(app, demo, path="/") | |
| def home(): | |
| return RedirectResponse(url="/") | |