Vyžaduje PDF OCR? Použijte PyMuPDF k provedení předběžné kontroly stránky po stránce namísto úplného opětovného rozpoznání

Pokud chcete OCR PDF, není nutné znovu rozpoznávat celý PDF. Pomocí PyMuPDF zjistěte stránku po stránce, zda existuje textová vrstva a zda se jedná o celostránkový obrázek, a posílejte pouze stránky, které jsou skutečně potřebné k rozpoznání. Připojeny jsou spustitelné vzorky, testy rotujících stránek a instrukce pro ohraničení větví.

Když mnoho týmů řeší překlad nebo archivaci PDF, jsou zvyklé u vstupu označit celý dokument jako „naskenovaný"nebo „kopírovatelný". 300stránkové PDF může mít prvních 280 stránek s textovými vrstvami a pouze posledních 20 stránek jako naskenované přílohy. Při klasifikaci podle celých částí celý OCR prodlouží čekací dobu a může také chybně identifikovat původně správná čísla. Na druhou stranu, pokud můžete kopírovat text pouze na domovské stránce a přeskočit OCR na všech stránkách, je to také riskantní.

Spolehlivějším přístupem je nechat každou stránku přejít k dalšímu kroku s výsledky kontroly před výstupem. Tento článek implementuje konzervativní třícestné rozdělení: přímou extrakci, odeslání do fronty kandidátů OCR a ruční kontrolu. Je to interpretovatelná inženýrská heuristika, nikoli univerzální klasifikátor pro posuzování kvality textu. Po přečtení můžete získat spustitelný program pro kontrolu před výstupem po jednotlivých stránkách, stejně jako hranice odchylek a běžné nápady na řešení chyb.

Závěr jednou větou

Není třeba posuzovat, zda PDF vyžaduje OCR. Použijte PyMuPDF k předběžné kontrole stránky po stránce a do OCR posílejte pouze stránky, které skutečně potřebují být rozpoznány.

vaší situaciDoporučené postupydůvod
Extrahujte z jedné stránky alespoň 40 znaků bez mezerPřímá extrakce (TEXT_CANDIDATE)Již máte dostatek znaků, ale stále je třeba na místě zkontrolovat skryté špatné vrstvy OCR
Méně než 40 slov a jeden obrázek pokrývající alespoň 70 % stránkyOdeslat do fronty kandidátů na OCRK identifikaci jsou vhodné celostránkové skeny, ale postačí i čisté fotografie.
Prázdná stránka, vektorový typ, řídký název nebo složitá hádankaRuční kontrola (RECENZE)Tyto situace nelze spolehlivě zařadit do prvních dvou kategorií a nelze je automaticky přeskočit nebo zahodit.
300stránkový hybridní dokumentPředtisková kontrola stránku po stránce, nedokončeno zpracováníVyhněte se OCR na všech stránkách kvůli několika naskenovaným přílohám nebo přeskakování všech OCR, protože na domovské stránce je text

Poznámka: Obsah na obrázku pochází ze syntetizovaného PDF generovaného níže uvedeným kódem, nikoli ze souboru zákazníka ani z rozhraní OmniDoc. Text na stránce obrázku jsou rastrové pixely; text na textové stránce má skutečnou textovou vrstvu.

Rozhodněte se, co zkontrolovat jako první

Používají se zde dva signály: počet textových znaků po odstranění mezer a podíl plochy stránky, kterou zabírá největší obrázek na stránce. První odpovídá: "Bylo extrahováno dost znaků?" a ten pomáhá rozlišovat mezi skenováním celé stránky a prázdnou stránkou. Oblast obrázku se nejprve protne s rámečkem pro oříznutí, aby nedošlo k překročení poměru zvětšení obrázku na stránce.

pozorováníOdklon tohoto článkuStále vyžadují pozornost
Minimálně 40 znaků bez mezerTEXT_CANDIDATESkrytá vrstva špatného OCR může také obsahovat spoustu slov
Méně než 40 slov a alespoň 70 % pokrytí jednoho obrázkuOCR_CANDIDATEČisté fotografie také splňují požadavky; OCR nemusí být smysluplné
Zbytek situaceREVIEWPrázdné mezery, vektorový text, řídké názvy a složité hádanky zde mohou být

