Spaces:
Sleeping
Sleeping
import os | |
import gradio as gr | |
from utils import extract_kyc_fields | |
from simple_salesforce import Salesforce | |
# ------------------------ | |
# CONFIGURATION | |
# ------------------------ | |
SF_USERNAME = os.getenv("SF_USERNAME", "[email protected]") | |
SF_PASSWORD = os.getenv("SF_PASSWORD", "Lic@2025@") | |
SF_TOKEN = os.getenv("SF_TOKEN", "AmmfRcd6IiYaRtSGntBnzNMQU") | |
# Limit Paddle threads to avoid container crashes | |
os.environ["OMP_NUM_THREADS"] = "1" | |
# ------------------------ | |
# CONNECT TO SALESFORCE | |
# ------------------------ | |
def connect_salesforce(): | |
"""Connects to Salesforce (Production first, then Sandbox fallback)""" | |
try: | |
sf = Salesforce( | |
username=SF_USERNAME, | |
password=SF_PASSWORD, | |
security_token=SF_TOKEN, | |
domain="login" # Production | |
) | |
print("β Connected to Salesforce (Production)") | |
return {"status": "success", "env": "Production", "sf": sf} | |
except Exception as e: | |
print("β Production login failed:", e) | |
try: | |
sf = Salesforce( | |
username=SF_USERNAME, | |
password=SF_PASSWORD, | |
security_token=SF_TOKEN, | |
domain="test" # Sandbox | |
) | |
print("β Connected to Salesforce (Sandbox)") | |
return {"status": "success", "env": "Sandbox", "sf": sf} | |
except Exception as e2: | |
print("β Sandbox login failed:", e2) | |
return {"status": "error", "message": "Salesforce login failed"} | |
sf_status = connect_salesforce() | |
# ------------------------ | |
# PROCESS IMAGE FUNCTION | |
# ------------------------ | |
def process_image(image_file): | |
"""Process uploaded KYC image and extract PAN/Aadhaar details""" | |
if sf_status["status"] != "success": | |
return {"salesforce_status": "error", "message": sf_status.get("message", "Login failed")} | |
if image_file is None: | |
return {"ocr_status": "error", "message": "No image uploaded"} | |
try: | |
# Pass the filepath string directly, no .name | |
ocr_result = extract_kyc_fields(image_file) | |
return { | |
"salesforce_status": "connected", | |
"sf_env": sf_status.get("env"), | |
"ocr_result": ocr_result | |
} | |
except Exception as e: | |
return {"ocr_status": "error", "message": f"OCR extraction failed: {str(e)}"} | |
# ------------------------ | |
# GRADIO INTERFACE | |
# ------------------------ | |
iface = gr.Interface( | |
fn=process_image, | |
inputs=gr.Image(type="filepath"), # Use filepath for PaddleOCR | |
outputs=gr.JSON(), | |
title="AI KYC OCR & Salesforce Integration", | |
description="Upload PAN or Aadhaar card images to extract text and verify Salesforce connection." | |
) | |
# ------------------------ | |
# LAUNCH APP | |
# ------------------------ | |
if __name__ == "__main__": | |
# Launch Gradio server | |
iface.launch(server_name="0.0.0.0", server_port=7860, debug=True) | |