Spaces:
Sleeping
Sleeping
File size: 2,907 Bytes
c586aa6 1ae8f9f c8d472e a4d0a87 c586aa6 281bbb2 c586aa6 a4d0a87 8875201 806c938 a4d0a87 806c938 a4d0a87 8875201 806c938 a4d0a87 8875201 a4d0a87 c586aa6 a4d0a87 c586aa6 a4d0a87 c586aa6 8875201 c586aa6 57d3fac 7fb29ae c586aa6 8875201 c586aa6 8dcb382 8875201 8dcb382 7fb29ae a4d0a87 c586aa6 a4d0a87 c586aa6 8875201 c586aa6 52f3a2e 8875201 c586aa6 8875201 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
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)
|