Prahy 40 a 0,70 mají usnadnit auditování této sady testů, nikoli standardy napříč jazyky. Čínština, vzorce, obálky a krátké formy by měly být označeny zvlášť. Zde se pořídí největší obrázek podle plochy, místo pouhého přičítání oblastí překrývajících se obrázků. Proto může skenovaná stránka složená z více obrázků skončit v REVIEW. Jde o záměrně zachovanou hranici.

Kompletní běžitelný vzorek

Vzorek používáPyMuPDF==1.28.0, nespoléhá na Tesseract a nevolá žádné online OCR ani překladatelské služby. Uložte jako example.py a spusťte ho v prázdném adresáři. Název souboru, který vytvoří, je pevně nastavený na routing-fixture.pdf. U skutečných projektů prosím nepřepisujte vstupní soubory.

import json
import pymupdf

def inspect_page(page):
    chars = len("".join(page.get_text().split()))
    bounds = page.cropbox
    # 图片坐标与文本坐标都是未旋转坐标;不要混用旋转后的 page.rect。
    bounds = pymupdf.Rect(0, 0, bounds.width, bounds.height)
    ratios = []
    for image in page.get_image_info():
        rect = pymupdf.Rect(image["bbox"]) & bounds
        ratios.append(max(0, rect.get_area()) / bounds.get_area())
    largest = max(ratios, default=0.0)
    route = ("TEXT_CANDIDATE" if chars >= 40 else
             "OCR_CANDIDATE" if largest >= 0.70 else "REVIEW")
    return {"page": page.number + 1, "chars": chars,
            "largest_image_ratio": round(largest, 3), "route": route}

with pymupdf.open() as source:
    page = source.new_page(width=360, height=480)
    page.insert_text((28, 60), "Sample invoice 2026-09-26", fontsize=16)
    page.insert_text((28, 100), "Quantity 12   Unit price USD 15.00", fontsize=12)
    page.insert_text((28, 132), "Amount USD 180.00   Checked manually", fontsize=12)
    scan = page.get_pixmap(matrix=pymupdf.Matrix(2, 2)).tobytes("png")
    page = source.new_page(width=360, height=480)
    page.insert_image(page.rect, stream=scan)
    source.new_page(width=360, height=480)
    source.save("routing-fixture.pdf")

with pymupdf.open("routing-fixture.pdf") as pdf:
    result = [inspect_page(page) for page in pdf]
    assert [r["route"] for r in result] == [
        "TEXT_CANDIDATE", "OCR_CANDIDATE", "REVIEW"]
    assert result[1]["chars"] == 0
    assert result[1]["largest_image_ratio"] == 1.0
    pdf[1].set_rotation(90)
    assert inspect_page(pdf[1])["route"] == "OCR_CANDIDATE"
print(json.dumps(result, indent=2))

Při přístupu k OCR ukládejte do cache TextPage, ne ukazatel úspěchu

OCR rozhraní PyMuPDF je page.get_textpage_ocr(...). Tesseract a jeho odpovídající jazyková data je třeba připravit samostatně. Po získání TextPage by ji následná extrakce měla předat jako parametr textpage, aby se zabránilo rozpoznávání duplicit na stejné stránce. Pro konkrétní metody instalace a parametry prosím viz PyMuPDF OCR dokument.

Tento článek nepoužívá OCR engine, takže výsledky testu pouze dokazují, že logika distribuce a použití souřadnic jsou správné a nereprezentují rychlost rozpoznávání čínštiny, obnovu tabulek ani kvalitu překladu. V produkci by měly být zaznamenány výsledky OCR enginu, jazykový balíček, číslo stránky, shrnutí vstupního souboru a výsledky manuálního vzorkování. Nenechte si jen poslední řetězec, jinak je těžké rozpoznat, z jaké stránky číslo pochází.

Tři typy chyb, které se snadno přehlédnou

Skryté textové vrstvy mohou být zkreslený text. Splnění počtu znaků znamená pouze "můžete pokračovat ve snaze o extrakci." Musíte také zkontrolovat, zda nahrazené znaky, duplicitní řádky a klíčová pole odpovídají renderování. Klíčové položky, jako je číslo smlouvy a částka, musí být náhodně zkontrolovány.

Text vykreslený vektorovou cestou není ani text, ani obrázky. Budou vstoupit do RECENZE. Neoznačujte automaticky stránky jako prázdné a neodhazujte je potichu.

Použití Page po uzavření dokumentu způsobí neplatný objekt. Prosím, zachovejte rozsah with pymupdf.open(...) a soubor uvolněte až po předběžném ověření, vykreslení a rozbalení. Pro více informací o souřadnicích, obrazových informacích a životních cyklech stránek viz PyMuPDF Page API.

