Files
projects/MakeSmallerPDF/991 test oCR.py
2025-12-29 15:46:03 +01:00

67 lines
2.4 KiB
Python

import fitz # PyMuPDF
import pytesseract
from PIL import Image
import os
import re
# --- NASTAVENÍ ---
PATH_TO_TESSERACT = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
INPUT_FILE = r'u:\Dropbox\Ordinace\Dokumentace_ke_zpracování\AdobeMakeSmaller\9b79f621-30ad-4468-85fe-6f2fd76289ce.pdf'
# Nastavíme Tesseract
pytesseract.pytesseract.tesseract_cmd = PATH_TO_TESSERACT
def debug_ocr_output():
if not os.path.exists(INPUT_FILE):
print(f"Soubor nenalezen: {INPUT_FILE}")
return
print(f"ANALÝZA SOUBORU: {os.path.basename(INPUT_FILE)}")
doc = fitz.open(INPUT_FILE)
# Projdeme první stranu (RČ bývá tam)
for i, page in enumerate(doc):
if i > 0: break # Stačí nám 1. strana pro test
print(f"\n--- STRANA {i + 1} (300 DPI) ---")
# 1. Renderování ve vysoké kvalitě (stejně jako v 'Ultimate' skriptu)
# Pokud je sken nekvalitní, Tesseract potřebuje velké rozlišení
zoom = 300 / 72
matrix = fitz.Matrix(zoom, zoom)
pix = page.get_pixmap(matrix=matrix, colorspace=fitz.csGRAY)
img = Image.frombytes("L", [pix.width, pix.height], pix.samples)
# 2. OCR - Získání surového textu
# config='--psm 3' je standardní automatická segmentace stránky
raw_text = pytesseract.image_to_string(img, lang='ces', config='--psm 3')
print(">>> SUROVÝ TEXT Z TESSERACTU (ZAČÁTEK) <<<")
print("-" * 50)
print(raw_text)
print("-" * 50)
print(">>> SUROVÝ TEXT Z TESSERACTU (KONEC) <<<")
# 3. Test Regexu na tomto textu
print("\n--- TEST HLEDÁNÍ RČ ---")
# Standardní Regex
strict_pattern = r'\b\d{6}\s*[\/]?\s*\d{3,4}\b'
strict_matches = re.findall(strict_pattern, raw_text)
print(f"Přísný filtr (očekává jen čísla): {strict_matches}")
# Volnější Regex (hledá i chyby OCR jako 'O' místo '0' nebo 'l' místo '1')
# \d -> číslice
# [O0] -> nula nebo O
# [lI1] -> jednička, malé L nebo velké i
loose_pattern = r'\b[0-9O]{6}\s*[\/ilI1]?\s*[0-9O]{3,4}\b'
loose_matches = re.findall(loose_pattern, raw_text)
if loose_matches and not strict_matches:
print(f"⚠️ POZOR: Našel jsem RČ jen pomocí volného filtru (obsahuje překlepy OCR): {loose_matches}")
print(" -> Bude potřeba upravit čistící funkci.")
if __name__ == "__main__":
debug_ocr_output()