File size: 3,007 Bytes
fb1a823 1a717ad 17e765d 7be0446 1a717ad 7be0446 fb1a823 7be0446 d54c470 1a717ad 7be0446 ae762c2 1a717ad 7be0446 1a717ad 7be0446 1a717ad 7be0446 1a717ad 7be0446 1a717ad 7be0446 1a717ad 7be0446 1a717ad 7be0446 17e765d 7be0446 1a717ad 7be0446 1a717ad 7be0446 1a717ad 7be0446 1a717ad 7be0446 1a717ad 7be0446 1a717ad 7be0446 1a717ad 7be0446 1a717ad 51be189 1a717ad 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 |
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 # your OCR function
# Setup
st.set_page_config(page_title="βοΈ Auto Weight Logger", layout="centered")
st.title("βοΈ Auto Weight Logger")
# IST timezone
ist = pytz.timezone('Asia/Kolkata')
# Session state
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)
# Reset
if st.button("π Clear / Retake"):
st.session_state.camera_key = str(uuid.uuid4())
st.experimental_rerun()
image_bytes = None
image = None
# Camera input
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 input
elif input_mode == "Upload":
uploaded_file = st.file_uploader("π Upload a JPG/PNG image", type=["jpg", "jpeg", "png"])
if uploaded_file is not None:
try:
image_bytes = uploaded_file.read()
except Exception as e:
st.error("β Failed to read uploaded file.")
st.exception(e)
# Image display and OCR
if image_bytes:
try:
image = Image.open(io.BytesIO(image_bytes))
st.image(image, caption="πΈ Snapshot", use_column_width=True)
if len(image_bytes) > 5 * 1024 * 1024:
st.error("β Image too large (>5MB).")
st.stop()
with st.spinner("π Extracting weight using OCR..."):
weight, confidence = extract_weight_from_image(image)
if not weight or confidence < 80:
st.error(f"β οΈ OCR Confidence too low ({int(confidence)}%). Try again.")
else:
# IST time
captured_time = datetime.now(ist).strftime("%Y-%m-%d %I:%M:%S %p")
st.success("β
OCR Success")
st.markdown(f"### π¦ Captured Weight: `{weight} g`")
st.markdown(f"### π Captured At (IST): `{captured_time}`")
# Salesforce link
device_id = "BAL-001"
image_url = "" # optional if stored externally
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 in Salesforce]({salesforce_url})", unsafe_allow_html=True)
except UnidentifiedImageError:
st.error("β Unsupported or invalid image format.")
except Exception as e:
st.error("β Unexpected error processing image.")
st.exception(e)
|