Nedůvěryhodné PDF by měly také nastavit velikost souboru, počet stran, počet pixelů pro vykreslování, čas a paměťové limity v samostatném procesu. Příklad testuje pouze malé soubory a neposkytuje sandbox pro škodlivé soubory. Před vytvořením a používáním PyMuPDF byste měli také ověřit jeho licenční podmínky a způsob distribuce.

Přechod ze streamů na překladatelský workflow

Kvalifikovaný výstup není řetězec textu, ale záznam s čísly stran a důvody rozhodnutí. Před překladem ověřte, které stránky lze spolehlivě extrahovat; Po překladu se pak přezkoumá obsah, čísla a rozvržení. Služby zpracování dokumentů si můžete prohlédnout na Produktová položka OmniDoc. Lokální program v tomto článku běží nezávisle a nespoléhá na účet OmniDoc, ani neznamená, že je interním produktovým algoritmem.

📊 Srovnání jádra

TrasaSpouštěcí podmínkyVhodná stránkaHlavní rizika
Přímé vytažení (TEXT_CANDIDATE)Nejméně 40 znaků bez mezeryHlavní stránka existující textové vrstvySkryté vrstvy špatného OCR mohou obsahovat zkreslený text
Kandidáti OCR (OCR_CANDIDATE)Méně než 40 slov, přičemž jeden obrázek pokrývá alespoň 70 %Celostránkový naskenovaný textČisté fotografie také splňují požadavky, ale výsledky OCR nemusí být smysluplné
Manuální kontrola (RECENZE)Nesplňuje výše uvedené dvě kategoriePrázdné stránky, vektorový text, řídké názvy, složité hádankyJe vyžadováno ruční hodnocení; přeskočení nebo vyřazení nelze provádět automaticky

🎯 Která metoda ti vyhovuje?

Pokud ......

  • Zpracovával smíšené dokumenty s velkými kvalitativními rozdíly mezi přední a zadní stránkou: stránka po stránce předkontrola, každá vstupující jinou cestou.
  • Hlavně se zabýváme smlouvami, finančními dokumenty a dalšími dokumenty obsahujícími klíčová čísla: U TEXT_CANDIDATE. stránky náhodně zkontrolujte korespondenci mezi čísly a zobrazeními.
  • Dávkové zpracování skenů: Záznamy verzí enginu, jazykových balíčků a čísel stran pro výsledky OCR pro snadnou sledovatelnost.
  • Přijímání PDF z neznámých zdrojů: Nastavte limity zdrojů v samostatných procesech; nezpracovávajte je přímo v hlavním procesu.

❓ Často kladené otázky (FAQ)

1. Domovská stránka může kopírovat text; mohu přeskočit proces OCR pro celý PDF?

Ne, nemůžeš. To, že je textová vrstva na první stránce, neznamená, že ji mají i na dalších stránkách; měli byste posuzovat stránku po stránce.

2. Proč prostě neseččet přímo oblast obrazu?

Přičtení překrývajících se snímků podle oblasti by nadhodnotilo míru pokrytí. Tento článek bere největší obrázek podle plochy, takže naskenované stránky sešité z více obrázků mohou spadat do sekce REVIEW, což je záměrná hranice.

3. Pokud počet znaků dosáhne 40, znamená to, že kvalita textu je v pořádku?

Nelze to takto uzavřít. Skryté vrstvy špatného OCR mohou mít také mnoho znaků, takže stále musíte kontrolovat náhradní znaky, duplicitní řádky a pole pro klíče na místo.

4. Jak by měl být text kreslený vektorovými cestami zpracován?

Nejsou to ani text, ani obrázky, vstupují do RECENZE a jsou posuzovány ručně; neměly by být automaticky označeny jako prázdné nebo tiše upuštěné stránky.

5. Závisí místní program na účtu OmniDoc?

Není závislá. Místní program v tomto článku běží nezávisle a nevolá žádné online OCR ani překladatelské služby.

📝 Shrnutí

Nejprve zanechte důkazy stránku po stránce, než se rozhodnete, zda provedete OCR. Ponechání nejistých stránek ve frontě je účinnější než maskování nejistých výsledků jako úspěch.

Zkušenost nyní: Nahrajte svůj dokument a začněte s překladem, přičemž zachováte původní formátování

Aktualizováno 2026-11-15