OCR – czytamy tekst z obrazków

Jak już wspomniałem we wcześniejszym wpisie – wpadłem na pomysł znalezienia biblioteki, która umożliwia czytanie tekstu ze zdjęć w JavaScriptcie. Okazuje się, że w tej kwestii nie ma za wiele propozycji. Na praktycznie pierwszym miejscu w google pojawia się Ocrad.js. Na szczęście oferuje on-line’owe demo, które niestety ukazuje jak dużo jeszcze pracy trzeba włożyć w bibliotekę, by działała sprawnie:

OCRAD

Oczywiście – dodatkową trudnością są polskie znaki, ale na obrazku widać, że alfabet łaciński też nie najlepiej mu idzie.

Drugą pozycją godną uwagi jest wspomniany już wcześniej przy okazji praczki nugetowej Tesseract. W pełni przepisany silnik Tesseracta do JS. Brzmi ciekawie. Na podlinkowanej stronie jest również szybki guide jak zacząć korzystać z tej biblioteki. Niestety jest tak kiepski i dokumentacja jest tak zła, że odpalenie przykładu bez zaglądania w kod źródłowy projektu (na którym na szczęście jest mini demo działania) jest prawie niemożliwe. Oto krótki kod:

<div id="recipe"><img src="~/recipes/przepis-easy.jpg" class="to_ocr"/></div>

<script src="http://tenso.rs/tesseract.js"></script>
<script>
    function show_progress(p) {
        console.log(p);
    }

    function display(result) {
        console.log("Here comes the result!");
        console.log(result);
    }

    var demo = document.getElementById("recipe");
    var img = demo.querySelector('img.to_ocr');

    Tesseract
        .recognize(img, 
        { 
            progress: show_progress,
            lang: 'pol'
        })
        .then(display);
 </script>

Wynik jest zdumiewający! Co prawda dla podanego przeze mnie obrazka tesseract ma problem z odróżnieniem literki „t” od „i”, ale w sumie – nie jest tak źle. Problem jest też taki, że próbuje zamienić obrazek na jakieś znaki. To może być dokuczliwe, bo właściwie w większości przepisów są jakieś zdjęcia.

tesseract

Tutaj właściwie kończy się lista sensownych bibliotek JS. Na szczęście istnieją również API. Co prawda w większości płatne, choć nie zawsze super działające. Oszczędzę tutaj czasu i powiem, że najlepszym API (i właściwie jedynym, godnym uwagi), jakie udało mi się przetestować jeśli chodzi o OCR jest Abby Cloud OCR SDK. Praktycznie w 90% poprawnie rozpoznaje tekst. Problemy są 2. Jeden techniczny – rozpoznaje obrazki, na których nie rozpoznaje tekstu, jednak wtedy bierze pod uwagę całą szerokość analizowanej strony. Oznacza to, że jeśli gdzieś na zdjęciu jest tekst, obok którego mamy zdjęcie, to ten tekst nie zostanie rozpoznany. Drugą wadą jest cena – co prawda jest możliwy 90 dniowy trial, podczas którego możemy przetestować 50 (sic!) stron. Potem należy płacić przynajmniej co 3 miesiące i przynajmniej 10$. 10 dolców za rozpoznanie tekstu na 100 obrazkach. Wydaje się to dość drogo i mało. W rzeczywistości jest to jeszcze mniej i jeszcze drożej niż się wydaje. Trzeba jednak przyznać, że narzędzie działa wyśmienicie.

abby

Prawdopodobnie zatrzymam się na Tesseractcie. Wygląda przyzwoicie. Myślałem przez chwilę czy by może nie przemielić tekstu z Tesseracta przez jakieś API z autokorektą, jednak pierwszy znaleziony polski autokorektor. Uświadomił mi, że lepiej jak użytkownik sam poprawi ewentualne błędy. 😀

ikorektor


Post jest elementem serii wpisów dotyczących projektu CookBook realizowanego w ramach konkursu „Daj się poznać”.
DSP2016 logo RGB color-1

Dodaj komentarz

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