Auto-weight-logger2 / src /streamlit_app.py
Sanjayraju30's picture
Update src/streamlit_app.py
1a717ad verified
raw
history blame
3.01 kB
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)