Zeskanowana strona jest obrazem. Narzędzie, które szuka danych w warstwie tekstowej, nie znajdzie na niej niczego i zgłosi pusty wynik. Żeby zaczernić dane w zeskanowanym PDF, trzeba rozpoznać słowa i ich położenie, zakryć właściwe piksele, a potem odbudować warstwę tekstu. Każdy z tych kroków może zawieść bez ostrzeżenia.
Pusty wynik wygląda jak sukces
Większość błędów przy zaczernianiu widać od razu. Program się zawiesza, zaznacza za dużo albo pomija nazwisko w nagłówku. Przy skanie jest inaczej: narzędzie przeszukuje warstwę tekstową, której w pliku nie ma, i poprawnie raportuje, że nic nie znalazło.
Na stronie są jednak imiona i nazwiska, numery PESEL i adresy. Użytkownik dostaje czysty raport i trudno się dziwić, że mu wierzy. Nic nie zawiodło w widoczny sposób, więc nikt niczego nie sprawdza, a dokument wychodzi z firmy ze wszystkimi danymi.
Skan to zdjęcie strony
Skaner zapisuje obraz kartki, piksel po pikselu. Plik ma rozszerzenie PDF, ale w środku jest zdjęcie umowy, dowodu osobistego albo karty pacjenta. Dla programu, który czyta tylko tekst, ta strona jest pusta.
Duzi dostawcy opisują to wprost. Dokumentacja Adobe Acrobat zaleca, by na zeskanowanym PDF uruchomić rozpoznawanie tekstu (w wersji angielskiej „Recognize Text”). Dopiero wtedy tekst da się przeszukiwać i edytować. Nawet Acrobat traktuje więc OCR jako osobny krok, o którym trzeba pamiętać, a taki krok najłatwiej pominąć.
Podobną budowę ma Presidio, otwarty projekt zapoczątkowany w Microsofcie i dziś rozwijany przez społeczność. Zaczernianie obrazów jest w nim osobnym składnikiem, oddzielnym od analizatora tekstu. To świadomy wybór projektowy: obraz wymaga innego przetwarzania niż tekst.
Zaczernianie skanu krok po kroku
Tak przetwarza skany nasz produkt, promptShield.
- Odczyt. Strona jest renderowana w rozdzielczości 300 dpi. Silnik Tesseract odczytuje ją, korzystając z danych dla języka dokumentu i dla angielskiego.
- Położenie. OCR zwraca słowa razem z ich współrzędnymi. Dane osobowe są wskazywane jako obszary obrazu.
- Wykrywanie. Wzorce szukają danych o stałym formacie, a model rozpoznaje imiona, nazwiska, firmy i adresy. Warstwa modelu językowego jest opcjonalna i domyślnie wyłączona. Nazwisko znalezione na stronie 1 zostaje oznaczone także na stronie 4.
- Zakrycie. Piksele w każdym obszarze są zamalowywane w samym obrazie strony.
- Nowa warstwa tekstu. Pod obrazem powstaje przeszukiwalna warstwa tekstowa bez usuniętych danych.
Zakrycie pikseli i nakładka to dwie różne rzeczy
Najczęstsze pozorne zaczernienie to czarny kształt narysowany nad stroną. Wygląda poprawnie, ale w edytorze PDF da się go przesunąć albo usunąć. Obraz pod spodem zostaje nietknięty. Dlatego to, że coś jest czarne, nie dowodzi, że dane zniknęły.
W promptShield zaczernienie usuwa treść z pliku. Eksport obejmuje też miejsca niewidoczne na stronie: teksty alternatywne, metadane XMP, wartości pól formularzy i ich wygląd. Wartość zakodowana dostaje tam swój kod odwracalny, a wartość zaczerniona neutralny znacznik.
Miniatura strony zapisana przed zaczernieniem jest usuwana, bo w obrazie nie da się wyszukać i zamienić tekstu. Zwykły PDF z warstwą tekstową ma ten sam problem z nakładkami. Opisujemy go w artykule o anonimizacji dokumentów prawnych bez chmury.
Język skanu to realne ograniczenie
OCR czyta tak dobrze, jak pozwalają mu dane językowe. Aplikacja ma pakiety OCR tylko dla części języków. Skan w języku bez pakietu odczytuje model przygotowany dla innych słów i innych znaków.
Wynik nie jest wtedy pusty. Wygląda wiarygodnie, ale zawiera błędy: znaki diakrytyczne zamieniają się w inne litery, a nazwisko przestaje przypominać nazwisko. Wykrywanie nie rozpozna takiego słowa. Przed pracą na skanach trzeba więc sprawdzić, czy język dokumentu ma swój pakiet.
Przegląd przed pobraniem
Żaden lokalny model nie wykrywa wszystkich identyfikatorów. Dlatego domyślnie pliku z chronionymi obszarami nie da się pobrać przed ich zatwierdzeniem w przeglądzie. Przycisk pobierania otwiera wtedy okno, które wyjaśnia przyczynę i prowadzi do przeglądu. Przy skanie ten krok jest najważniejszy, bo błąd OCR zauważy dopiero człowiek.
W aplikacji na komputer rozpoznawanie tekstu, wykrywanie i zaczernianie działają lokalnie. Bezpłatna aplikacja w przeglądarce też nie wysyła dokumentu, choć wysyła anonimowy sygnał uruchomienia. Dlaczego mechanizm przetwarzający strony dokumentu napisaliśmy sami, wyjaśniamy w tekście o własnym silniku wykrywania.
Najczęstsze pytania
Dlaczego narzędzie nie znalazło danych w zeskanowanym PDF?
Skan jest obrazem strony bez warstwy tekstowej. Narzędzie tekstowe nie ma w nim czego przeszukać, więc zwraca pusty wynik. Najpierw trzeba uruchomić rozpoznawanie tekstu (OCR).
Czy czarny prostokąt w PDF wystarczy, żeby ukryć dane na skanie?
Prostokąt nałożony na stronę jako osobny kształt nie wystarczy. Da się go usunąć w edytorze, a obraz pod nim zostaje. Piksele trzeba zamalować w samym obrazie.
Czy można zaczernić dane na zdjęciu dowodu osobistego?
Można, bo zdjęcie jest przetwarzane jak zeskanowana strona. OCR odczytuje tekst i jego położenie, a wskazane obszary są zamalowywane w obrazie. Wynik trzeba sprawdzić w przeglądzie przed pobraniem.
Czy OCR działa na skanach w każdym języku?
Jakość odczytu zależy od pakietu danych językowych. Skan w języku bez pakietu jest odczytywany błędnie, zwykle bez ostrzeżenia.