Czy PDF wymaga OCR? Użyj PyMuPDF, aby wykonać wstępną inspekcję strona po stronie zamiast pełnego ponownego rozpoznawania

Jeśli chcesz OCR pliku PDF, nie ma potrzeby ponownego rozpoznawania całego pliku PDF. Użyj PyMuPDF, aby określić strona po stronie, czy istnieje warstwa tekstowa i czy jest to obraz całostronicowy, i wyślij tylko te strony, które są naprawdę potrzebne do rozpoznania. W załączeniu znajdują się próbki nadające się do analizy, testy stron rotacyjnych i instrukcje dotyczące granic gałęzi.

Gdy wiele zespołów zajmuje się tłumaczeniem lub archiwizacją plików PDF, przyzwyczajone są one do oznaczania całego dokumentu przy wejściu jako „zeskanowany"lub „możliwy do skopiowania". 300-stronicowy plik PDF może zawierać pierwsze 280 stron z warstwami tekstowymi i tylko ostatnie 20 stron jako zeskanowane załączniki. Jeśli zostanie sklasyfikowany według całych części, cały OCR wydłuży czas oczekiwania, a także może błędnie zidentyfikować pierwotnie prawidłowe liczby. Z drugiej strony, jeśli możesz skopiować tylko tekst ze strony głównej i pominąć OCR na wszystkich stronach, jest to również ryzykowne.

Bardziej niezawodnym podejściem jest umożliwienie każdej stronie przejścia do następnego kroku z wynikami inspekcji wstępnej. W tym artykule zaimplementowano konserwatywny trójstronny podział: bezpośrednie wyodrębnianie, wysyłanie do kolejki kandydatów OCR i ręczna inspekcja. Jest to możliwa do interpretacji heurystyka inżynieryjna, a nie uniwersalny klasyfikator służący do oceny jakości tekstu. Po przeczytaniu możesz uzyskać możliwy do uruchomienia program wstępnej inspekcji strona po stronie, a także granice przekierowania i typowe pomysły na obsługę błędów.

Konkluzja w jednym zdaniu

Nie ma potrzeby oceniać, czy plik PDF wymaga OCR. Użyj PyMuPDF, aby wstępnie sprawdzić strona po stronie i wysłać tylko te strony, które naprawdę wymagają rozpoznania do OCR.

twoja sytuacjaZalecane praktykipowód
Wyodrębnij co najmniej 40 znaków innych niż białe znaki z jednej stronyEkstrakcja bezpośrednia (TEXT_CANDIDATE)Masz już wystarczającą liczbę znaków, ale nadal musisz sprawdzić ukryte, złe warstwy OCR
Mniej niż 40 słów i jeden obraz zajmujący co najmniej 70% stronyWyślij do kolejki kandydatów OCRDo identyfikacji nadają się skany całej strony, ale wystarczą również czyste zdjęcia.
Pusta strona, typ wektorowy, rzadki tytuł lub złożona łamigłówkaKontrola ręczna (RECENZJA)Sytuacji tych nie można rzetelnie zaklasyfikować do dwóch pierwszych kategorii i nie można ich automatycznie pominąć lub odrzucić.
300-stronicowy dokument hybrydowyWstępna inspekcja strona po stronie, nie dokończone przetwarzanieUnikaj OCR wszystkich stron ze względu na kilka zeskanowanych załączników lub pomijania całego OCR, ponieważ na stronie głównej znajduje się tekst

Uwaga: zawartość obrazu pochodzi z syntetycznego pliku PDF wygenerowanego przez poniższy kod, a nie z pliku klienta ani interfejsu OmniDoc. Tekst na stronie obrazu to piksele rastrowe; tekst na stronie tekstowej zawiera prawdziwą warstwę tekstową.

Zdecyduj, co sprawdzić najpierw

Wykorzystywane są tu dwa sygnały: liczba znaków tekstu po usunięciu białych znaków oraz proporcja obszaru strony zajmowana przez największy obraz na stronie. Pierwsza odpowiada: „Czy wyodrębniono wystarczającą liczbę znaków?"a ta ostatnia pomaga odróżnić skanowanie całej strony od pustej strony. Obszar obrazu najpierw przetnie się z ramką przycinania, aby uniknąć przekroczenia współczynnika powiększenia obrazu na stronie.

