From 2c2adcfa7c3d82c508565cd0c3565a41383e64b3 Mon Sep 17 00:00:00 2001 From: Kadir Date: Sun, 30 Mar 2025 23:41:52 +0100 Subject: [PATCH] improving OCR --- crawler/91_recalculate_floorplan.py | 13 +++++++++++++ crawler/rec/floorplan.py | 15 +++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 crawler/91_recalculate_floorplan.py diff --git a/crawler/91_recalculate_floorplan.py b/crawler/91_recalculate_floorplan.py new file mode 100644 index 0000000..71432b1 --- /dev/null +++ b/crawler/91_recalculate_floorplan.py @@ -0,0 +1,13 @@ +from data_access import Listing +from tqdm import tqdm + +listings = Listing.get_all_listings() +recalculate_listings = [] + +for listing in listings: + sqm = listing.sqm_ocr + if sqm is None or sqm < 10 or sqm > 200: + recalculate_listings.append(listing) + +for listing in tqdm(recalculate_listings): + listing.calculate_sqm_ocr(recalculate=True) \ No newline at end of file diff --git a/crawler/rec/floorplan.py b/crawler/rec/floorplan.py index 98c588a..8bce80c 100644 --- a/crawler/rec/floorplan.py +++ b/crawler/rec/floorplan.py @@ -1,5 +1,7 @@ import re from PIL import Image +import cv2 +import numpy as np from transformers import Pix2StructProcessor, Pix2StructForConditionalGeneration import pytesseract @@ -32,9 +34,22 @@ def calculate_model(image_path): estimated_sqm = extract_total_sqm(output) return estimated_sqm, output, predictions_tensor +def improve_img_for_ocr(img: Image): + img2 = np.array(img.convert('L')) + cv2.resize(img2, None, fx=1.2, fy=1.2, interpolation=cv2.INTER_CUBIC) + thresh = cv2.adaptiveThreshold(img2,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2) + return Image.fromarray(thresh) def calculate_ocr(image_path): img = Image.open(image_path) text = pytesseract.image_to_string(img) estimated_sqm = extract_total_sqm(text) + if estimated_sqm is None: + improved_img = improve_img_for_ocr(img) + text2 = pytesseract.image_to_string(improved_img) + estimated_sqm2 = extract_total_sqm(text2) + with open("recalculating.log", "a") as f: + f.write(f"before: {estimated_sqm} after: {estimated_sqm2} - {image_path}\n") + return estimated_sqm2, text2 + return estimated_sqm, text