Spaces:
Running
Running
File size: 3,492 Bytes
0590b95 d55b56b 9bbac2d d55b56b b4bd6e7 5066cf7 7926822 624d5ea b4bd6e7 7926822 b4bd6e7 0590b95 d55b56b a4391a6 9965439 91bcc4e 357e812 91bcc4e 357e812 9bbac2d b4bd6e7 624d5ea b6c69fc 121b79e 2e709f8 5066cf7 b4bd6e7 357e812 5066cf7 b4bd6e7 624d5ea 357e812 7926822 5066cf7 b4bd6e7 91bcc4e 2e709f8 d55b56b 357e812 77bb0dd 357e812 77bb0dd b61209f 77bb0dd b61209f 136c114 77bb0dd b6c69fc 2bbc794 9bbac2d 77bb0dd 2e709f8 f32159a 2e709f8 3a4eb5d |
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 88 89 90 91 92 93 |
import gradio as gr
from PIL import Image
from datetime import datetime
import pytz
from ocr_engine import extract_weight
from simple_salesforce import Salesforce
import base64
import os
# Salesforce credentials
SF_USERNAME = "[email protected]"
SF_PASSWORD = "autoweight@32"
SF_TOKEN = "UgiHKWT0aoZRX9gvTYDjAiRY"
# Connect to Salesforce
sf = Salesforce(username=SF_USERNAME, password=SF_PASSWORD, security_token=SF_TOKEN)
def process_image(image):
if image is None:
return "β No image provided", "", None, gr.update(visible=True)
try:
# Extract weight using OCR (your updated function should handle any clear image)
weight = extract_weight(image)
ist = pytz.timezone('Asia/Kolkata')
timestamp = datetime.now(ist).strftime("%Y-%m-%d %H:%M:%S IST")
if not weight or "No valid" in weight:
return "β Unable to detect. Try again with a clearer image.", "", image, gr.update(visible=True)
# Save image temporarily
image_path = "snapshot.jpg"
image.save(image_path)
# Create Weight_Log__c record
record = sf.Weight_Log__c.create({
"Captured_Weight__c": float(weight.replace("kg", "").strip()),
"Captured_At__c": datetime.now(ist).isoformat(),
"Device_ID__c": "DEVICE-001",
"Status__c": "Confirmed"
})
# Upload image as ContentVersion
with open(image_path, "rb") as f:
encoded_image = base64.b64encode(f.read()).decode("utf-8")
content = sf.ContentVersion.create({
"Title": f"Snapshot_{timestamp}",
"PathOnClient": "snapshot.jpg",
"VersionData": encoded_image
})
content_id = sf.query(
f"SELECT ContentDocumentId FROM ContentVersion WHERE Id = '{content['id']}'"
)['records'][0]['ContentDocumentId']
sf.ContentDocumentLink.create({
"ContentDocumentId": content_id,
"LinkedEntityId": record['id'],
"ShareType": "V",
"Visibility": "AllUsers"
})
return weight, timestamp, image, gr.update(visible=False)
except Exception as e:
return f"Error: {str(e)}", "", None, gr.update(visible=True)
# Updated header: Removed "and logs it into Salesforce"
with gr.Blocks(css=".gr-button {background-color: #2e7d32 !important; color: white !important;}") as demo:
gr.Markdown("""
<h1 style='text-align: center; color: #2e7d32;'>π· Auto Weight Logger</h1>
<p style='text-align: center;'>Upload or capture a digital weight image. Detects weight using AI OCR.</p>
<hr style='border: 1px solid #ddd;'/>
""")
with gr.Row():
image_input = gr.Image(type="pil", label="π Upload or Capture Image")
detect_btn = gr.Button("π Detect Weight")
with gr.Row():
weight_out = gr.Textbox(label="π¦ Detected Weight", placeholder="e.g., 97.9 kg", show_copy_button=True)
time_out = gr.Textbox(label="π Captured At (IST)", placeholder="e.g., 2025-07-01 12:00:00")
snapshot = gr.Image(label="πΈ Snapshot Preview")
retake_btn = gr.Button("π Retake / Try Again", visible=False)
detect_btn.click(fn=process_image, inputs=image_input, outputs=[weight_out, time_out, snapshot, retake_btn])
retake_btn.click(fn=lambda: ("", "", None, gr.update(visible=False)),
inputs=[], outputs=[weight_out, time_out, snapshot, retake_btn])
demo.launch()
|