import cv2
import pytesseract
import numpy as np
image_path = "elecBill.jpg"
img = cv2.imread(image_path)
# Resize (VERY IMPORTANT)
img = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
# Convert to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Increase contrast using CLAHE
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
gray = clahe.apply(gray)
# Denoise
gray = cv2.bilateralFilter(gray, 9, 75, 75)
# Strong adaptive threshold
thresh = cv2.adaptiveThreshold(
gray,
255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY,
31,
10
)
# OCR with better config for receipts
custom_config = r'--oem 3 --psm 4'
text = pytesseract.image_to_string(thresh, config=custom_config)
import re
def extract_data(text):
data = {}
clean_text = text.replace('\n', ' ').replace('\r', ' ')
# Extract all dates
dates = re.findall(r'\d{2}[/-]\d{2}[/-]\d{2,4}', clean_text)
if dates:
data["dates_found"] = dates
# Extract all decimal numbers
numbers = re.findall(r'\d+\.\d+', clean_text)
if numbers:
# Convert to float for comparison
float_numbers = [float(n) for n in numbers]
# Largest number often = total payable
largest = max(float_numbers)
data["largest_amount_guess"] = largest
# Keyword based search
keyword_patterns = {
"bill_amount": r'(Bill|Total|Net).{0,20}?(\d+\.\d+)',
"units": r'Units.{0,10}?(\d+)'
}
for key, pattern in keyword_patterns.items():
match = re.search(pattern, clean_text, re.IGNORECASE)
if match:
data[key] = match.group(match.lastindex)
return data
extracted = extract_data(text)
print("\n------ EXTRACTED DATA ------")
print(extracted)
Привет, ребята, вот полный код. Я использую эту программу для извлечения текста из счетов-фактур. И мне хотелось бы повысить точность, чтобы получить точный текст. Как я могу это сделать? В большинстве случаев я получаю какую-то тарабарщину и т. д.
Любая помощь будет полезна. А это мой полный код программы, которую я создал.
for key, pattern in keyword_patterns.items(): match = re.search(pattern, clean_text, re.IGNORECASE) if match: data[key] = match.group(match.lastindex)
return data
extracted = extract_data(text)
print("\n------ EXTRACTED DATA ------") print(extracted) [/code] Привет, ребята, вот полный код. Я использую эту программу для извлечения текста из счетов-фактур. И мне хотелось бы повысить точность, чтобы получить точный текст. Как я могу это сделать? В большинстве случаев я получаю какую-то тарабарщину и т. д. Любая помощь будет полезна. А это мой полный код программы, которую я создал.