File size: 3,194 Bytes
fb1a823
1a717ad
17e765d
7be0446
 
1a717ad
 
e667809
fb1a823
e667809
7be0446
 
d54c470
e667809
7be0446
 
e667809
 
ae762c2
e667809
7be0446
 
e667809
7be0446
 
e667809
3ced6b6
7be0446
e667809
7be0446
 
 
e667809
 
 
 
 
 
7be0446
e667809
3ced6b6
7be0446
e667809
7be0446
e667809
7be0446
e667809
3ced6b6
 
e667809
3ced6b6
e667809
7be0446
17e765d
7be0446
3ced6b6
 
 
7be0446
 
e667809
7be0446
 
e667809
7be0446
 
e667809
 
3ced6b6
e667809
7be0446
e667809
 
7be0446
e667809
 
7be0446
e667809
3ced6b6
 
7be0446
3ced6b6
 
 
 
 
7be0446
3ced6b6
 
7be0446
1a717ad
e667809
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
import streamlit as st
from PIL import Image, UnidentifiedImageError
import io
import uuid
import urllib.parse
import pytz
from datetime import datetime
from ocr_engine import extract_weight_from_image  # This must return (weight, confidence)

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

# Store keys/state
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 = ""

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

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

# Init
image_bytes = None
image = None

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

# Handle camera
if input_mode == "Camera":
    cam_photo = st.camera_input("πŸ“· Take a photo", key=st.session_state.camera_key)
    if cam_photo:
        image_bytes = cam_photo.getvalue()
        st.session_state.captured_time = get_current_ist_time()

# Handle 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 if image exists
if image_bytes:
    try:
        image = Image.open(io.BytesIO(image_bytes))

        st.subheader("πŸ–ΌοΈ Snapshot Image")
        st.image(image, use_column_width=True)

        if len(image_bytes) > 5 * 1024 * 1024:
            st.error("❌ Image is too large (>5MB).")
            st.stop()

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

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

        # Show weight
        if not weight or confidence < 80:
            st.markdown(f"### πŸ“¦ Captured Weight: `Not Detected`")
            st.warning(f"⚠️ OCR Confidence too low ({int(confidence)}%)")
        else:
            st.markdown(f"### πŸ“¦ Captured Weight: `{weight} g`")
            st.success(f"βœ… OCR Confidence: {int(confidence)}%")

        # Generate Salesforce URL
        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("❌ Invalid image file.")
    except Exception as e:
        st.error("❌ Unexpected error.")
        st.exception(e)