Spaces:
Running
Running
File size: 1,809 Bytes
a481416 4e7dfd4 7f861bc a481416 57ffefc 7f861bc a481416 57ffefc a481416 eff70bd 0263481 57ffefc 0263481 57ffefc 0263481 4e7dfd4 eff70bd 4e7dfd4 9b5d129 4e7dfd4 |
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 |
import gradio as gr
import cv2
import numpy as np
from paddleocr import PaddleOCR
from datetime import datetime
from pytz import timezone
import re
from PIL import Image
# Initialize PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang='en')
def detect_weight(image):
try:
if image is None:
return "No image uploaded", "N/A", None
image = image.convert("RGB")
image_np = np.array(image)
gray = cv2.cvtColor(image_np, cv2.COLOR_RGB2GRAY)
enhanced = cv2.equalizeHist(gray)
rgb_image = cv2.cvtColor(enhanced, cv2.COLOR_GRAY2RGB)
# OCR (without cls= argument for compatibility)
result = ocr.ocr(rgb_image)
best_match = None
best_conf = 0
for line in result:
for box in line:
text, conf = box[1]
match = re.search(r"\d+\.\d+", text)
if match and conf > best_conf:
best_match = match.group()
best_conf = conf
if best_match:
now_ist = datetime.now(timezone('Asia/Kolkata')).strftime("%Y-%m-%d %H:%M:%S IST")
return f"Weight: {best_match} kg (Confidence: {round(best_conf * 100, 2)}%)", now_ist, image
else:
return "No weight detected kg (Confidence: 0.0%)", "N/A", image
except Exception as e:
return f"Error: {str(e)}", "Error", None
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 digital scale image. This app detects the weight automatically using AI."
).launch()
|