z230
This commit is contained in:
67
MakeSmallerPDF/991 test oCR.py
Normal file
67
MakeSmallerPDF/991 test oCR.py
Normal file
@@ -0,0 +1,67 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user