weightlogger / src /streamlit_app.py
Sanjayraju30's picture
Update src/streamlit_app.py
69bb60f verified
raw
history blame
1.66 kB
import streamlit as st
import numpy as np
import cv2
from paddleocr import PaddleOCR
from PIL import Image
import re
from datetime import datetime
import pytz
ocr = PaddleOCR(use_angle_cls=True, lang='en')
def preprocess_image(image):
img = np.array(image.convert("RGB"))
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
_, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
return Image.fromarray(thresh)
def extract_weight_text(image):
results = ocr.ocr(np.array(image), cls=True)
for line in results[0]:
text = line[1][0]
match = re.search(r"\d+\.\d+", text)
if match:
return match.group()
return None
st.set_page_config(page_title="Auto Weight Logger", layout="centered")
st.title("πŸ“¦ Auto Weight Logger (Streamlit)")
st.write("Upload or capture an image of a digital weight display to extract weight.")
uploaded_img = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])
camera_img = st.camera_input("Or click an image")
input_img = uploaded_img or camera_img
if input_img is not None:
image = Image.open(input_img)
st.image(image, caption="Original Image", use_column_width=True)
pre_img = preprocess_image(image)
st.image(pre_img, caption="Preprocessed Image", use_column_width=True)
weight = extract_weight_text(pre_img)
if weight:
ist_time = datetime.now(pytz.timezone("Asia/Kolkata")).strftime("%Y-%m-%d %H:%M:%S")
st.success(f"βœ… Weight Detected: **{weight} kg**")
st.info(f"πŸ•’ Captured At (IST): {ist_time}")
else:
st.error("❌ Could not detect weight. Please try with a clearer image.")