obserwacjaOdwrócenie uwagi od tego artykułuNadal potrzebuję uwagi
Co najmniej 40 znaków innych niż białe znakiTEXT_CANDIDATEUkryte złe warstwy OCR mogą również zawierać wiele słów
Mniej niż 40 słów i pojedynczy obraz obejmujący co najmniej 70%OCR_CANDIDATECzyste zdjęcia również spełniają wymagania; OCR może nie mieć znaczenia
Reszta sytuacjiREVIEWPuste przestrzenie, tekst wektorowy, oszczędne tytuły i złożone zagadki mogą tu być

Progi 40 i 0,70 mają ułatwić audyt tego zestawu testów, a nie standardy międzyjęzykowe. Chińskie, formuły, okładki i formy krótkie powinny być oznaczane osobno. Tutaj robi się największy obraz według obszaru, zamiast po prostu dodawać obszary nakładających się obrazów. W związku z tym zeskanowana strona składająca się z wielu obrazów może trafić do REVIEW. Jest to celowo zachowana granica.

Kompletna próbka do ubiegania

Próbka korzysta zPyMuPDF==1.28.0, nie korzysta z Tesseractu i nie korzysta z usług OCR ani tłumaczeń online. Zapisz jako example.py i uruchom go w pustym katalogu. Utworzona przez to nazwa pliku jest przypisana do routing-fixture.pdf. W przypadku prawdziwych projektów prosimy nie nadpisywać plików wejściowych.

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))

Podczas uzyskiwania OCR zapamiętuj TextPage, a nie marker sukcesu

Interfejs OCR PyMuPDF to page.get_textpage_ocr(...). Tesseract i odpowiadające mu dane językowe muszą być przygotowywane osobno. Po uzyskaniu TextPage, kolejne wyodrębnienie powinno przekazać ją jako parametr textpage, aby uniknąć rozpoznania duplikatów na tej samej stronie. Szczegółowe metody i parametry instalacji można znaleźć w Dokument OCR PyMuPDF.

Ten artykuł nie uruchamia silnika OCR, więc wyniki testów jedynie potwierdzają, że logika dystrybucji i użycie współrzędnych są poprawne, a nie odzwierciedlają szybkości rozpoznawania chińskich, szybkość odzyskiwania tabel ani jakości tłumaczeń. W produkcji należy zapisywać wersję silnika OCR, pakiet językowy, numer strony, podsumowanie pliku wejściowego oraz wyniki ręcznego próbkowania. Nie zachowuj tylko ostatniego ciągu, bo inaczej trudno zinterpretować, z której strony pochodzi numer.

Trzy rodzaje usterek najłatwiej przeoczyć

Ukryte warstwy tekstu mogą być zniekształconym tekstem. Osiągnięcie liczby znaków oznacza jedynie "możesz kontynuować próby ekstrakcji." Musisz też sprawdzić, czy zastąpione znaki, zdublowane linie i pola klucza odpowiadają renderowi. Kluczowe elementy, takie jak numer umowy i kwota, muszą być losowo sprawdzane.

Tekst rysowany ścieżką wektorową nie jest ani tekstem, ani obrazami. Wchodzą w PRZEGLĄD. Nie oznaczaj automatycznie stron jako pustych i nie upuszczaj ich po cichu.

Użycie Strony po zamknięciu dokumentu skutkuje nieprawidłowym obiektem. Prosimy zachować zakres with pymupdf.open(...) i zwolnić plik dopiero po jego wstępnym sprawdzeniu, renderowaniu i rozpakowaniu. Więcej szczegółów dotyczących współrzędnych, informacji o obrazach i cykli życia stron można znaleźć w PyMuPDF Page API.

Niezaufane pliki PDF powinny również ustawiać rozmiar pliku, liczbę stron, piksele renderowania, czas i limity pamięci w osobnym procesie. Przykład testuje tylko małe pliki i nie zapewnia piaskownicy dla złośliwych plików. Przed stworzeniem i użyciem PyMuPDF powinieneś również zweryfikować warunki licencyjne oraz sposób dystrybucji.

Przejście od strumieni do pracy tłumaczeń

