File size: 2,612 Bytes
fb1a823
c41b38b
17e765d
7be0446
 
 
fb1a823
7be0446
 
 
d54c470
7be0446
 
 
ae762c2
7be0446
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17e765d
7be0446
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51be189
7be0446
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
import streamlit as st
from PIL import Image
import io
import uuid
import urllib.parse
from ocr_engine import extract_weight_from_image  # your OCR function

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

# Camera refresh key
if "camera_key" not in st.session_state:
    st.session_state.camera_key = str(uuid.uuid4())

# Input selector
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.experimental_rerun()

# Variables
image_bytes = None
image = None

# Camera mode
if input_mode == "Camera":
    cam_photo = st.camera_input("πŸ“· Take a photo of the weight display", key=st.session_state.camera_key)
    if cam_photo is not None:
        image_bytes = cam_photo.getvalue()

# Upload mode
elif input_mode == "Upload":
    uploaded_file = st.file_uploader("πŸ“ Upload an image (JPG/PNG)", type=["jpg", "jpeg", "png"])
    if uploaded_file is not None:
        image_bytes = uploaded_file.read()

# Show image and process
if image_bytes:
    try:
        image = Image.open(io.BytesIO(image_bytes))
        st.image(image, caption="πŸ“Έ Preview", use_column_width=True)

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

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

        st.write(f"πŸ› οΈ DEBUG: Weight = {weight}, Confidence = {confidence}")

        if not weight or confidence < 80:
            st.error(f"⚠️ Low OCR confidence ({int(confidence)}%). Try again.")
        else:
            st.success(f"βœ… Detected Weight: {weight} g (Confidence: {int(confidence)}%)")

            # Generate Salesforce URL
            device_id = "BAL-001"
            image_url = ""  # optional if image storage is needed

            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"[βœ… Confirm and Log in Salesforce]({salesforce_url})", unsafe_allow_html=True)

    except Exception as e:
        st.error("❌ Error processing the image.")
        st.exception(e)