File size: 1,128 Bytes
6b14fa5
65ed4c1
8fe1b94
a71f519
6b14fa5
 
65ed4c1
363a646
65ed4c1
363a646
65ed4c1
66afd91
363a646
029a668
376b89d
029a668
 
33069a9
66afd91
f0bddce
a71f519
66afd91
33069a9
66afd91
 
65ed4c1
f0bddce
029a668
66afd91
029a668
 
 
f0bddce
 
8fe1b94
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
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)

        # Preprocessing for OCR
        gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
        gray = cv2.resize(gray, None, fx=2, fy=2, interpolation=cv2.INTER_LINEAR)
        gray = cv2.equalizeHist(gray)
        gray = cv2.GaussianBlur(gray, (3, 3), 0)
        inverted = cv2.bitwise_not(gray)

        # OCR read
        result = reader.readtext(inverted, detail=0)
        combined_text = " ".join(result)
        print("OCR Raw Text:", combined_text)

        # First try matching with "kg"
        match = re.search(r"(\d{1,4}(?:\.\d{1,2})?)\s*(kg|KG|Kg)", combined_text)
        if match:
            return f"{match.group(1)} kg", 95.0

        # Then try fallback match: only numbers
        fallback = re.search(r"\d{1,4}(?:\.\d{1,2})?", combined_text)
        if fallback:
            return f"{fallback.group(0)} kg", 75.0

        return "No weight detected kg", 0.0

    except Exception as e:
        return f"Error: {str(e)}", 0.0