Większość narzędzi do zaczerniania powstaje z myślą o programistach. Przyjmują tekst i zakładają, że ktoś wcześniej zamienił stronę dokumentu w tekst. Nikt z ich twórców nie mówi, czyje to zadanie, a w kancelarii spada ono na osobę, która ma do tego najmniej środków.
Od czego zaczyna biblioteka
Presidio to dobry przykład, bo to solidne oprogramowanie. Projekt powstał w Microsofcie, a dziś rozwija go społeczność. Instalacja zaczyna się od pip install presidio-analyzer i pobrania modelu spaCy. Pierwsze wywołanie przyjmuje ciąg znaków i zwraca listę wyników z pozycjami.
Dla programisty to rozsądne podejście, bo jego dane są już tekstem: zgłoszenia, czaty, rekordy w bazie danych. Zespół inżynierów ma też czas na konfigurację: dobiera modele, pisze własne reguły rozpoznawania i dopisuje testy. Biblioteka jest skrojona właśnie na potrzeby takiego odbiorcy.
Krok przed pierwszym wywołaniem
Kancelaria nie ma ciągu znaków, tylko skan umowy, zdjęcie dowodu osobistego i PDF, który wydrukowano, podpisano i zeskanowano ponownie. Zanim cokolwiek trafi do biblioteki, ktoś musi zamienić te strony w tekst i zapisać, gdzie na stronie leży każde słowo.
Ten krok wymaga rozpoznawania tekstu (OCR), wyboru języka i rozdzielczości. Potem wyniki trzeba przenieść z powrotem na obraz, żeby zakryć właściwe piksele. Sam tekst z OCR mówi, co jest na stronie, ale nie mówi, gdzie to jest. Dokumentacja bibliotek zakłada, że ten krok został już wykonany.
Presidio ma osobny moduł do obrazów: pip install presidio-image-redactor. Wymaga silnika Tesseract zainstalowanego osobno. Według indeksu pakietów Snyk w październiku 2026 r. moduł ten pobierano około 2800 razy tygodniowo.
Na tle liczby skanów w kancelariach, biurach rachunkowych i szpitalach to niewiele. Moduł przyjmuje przy tym gotowy obraz, a zamiana wielostronicowego PDF w obrazy, wybór języka i sprawdzenie wyniku należą do wdrażającego.
Kto ponosi koszt przeoczenia
Błąd na tym etapie przechodzi bez żadnego komunikatu: gdy OCR nie odczyta strony, biblioteka dostaje pusty tekst i zwraca pustą listę. Plik wygląda na przetworzony, a nazwisko na skanie zostaje.
Programista ma pod ręką testy, logi i czas. Może dobrać rozdzielczość, sprawdzić odczyt na próbce i poprawić konfigurację. Prawnik z terminem na jutro nie ma żadnej z tych możliwości.
Przeoczenie zauważy dopiero odbiorca dokumentu. Odpowiedzialność za dane w dokumencie spoczywa na administratorze danych w rozumieniu RODO, a w kancelarii dochodzi jeszcze tajemnica adwokacka albo radcowska. Koszt przeoczenia ponosi więc ten, kto ma najmniejszy wpływ na to, czy do niego dojdzie.
Ten sam błąd popełniliśmy sami
W trzech miejscach przyjęliśmy w promptShield to samo założenie co inni twórcy takich narzędzi:
- Powierzchnię obrazu traktowaliśmy jako miarę jego znaczenia. Małe obrazy pomijaliśmy, a podpis lub pieczątka z nazwiskiem bywają małe.
- Kod wywoływał metodę, której nasza biblioteka PDF nie miała, a błąd trafiał tylko do logu na poziomie debugowania. W efekcie funkcja zwracała „brak obrazów” dla każdego pliku.
- Prostokąt narysowany ręcznie na skanie niczego nie obejmował: strona nie miała warstwy tekstu, więc w zaznaczeniu nie było żadnych słów.
Żaden z tych błędów nie powodował awarii: aplikacja działała, a wyniki wyglądały poprawnie, więc trudno było te błędy zauważyć.
Każdy wynikał z założenia, że strona jest już tekstem. Wszystkie trzy poprawiliśmy, ale nie zakładamy, że były jedyne, dlatego wyniki wciąż trzeba przeglądać.
Jak to działa teraz
Aplikacja renderuje zeskanowaną stronę w 300 dpi i uruchamia Tesseract z językiem dokumentu oraz angielskim. Dane osobowe lokalizuje jako obszary obrazu i zakrywa odpowiadające im piksele. Pod spodem odbudowuje warstwę tekstu, którą można przeszukiwać.
Szczegóły opisujemy w tekście o anonimizacji zeskanowanych PDF-ów i obrazów. Skan odczytany z niewłaściwym pakietem językowym daje tekst pełen błędów, a aplikacja o tym nie ostrzega, więc język dokumentu trzeba ustawić świadomie.
Zaczernianie usuwa treść ze strony, zamiast rysować na niej prostokąt. Eksport zmienia też ukryte części PDF, takie jak teksty alternatywne, metadane i pola formularzy. Zakodowana wartość dostaje tam swój kod, a zaczerniona neutralny znacznik. Miniatury stron sprzed zaczernienia są usuwane.
Wykrywanie działa warstwowo: wzorce dla danych o stałym formacie, model wykrywania nazw i opcjonalny model językowy, domyślnie wyłączony. Żaden lokalny model nie znajduje wszystkiego. Porównanie z Presidio omawiamy szerzej w tekście o tym, dlaczego napisaliśmy własny silnik.
Dokument nie opuszcza komputera ani w aplikacji na komputer, ani w bezpłatnej aplikacji w przeglądarce.
Najczęstsze pytania
Czy Presidio obsługuje zeskanowane dokumenty?
Presidio ma osobny moduł do obrazów, który wymaga osobno zainstalowanego Tesseracta. Zamiana plików PDF w obrazy i wybór języka należą do wdrażającego.
Jak sprawdzić, czy skan został zanonimizowany?
Trzeba obejrzeć każdą stronę po przetworzeniu i porównać zaczernione obszary z danymi na skanie. Pusta lista wyników może oznaczać nieodczytany tekst, a nie dokument bez danych osobowych.
Czy w PDF wystarczy zakryć dane czarnym prostokątem?
Prostokąt narysowany na tekście nie usuwa go: tekst zostaje pod spodem i można go skopiować. Treść trzeba usunąć ze strony i z ukrytych części pliku.
Czy promptShield wykrywa wszystkie dane osobowe na skanach?
Tego nie gwarantujemy. Odczyt zależy od jakości skanu i pakietu językowego, dlatego aplikacja wymaga przeglądu wyników przed pobraniem pliku.