File size: 4,148 Bytes
fb1a823 1a717ad 17e765d 7be0446 1a717ad 8578b51 0eb7d0a fb1a823 8578b51 7be0446 d54c470 b675cbf 7be0446 e667809 b675cbf ae762c2 8578b51 b675cbf 7be0446 8578b51 7be0446 e667809 b675cbf 3ced6b6 7be0446 b675cbf 7be0446 8578b51 b675cbf e667809 7be0446 e667809 b675cbf e667809 3ced6b6 b675cbf 17e765d b675cbf 3ced6b6 b675cbf 8578b51 b675cbf 8578b51 3ced6b6 7be0446 b675cbf 8578b51 7be0446 8578b51 7be0446 b675cbf 8578b51 7be0446 8578b51 7be0446 8578b51 7be0446 b675cbf 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 b675cbf 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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
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 # Ensure this function returns (weight, confidence)
# Set up page
st.set_page_config(page_title="βοΈ Auto Weight Logger", layout="centered")
st.title("βοΈ Auto Weight Logger")
# Session 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 = ""
if "image_bytes" not in st.session_state:
st.session_state.image_bytes = None
# 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 method
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.session_state.image_bytes = None
st.rerun()
# Capture or Upload
if input_mode == "Camera":
cam_photo = st.camera_input("π· Capture Weight Display", key=st.session_state.camera_key)
if cam_photo:
st.session_state.image_bytes = cam_photo.getvalue()
st.session_state.captured_time = get_current_ist_time()
elif input_mode == "Upload":
uploaded_file = st.file_uploader("π Upload an image (JPG/PNG)", type=["jpg", "jpeg", "png"])
if uploaded_file:
st.session_state.image_bytes = uploaded_file.read()
st.session_state.captured_time = get_current_ist_time()
# Process and Display (if image is available)
if st.session_state.image_bytes:
try:
image = Image.open(io.BytesIO(st.session_state.image_bytes))
# 1. Show captured time
st.markdown(f"### π Captured At (IST): `{st.session_state.captured_time}`")
# 2. Show image
st.markdown("### πΌοΈ Snapshot Image")
st.image(image, use_column_width=True)
# 3. OCR processing
if len(st.session_state.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)
# 4. Display OCR result
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)}%`")
# 5. 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"""
<a href="{salesforce_url}" target="_blank">
<button style="
background-color: #4CAF50;
border: none;
color: white;
padding: 12px 24px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
border-radius: 8px;
cursor: pointer;
">π€ Log to Salesforce</button>
</a>
""", 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)
|