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