Tesseract

Najpierw należy ściągnąć odpowiednią wersję instalacyjną Tesseract’a oraz program do edycji plików BOX np. jTessBoxEditor. Na podstawie bazy treningowej w postaci obrazków captcha i przy użyciu narzędzi Tesseract, wygenerujemy odpowiednie pliki w celu utworzenia pliku treningowego. Na podstawie tego pliku, Tesseract będzie starał się przetworzyć obrazek i rozpoznać znajdujące się na nim znaki. Jeśli tło captchy jest skomplikowane, możemy postarać się je oczyścić np. za pomocą programu ImageMagick i dołączonego w nim narzędzia convert.

Baza treningowa

Pliki BOX zawierają znaki oraz ich pozycje w analizowanym obrazku treningowym. Na podstawie bazy próbek captcha (np. 20) wygenerujemy pliki BOX oraz poprawimy wyniki działania mechanizmu OCR, aby jak najlepiej przygotować dane treningowe.

Generacja plików BOX

Pierwszym etapem jest utworzenie plików BOX dla każdego obrazka w naszej bazie. Tesseract spróbuje rozpoznać znaki z obrazka i zapisze ich reprezentacje (znak, pozycje, wymiary) do tego pliku.  Polecenie, które generuje plik BOX wygląda następująco:


tesseract eng.captchalang.exp1.bmp eng.captchalang.exp1 batch.nochop makebox

Należy przestrzegać podanego nazewnictwa plików [Język].[Czcionka].exp[Numer]. W przeciwnym razie, w dalszej części mogą wystąpić błędy.

Przy dużej ilości danych treningowych warto napisać sobie skrypt powłoki, który wykona odpowiednie komendy dla wszystkich obrazków.

Edycja plików BOX

Następnym krokiem jest poprawienie wyników OCR. W zależności od poziomu trudności captchy, skuteczność na tym etapie może być różna. Do edycji użyję jTessBoxEditor. Każdy plik BOX należy sprawdzić i poprawić ewentualne błędy. Dostępne są operacje scalania (np. kropka nad i), rozdzielania itd.

jtessboxeditor
jTessBoxEditor – edycja pliku BOX

Uczenie

Mając poprawnie przygotowane pliki BOX można przystąpić do utworzenia plików TR (train) oraz pozostałych niezbędnych plików do wygenerowania zagregowanego pliku treningowego.

Pliki TR

Komenda na wygenerowanie pliku TR na podstawie obrazka oraz BOX wygląda następująco (uwaga na schemat nazewnictwa):


tesseract eng.captchalang.exp1.bmp eng.captchalang.exp1 box.train

Należy ją wywołać dla wszystkich plików BOX.

Plik Unicharset

Następnym krokiem jest utworzenie pliku, który zawiera wszystkie możliwe znaki z bazy treningowej. Należy w jednej komendzie podać wszystkie pliki BOX oddzielając spacją. Komenda wygląda następująco:


unicharset_extractor eng.captchalang.exp1.box eng.captchalang.exp2.box ...

Plik font_properties

Plik opisujący naszą czcionkę, którą uczymy. Należy go stworzyć ręcznie. Jego zawartość może wyglądać następująco:


captchalang 1 0 0 1 0

Łączenie

Mając przygotowane dane treningowe, można je połączyć aby wygenerować charakterystykę rozpoznawanej czcionki. W tym celu wykonaj następujące komendy:


shapeclustering -F font_properties -U unicharset eng.captchalang.exp1.tr eng.captchalang.exp2.tr ...
mftraining -F font_properties -U unicharset -O unicharset eng.captchalang.exp1.tr eng.captchalang.exp2.tr ...
cntraining eng.captchalang.exp1.tr eng.captchalang.exp2.tr ...

Finalizacja

Przed połączeniem plików, należy zmienić nazwy wygenerowaych plików: inttemp, unicharset, shapetable, normproto, pffmtable dodając prefix captchalang. Czyli w efekcie: captchalang.inttemp itd. Nastepnie wywołaj komendę:


combine_tessdata captchalang.

Efektem działania będzie plik treningowy captchalang.traineddata, który należy skopiować do folderu tessdata w głównym katalogu programu Tesseract.

Użycie

Mając zainstalowany plik treningowy, możemy sprawdzić jego działanie na łamanej captchy. W tym celu dodamy parametr l, w którym podamy nazwę naszego pliku treningowego – captchalang.


tesseract captcha.png captcha.txt -l captchalang

Podsumowanie

Na podstawie utworzonego pliku treningowego, osiągnąłem skuteczność rozpoznawania captchy na poziomie ~30%.


Podobne artykuły

Komentarze

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *