File size: 2,612 Bytes
fb1a823
c41b38b
17e765d
21a3f78
 
802bc88
fb1a823
802bc88
ae762c2
 
d54c470
802bc88
82ae7fe
 
ae762c2
802bc88
 
c4b9b34
802bc88
f970466
17e765d
f970466
17e765d
802bc88
f970466
 
be301b7
802bc88
 
 
 
 
c4b9b34
802bc88
 
 
 
 
ae762c2
802bc88
f970466
17e765d
f970466
802bc88
17e765d
f970466
802bc88
51be189
ae762c2
802bc88
51be189
ae762c2
802bc88
ae762c2
51be189
802bc88
51be189
 
ae762c2
802bc88
51be189
802bc88
ae762c2
51be189
 
 
 
 
ae762c2
51be189
802bc88
ae762c2
51be189
802bc88
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)