File size: 3,435 Bytes
fb1a823
1a717ad
17e765d
7be0446
 
1a717ad
8578b51
 
fb1a823
8578b51
7be0446
 
d54c470
8578b51
7be0446
 
e667809
 
ae762c2
8578b51
 
 
 
 
 
7be0446
 
8578b51
7be0446
 
e667809
3ced6b6
7be0446
8578b51
7be0446
 
 
8578b51
7be0446
8578b51
3ced6b6
7be0446
e667809
7be0446
8578b51
7be0446
e667809
3ced6b6
 
e667809
3ced6b6
8578b51
7be0446
17e765d
7be0446
3ced6b6
8578b51
 
 
 
 
3ced6b6
7be0446
8578b51
7be0446
8578b51
7be0446
 
8578b51
7be0446
 
8578b51
7be0446
8578b51
 
7be0446
8578b51
 
7be0446
8578b51
3ced6b6
 
7be0446
3ced6b6
 
 
 
 
7be0446
3ced6b6
 
7be0446
1a717ad
8578b51
51be189
e667809
51be189
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
94
95
96
97
98
import streamlit as st
from PIL import Image, UnidentifiedImageError
import io
import uuid
import urllib.parse
from datetime import datetime
import pytz
from ocr_engine import extract_weight_from_image  # Make sure this returns (weight, confidence)

# Set up page
st.set_page_config(page_title="βš–οΈ Auto Weight Logger", layout="centered")
st.title("βš–οΈ Auto Weight Logger")

# Session state keys
if "camera_key" not in st.session_state:
    st.session_state.camera_key = str(uuid.uuid4())
if "captured_time" not in st.session_state:
    st.session_state.captured_time = ""

# Get IST time
def get_current_ist_time():
    ist = pytz.timezone("Asia/Kolkata")
    return datetime.now(ist).strftime("%Y-%m-%d %I:%M:%S %p")

# Input selection
input_mode = st.radio("πŸ“Έ Select Input Method", ["Camera", "Upload"], horizontal=True)

# Retake button
if st.button("πŸ” Clear / Retake"):
    st.session_state.camera_key = str(uuid.uuid4())
    st.session_state.captured_time = ""
    st.rerun()

# Image handling
image_bytes = None
image = None

# Webcam input
if input_mode == "Camera":
    cam_photo = st.camera_input("πŸ“· Capture Weight Display", key=st.session_state.camera_key)
    if cam_photo:
        image_bytes = cam_photo.getvalue()
        st.session_state.captured_time = get_current_ist_time()

# File upload
elif input_mode == "Upload":
    uploaded_file = st.file_uploader("πŸ“ Upload an image (JPG/PNG)", type=["jpg", "jpeg", "png"])
    if uploaded_file:
        image_bytes = uploaded_file.read()
        st.session_state.captured_time = get_current_ist_time()

# Process and display
if image_bytes:
    try:
        image = Image.open(io.BytesIO(image_bytes))

        # 1. Show Captured At
        st.markdown(f"### πŸ•’ Captured At (IST): `{st.session_state.captured_time}`")

        # 2. Show Snapshot Image
        st.markdown("### πŸ–ΌοΈ Snapshot Image")
        st.image(image, use_column_width=True)

        # 3. Extract OCR and show result
        if len(image_bytes) > 5 * 1024 * 1024:
            st.error("❌ Image too large (>5MB). Please upload a smaller image.")
            st.stop()

        with st.spinner("πŸ” Extracting weight using OCR..."):
            weight, confidence = extract_weight_from_image(image)

        st.markdown("### βš–οΈ Captured Weight & OCR Confidence")
        if not weight or confidence < 80:
            st.error(f"⚠️ Low OCR Confidence ({int(confidence)}%). Please retake or upload a clearer image.")
            st.markdown("**Detected Weight:** Not reliable")
        else:
            st.success(f"βœ… Detected Weight: `{weight} g`")
            st.markdown(f"**Confidence:** `{int(confidence)}%`")

        # 4. Send to Salesforce
        device_id = "BAL-001"
        image_url = ""  # optional

        salesforce_url = (
            "https://autoweightlogger-dev-ed.my.salesforce-sites.com/"
            f"weight_logger_page?WeightInput={urllib.parse.quote(str(weight))}"
            f"&DeviceID={urllib.parse.quote(device_id)}&ImageURL={urllib.parse.quote(image_url)}"
        )

        st.markdown("### βœ… Send to Salesforce")
        st.markdown(f"[πŸ“€ Click to Log Weight in Salesforce]({salesforce_url})", unsafe_allow_html=True)

    except UnidentifiedImageError:
        st.error("❌ Unable to process image. Please upload a valid JPG or PNG.")
    except Exception as e:
        st.error("❌ Unexpected error.")
        st.exception(e)