Rozpoznawanie obrazów w OpenWrt
Ostatnia zmiana: 2013-11-26 18:42

OCR czyli ogólnie mówiąc program do przetwarzania obrazów na tekst, wykorzystywany jest głównie do skanowania dokumentów czy książek. W OpenWrt znajdziemy program do tego, który niedawno zostawał uwolniony - tesseract. Można go wykorzystać go różnych celów, np. odczytu danych z jakiegoś licznika (robimy fotkę i rozpoznajemy stan licznika) lub do autoryzacji w niektórych serwisach - wykorzystuje go np. pyload.

Uwaga: tesseract nie jest idealnym programem. Aby działa poprawnie, obraz wejściowy musi być dobrej jakości, czytelny, mało zamazany, o dobrym kontraście (litery muszą się znacznie różnić od tła). Kiepskiej jakości obrazki, zamazane, poruszone nie sprawdzą się.

Obraz do rozpoznawania

Można wykonać zdjęcie wykorzystując kamerę internetową i fswebcam. Powyższa metoda sprawdzi się więc do odczytania np. wspomnianego już licznika, z którego nie ma jak inaczej odczytać wartości. Można także podać dowolne inne zdjęcie zrobione aparatem cyfrowym.
Do celów testowych i napisania tego poradnika wykorzystano następujący obrazek:


Instalacja OCR

Podstawowy problem - ilość wolnego miejsca. O ile sam program nie zajmuje wiele, o tyle biblioteki z których korzysta to wymagane kilkanaście wolnych megabajtów. Więc prawdopodobnie extroot będzie niezbędny.


    # opkg update
    # opkg install tesseract

Oprócz samego programu niezbędne są już wspomniane dane do rozpoznawania liter. Dostępne są one na stronie projektu: http://code.google.com/p/tesseract-ocr/downloads/list - na początek wystarczy plik http://code.google.com/p/tesseract-ocr/downloads/detail?name=eng.traineddata.gz , który należy pobrać, rozpakować i umieścić w katalogu /usr/share/tessdata/ pod nazwą eng.traineddata

Uruchomienie



    # tesseract /mnt/sda1/plik.jpg wynik
    Tesseract Open Source OCR Engine v3.02.02 with Leptonica
    #

Gdzie pierwszy argument to nazwa przetwarzanego pliku, drugi - nazwa (bez rozszerzenia) pliku w którym zostanie zapisany wynik skanowania (dodanie dodane do niego .txt).
Jeżeli program zostanie zakończony w błędem należy użyć jednego z dostępnych przełączników (np. -psm).

Testy

Język angielski



    # tesseract /mnt/sda1/plik.jpg wynik1

Przedstawiony plik został poddany programowi do rozpoznawania tekstu. Plik jest wyraźny, litery są czytelne. Wynik działania:


    # cat wynik1.txt 
    Tutaj moiemy umieécié Twojq REKLAME

Prawie dobrze, choć nie ma polskich liter.

Język polski

Wymaga doinstalowania dodatkowego pliku do rozpoznawania danych - http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-3.02.pol.tar.gz&can=2&q= , należy podobnie jak w poprzednim przypadku pobrać, rozpakować i umieścić w katalogu /usr/share/tessdata/ pod nazwą pol.traineddata. Sprawdzamy czy jest ten język dostępny:


    # tesseract --list-langs
    List of available languages (2):
    eng
    pol

Jeżeli tak jest - można wymusić język polski podczas skanowania


    # tesseract /mnt/sda1/plik.jpg wynik2 -l pol
    Tesseract Open Source OCR Engine v3.02.02 with Leptonica

Wynik działania:


    # cat wynik2.txt 
    Tutaj możemy umieścić Twoją REKLAMĘ

Czyli w tym przypadku całkowicie się to sprawdziło.