File size: 2,916 Bytes
fb1a823
1a717ad
17e765d
7be0446
 
1a717ad
 
3ced6b6
fb1a823
7be0446
 
 
d54c470
3ced6b6
7be0446
 
ae762c2
1a717ad
7be0446
 
3ced6b6
7be0446
 
3ced6b6
7be0446
3ced6b6
7be0446
 
 
 
3ced6b6
 
7be0446
 
 
3ced6b6
 
 
 
 
7be0446
17e765d
7be0446
3ced6b6
 
 
 
 
 
 
7be0446
 
3ced6b6
7be0446
 
3ced6b6
7be0446
 
3ced6b6
 
 
 
7be0446
3ced6b6
7be0446
3ced6b6
7be0446
3ced6b6
 
 
7be0446
3ced6b6
 
 
 
 
7be0446
3ced6b6
 
7be0446
1a717ad
3ced6b6
51be189
3ced6b6
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
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  # Make sure this returns (weight, confidence)

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

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

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

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

# Image bytes and capture
image_bytes = None
image = None

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()

elif input_mode == "Upload":
    uploaded_file = st.file_uploader("πŸ“ Upload Image (JPG/PNG)", type=["jpg", "jpeg", "png"])
    if uploaded_file:
        image_bytes = uploaded_file.read()

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

        # Timestamp
        ist = pytz.timezone("Asia/Kolkata")
        captured_time = datetime.now(ist).strftime("%Y-%m-%d %I:%M:%S %p")

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

        if len(image_bytes) > 5 * 1024 * 1024:
            st.error("❌ Image too large (>5MB). Please use a smaller image.")
            st.stop()

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

        # Output regardless of confidence
        st.markdown(f"### πŸ“¦ Captured Weight: `{weight if weight else 'Not Detected'}`")
        st.markdown(f"### πŸ•’ Captured At (IST): `{captured_time}`")

        if not weight or confidence < 80:
            st.warning(f"⚠️ Low OCR Confidence ({int(confidence)}%). You may retry.")
        else:
            st.success(f"βœ… High Confidence: {int(confidence)}%")

        # Salesforce redirect link
        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 format.")
    except Exception as e:
        st.error("❌ Something went wrong while processing the image.")
        st.exception(e)