import gradio as gr from transformers import BlipProcessor, BlipForConditionalGeneration from PIL import Image from fpdf import FPDF import os from datetime import datetime processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base") model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base") def analyze_image(image): raw_image = Image.fromarray(image) text = "Describe the construction site" inputs = processor(raw_image, text, return_tensors="pt") out = model.generate(**inputs) caption = processor.decode(out[0], skip_special_tokens=True) date_str = datetime.now().strftime("%Y-%m-%d") pdf = FPDF() pdf.add_page() pdf.set_font("Arial", size=12) pdf.multi_cell(0, 10, f"Daily Progress Report - {date_str}\n\nCaption: {caption}") os.makedirs("reports", exist_ok=True) file_path = f"reports/DPR_{date_str}.pdf" pdf.output(file_path) return caption, file_path demo = gr.Interface( fn=analyze_image, inputs=gr.Image(type="numpy", label="Upload Site Photo"), outputs=[gr.Textbox(label="Generated Caption"), gr.File(label="Download DPR PDF")], title="Auto DPR Generator", description="Upload a construction site image to generate a Daily Progress Report." ) if __name__ == "__main__": demo.launch()