Sanjayraju30 commited on
Commit
1a717ad
Β·
verified Β·
1 Parent(s): 7be0446

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +33 -20
src/streamlit_app.py CHANGED
@@ -1,65 +1,76 @@
1
  import streamlit as st
2
- from PIL import Image
3
  import io
4
  import uuid
5
  import urllib.parse
 
 
6
  from ocr_engine import extract_weight_from_image # your OCR function
7
 
8
  # Setup
9
  st.set_page_config(page_title="βš–οΈ Auto Weight Logger", layout="centered")
10
  st.title("βš–οΈ Auto Weight Logger")
11
 
12
- # Camera refresh key
 
 
 
13
  if "camera_key" not in st.session_state:
14
  st.session_state.camera_key = str(uuid.uuid4())
15
 
16
- # Input selector
17
  input_mode = st.radio("πŸ“Έ Select Input Method", ["Camera", "Upload"], horizontal=True)
18
 
19
- # Retake button
20
  if st.button("πŸ” Clear / Retake"):
21
  st.session_state.camera_key = str(uuid.uuid4())
22
  st.experimental_rerun()
23
 
24
- # Variables
25
  image_bytes = None
26
  image = None
27
 
28
- # Camera mode
29
  if input_mode == "Camera":
30
  cam_photo = st.camera_input("πŸ“· Take a photo of the weight display", key=st.session_state.camera_key)
31
  if cam_photo is not None:
32
  image_bytes = cam_photo.getvalue()
33
 
34
- # Upload mode
35
  elif input_mode == "Upload":
36
- uploaded_file = st.file_uploader("πŸ“ Upload an image (JPG/PNG)", type=["jpg", "jpeg", "png"])
37
  if uploaded_file is not None:
38
- image_bytes = uploaded_file.read()
 
 
 
 
39
 
40
- # Show image and process
41
  if image_bytes:
42
  try:
43
  image = Image.open(io.BytesIO(image_bytes))
44
- st.image(image, caption="πŸ“Έ Preview", use_column_width=True)
45
 
46
  if len(image_bytes) > 5 * 1024 * 1024:
47
- st.error("❌ Image is too large (>5MB). Please use a smaller image.")
48
  st.stop()
49
 
50
  with st.spinner("πŸ” Extracting weight using OCR..."):
51
  weight, confidence = extract_weight_from_image(image)
52
 
53
- st.write(f"πŸ› οΈ DEBUG: Weight = {weight}, Confidence = {confidence}")
54
-
55
  if not weight or confidence < 80:
56
- st.error(f"⚠️ Low OCR confidence ({int(confidence)}%). Try again.")
57
  else:
58
- st.success(f"βœ… Detected Weight: {weight} g (Confidence: {int(confidence)}%)")
 
 
 
 
 
59
 
60
- # Generate Salesforce URL
61
  device_id = "BAL-001"
62
- image_url = "" # optional if image storage is needed
63
 
64
  salesforce_url = (
65
  "https://autoweightlogger-dev-ed.my.salesforce-sites.com/"
@@ -68,8 +79,10 @@ if image_bytes:
68
  )
69
 
70
  st.markdown("### πŸ“€ Send to Salesforce")
71
- st.markdown(f"[βœ… Confirm and Log in Salesforce]({salesforce_url})", unsafe_allow_html=True)
72
 
 
 
73
  except Exception as e:
74
- st.error("❌ Error processing the image.")
75
  st.exception(e)
 
1
  import streamlit as st
2
+ from PIL import Image, UnidentifiedImageError
3
  import io
4
  import uuid
5
  import urllib.parse
6
+ import pytz
7
+ from datetime import datetime
8
  from ocr_engine import extract_weight_from_image # your OCR function
9
 
10
  # Setup
11
  st.set_page_config(page_title="βš–οΈ Auto Weight Logger", layout="centered")
12
  st.title("βš–οΈ Auto Weight Logger")
13
 
14
+ # IST timezone
15
+ ist = pytz.timezone('Asia/Kolkata')
16
+
17
+ # Session state
18
  if "camera_key" not in st.session_state:
19
  st.session_state.camera_key = str(uuid.uuid4())
20
 
21
+ # Input method
22
  input_mode = st.radio("πŸ“Έ Select Input Method", ["Camera", "Upload"], horizontal=True)
23
 
24
+ # Reset
25
  if st.button("πŸ” Clear / Retake"):
26
  st.session_state.camera_key = str(uuid.uuid4())
27
  st.experimental_rerun()
28
 
 
29
  image_bytes = None
30
  image = None
31
 
32
+ # Camera input
33
  if input_mode == "Camera":
34
  cam_photo = st.camera_input("πŸ“· Take a photo of the weight display", key=st.session_state.camera_key)
35
  if cam_photo is not None:
36
  image_bytes = cam_photo.getvalue()
37
 
38
+ # Upload input
39
  elif input_mode == "Upload":
40
+ uploaded_file = st.file_uploader("πŸ“ Upload a JPG/PNG image", type=["jpg", "jpeg", "png"])
41
  if uploaded_file is not None:
42
+ try:
43
+ image_bytes = uploaded_file.read()
44
+ except Exception as e:
45
+ st.error("❌ Failed to read uploaded file.")
46
+ st.exception(e)
47
 
48
+ # Image display and OCR
49
  if image_bytes:
50
  try:
51
  image = Image.open(io.BytesIO(image_bytes))
52
+ st.image(image, caption="πŸ“Έ Snapshot", use_column_width=True)
53
 
54
  if len(image_bytes) > 5 * 1024 * 1024:
55
+ st.error("❌ Image too large (>5MB).")
56
  st.stop()
57
 
58
  with st.spinner("πŸ” Extracting weight using OCR..."):
59
  weight, confidence = extract_weight_from_image(image)
60
 
 
 
61
  if not weight or confidence < 80:
62
+ st.error(f"⚠️ OCR Confidence too low ({int(confidence)}%). Try again.")
63
  else:
64
+ # IST time
65
+ captured_time = datetime.now(ist).strftime("%Y-%m-%d %I:%M:%S %p")
66
+
67
+ st.success("βœ… OCR Success")
68
+ st.markdown(f"### πŸ“¦ Captured Weight: `{weight} g`")
69
+ st.markdown(f"### πŸ•’ Captured At (IST): `{captured_time}`")
70
 
71
+ # Salesforce link
72
  device_id = "BAL-001"
73
+ image_url = "" # optional if stored externally
74
 
75
  salesforce_url = (
76
  "https://autoweightlogger-dev-ed.my.salesforce-sites.com/"
 
79
  )
80
 
81
  st.markdown("### πŸ“€ Send to Salesforce")
82
+ st.markdown(f"[βœ… Click to Log in Salesforce]({salesforce_url})", unsafe_allow_html=True)
83
 
84
+ except UnidentifiedImageError:
85
+ st.error("❌ Unsupported or invalid image format.")
86
  except Exception as e:
87
+ st.error("❌ Unexpected error processing image.")
88
  st.exception(e)