Spaces:
Running
Running
File size: 1,320 Bytes
6b14fa5 65ed4c1 8fe1b94 a71f519 6b14fa5 65ed4c1 363a646 65ed4c1 363a646 65ed4c1 712c074 f617821 712c074 363a646 712c074 f823764 712c074 f823764 33069a9 f617821 712c074 33069a9 712c074 f823764 65ed4c1 f617821 f823764 f617821 8fe1b94 65ed4c1 712c074 65ed4c1 |
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 |
import easyocr
import numpy as np
import cv2
import re
reader = easyocr.Reader(['en'], gpu=False)
def extract_weight_from_image(pil_img):
try:
img = np.array(pil_img)
# Resize if image is large
if img.shape[1] > 1000:
img = cv2.resize(img, (1000, int(img.shape[0] * 1000 / img.shape[1])))
# Convert to grayscale and upscale
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
gray = cv2.resize(gray, None, fx=4, fy=4, interpolation=cv2.INTER_CUBIC)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
gray = cv2.equalizeHist(gray)
# Thresholding
_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# Invert if needed
if np.mean(thresh > 127) < 0.5:
thresh = cv2.bitwise_not(thresh)
# OCR
result = reader.readtext(thresh, detail=0)
print("🔍 OCR Text:", result)
combined_text = " ".join(result)
# Extract weight
match = re.search(r"(\d{1,4}(?:\.\d{1,2})?)", combined_text)
if match:
weight = match.group(1)
return f"{weight} kg", 100.0
else:
return "No weight detected kg", 0.0
except Exception as e:
print("❌ OCR Error:", e)
return f"Error: {str(e)}", 0.0
|