Kwalifikowany wynik nie jest ciągiem tekstu, lecz zapisem z numerami stron i powodami decyzji. Przed tłumaczeniem sprawdź, które strony można niezawodnie wyodrębnić; Po tłumaczeniu przeglądane są treści, liczby i układ. Usługi przetwarzania dokumentów możesz przeglądać na Wpis produktu OmniDoc. Program lokalny opisany w tym artykule działa niezależnie i nie opiera się na koncie OmniDoc, ani nie oznacza, że jest algorytmem produktu wewnętrznego.

📊 Porównanie rdzenia

TrasaWarunki wyzwalająceOdpowiednia stronaGłówne ryzyka
Bezpośrednie wydobycie (TEXT_CANDIDATE)Co najmniej 40 znaków bez odstępówStrona główna istniejącej warstwy tekstowejUkryte warstwy złego OCR mogą zawierać zniekształcony tekst
Kandydaci OCR (OCR_CANDIDATE)Mniej niż 40 słów, z jednym obrazem obejmującym co najmniej 70%Zeskanowana kopia na całej stronieCzyste zdjęcia również spełniają wymagania, ale wyniki OCR mogą nie mieć znaczenia
Inspekcja ręczna (RECENZJA)Nie spełnia powyższych dwóch kategoriiPuste strony, tekst wektorowy, oszczędne tytuły, złożone zagadkiWymagana jest ocena ręczna; pomijanie lub odrzucanie nie może być dokonane automatycznie

🎯 Która metoda ci odpowiada?

Jeśli ......

  • Obsługiwane są dokumenty mieszane, z dużymi różnicami jakościowymi między stronami frontowymi a ostatnimi: strona po stronie wstępnie sprawdzana, każda wprowadzająca inną ścieżkę.
  • Głównie zajmować się umowami, dokumentami finansowymi i innymi dokumentami zawierającymi kluczowe numery: Dla strony TEXT_CANDIDATE losowo sprawdzaj powiązania między liczbami a wyobrazeniami.
  • Przetwarzanie wsadowe skanów: Wersje silnika zapisu, pakiety językowe i numery stron dla wyników OCR dla łatwej śledzenia.
  • Otrzymywanie plików PDF z nieznanych źródeł: Ustalaj limity zasobów w samodzielnych procesach; nie przetwarzaj ich bezpośrednio w głównym procesie.

❓ Najczęściej zadawane pytania (FAQ)

1. Strona główna może kopiować tekst; czy mogę pominąć proces OCR dla całego PDF-a?

Nie, nie możesz. Posiadanie warstwy tekstowej na pierwszej stronie nie oznacza, że kolejne strony też je mają; powinieneś oceniać stronę po stronie.

2. Dlaczego po prostu nie zsumować bezpośrednio obszaru obrazu?

Dodanie nakładających się obrazów według obszaru przeszacuje wskaźnik zasięgu. Ten artykuł analizuje największy obraz według obszaru, więc zeskanowane strony złożone z wielu obrazów mogą należeć do sekcji REVIEW, która jest celową granicą.

3. Jeśli liczba znaków osiągnie 40, czy to znaczy, że jakość tekstu jest w porządku?

Nie można tego tak stwierdzić. Ukryte warstwy złego OCR mogą też zawierać wiele znaków, więc nadal musisz sprawdzać znaki zastępcze, zduplikowane linie i pola klucza spot.

4. Jak powinien być obsługiwany tekst rysowany ścieżkami wektorowymi?

Nie są ani tekstem, ani obrazami, wpisują REVIEW i są oceniane ręcznie; nie powinny być automatycznie oznaczane jako puste lub cicho porzucone strony.

5. Czy lokalny program polega na kontu OmniDoc?

Nie zależna. Program lokalny opisany w tym artykule działa niezależnie i nie korzysta z usług OCR ani tłumaczeń online.

📝 Podsumowanie

Najpierw zostawiaj dowody strona po stronie, zanim zdecydujesz o przeprowadzeniu OCR. Pozostawianie niepewnych stron w kolejce jest skuteczniejsze niż ukrywanie niepewnych wyników jako sukces.

Doświadczenie teraz: Prześlij dokument, aby zacząć tłumaczyć, zachowując oryginalne formatowanie

Zaktualizowano 2026-11-15