SMART_KYC_OCR / app.py
dschandra's picture
Update app.py
7fb29ae verified
raw
history blame
2.91 kB
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)