Spaces:
Running
Running
import gradio as gr | |
import easyocr | |
import re | |
import cv2 | |
import numpy as np | |
from PIL import Image | |
from datetime import datetime | |
reader = easyocr.Reader(['en'], gpu=False) | |
def detect_weight(image): | |
if image is None: | |
return "No image uploaded", "N/A", None | |
# Convert PIL to OpenCV | |
image_np = np.array(image) | |
gray = cv2.cvtColor(image_np, cv2.COLOR_RGB2GRAY) | |
# Optional: Enhance contrast | |
gray = cv2.equalizeHist(gray) | |
# OCR | |
results = reader.readtext(gray, detail=1) | |
weight = None | |
max_conf = 0 | |
for (bbox, text, conf) in results: | |
text = text.strip() | |
match = re.search(r'\d+\.\d+', text) | |
if match and conf > max_conf: | |
weight = match.group() | |
max_conf = conf | |
if weight: | |
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
return f"Weight: {weight} kg (Confidence: {round(max_conf*100, 2)}%)", now, image | |
else: | |
return "No weight detected kg (Confidence: 0.0%)", "N/A", image | |
gr.Interface( | |
fn=detect_weight, | |
inputs=gr.Image(type="pil", label="Upload or Capture Weight Image"), | |
outputs=[ | |
gr.Text(label="Detected Weight"), | |
gr.Text(label="Captured At (IST)"), | |
gr.Image(label="Snapshot") | |
], | |
title="Auto Weight Logger", | |
description="Upload or capture a weight scale image. The app will detect and log the weight automatically." | |
).launch() | |