Spaces:
Paused
Paused
| import os | |
| import json | |
| import base64 | |
| import google.generativeai as genai | |
| from fastapi import FastAPI, HTTPException, File, UploadFile | |
| app = FastAPI(title="Business Card Analyzer") | |
| GOOGLE_API_KEY = 'AIzaSyDcYyq3w21iwipYn17wCAQo3AYWhUIGDSI' | |
| if not GOOGLE_API_KEY: | |
| raise Exception("Please set the GOOGLE_API_KEY environment variable.") | |
| genai.configure(api_key=GOOGLE_API_KEY) | |
| # Define the prompt to instruct the model. | |
| PROMPT = """ | |
| Analyze the business card and extract the following information in JSON format: | |
| { | |
| "name": "Full Name", | |
| "mobile_number": "Mobile Number", | |
| "company_name": "Company Name", | |
| "email": "Email Address", | |
| "job_title": "Job Title", | |
| "address": "Address", | |
| "website": "Website URL" | |
| } | |
| Ensure that the response is strictly in JSON format and includes all the fields mentioned above. If any information is missing or unclear, set the corresponding field to null. | |
| """ | |
| async def analyze_business_card(file: UploadFile = File(...)): | |
| # Validate the file type. Only JPEG and PNG are supported. | |
| if file.content_type not in ["image/jpeg", "image/png"]: | |
| raise HTTPException( | |
| status_code=400, | |
| detail="Invalid file type. Only JPEG and PNG images are supported." | |
| ) | |
| # Read the uploaded file | |
| try: | |
| file_content = await file.read() | |
| except Exception as e: | |
| raise HTTPException( | |
| status_code=400, | |
| detail=f"Failed to read the uploaded file: {e}" | |
| ) | |
| # Encode the image in base64 | |
| encoded_image = base64.b64encode(file_content).decode("utf-8") | |
| # Create an instance of the Gemini model | |
| model = genai.GenerativeModel(model_name="gemini-1.5-pro") | |
| # Call the model and process its response | |
| try: | |
| result = model.generate_content([ | |
| { | |
| "mime_type": file.content_type, | |
| "data": encoded_image, | |
| }, | |
| PROMPT, | |
| ]) | |
| # Get the raw text response | |
| raw = result.text.strip() | |
| # Remove markdown formatting if present (e.g., ```json ... ```) | |
| if raw.startswith("```"): | |
| lines = raw.splitlines() | |
| if lines[0].startswith("```"): | |
| lines = lines[1:] | |
| if lines and lines[-1].startswith("```"): | |
| lines = lines[:-1] | |
| raw = "\n".join(lines).strip() | |
| data = json.loads(raw) | |
| except json.JSONDecodeError as jde: | |
| raise HTTPException( | |
| status_code=500, | |
| detail=f"JSON decoding error: {jde}. Response text was: {raw}" | |
| ) | |
| except Exception as e: | |
| raise HTTPException( | |
| status_code=500, | |
| detail=f"An error occurred while processing the image: {e}" | |
| ) | |
| return data | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run("main:app", host="0.0.0.0", port=7860, reload=True) | |