Rozpoznawanie ekranu #2: Czytanie tekstu

Wyzwaniem jest automatyzacja testów UI (Interfejsu użytkownika). Biblioteka pytesseract może być pomocna w ich wykonaniu do czytania tekstów.

Rozpoznawanie ekran

Rozpoznawanie ekranu


Jeżeli do detekcji zdarzeń na ekranie używana jest obraz z kamery lub zrzut ekranu, wystarczające na potrzeby testów może być zczytanie z niego tekstu. Oczywiście przy testach manualnych wystarczy nam tester, który umie czytać ;), ale w przypadku testów automatycznych potrzebne są dodatkowe narzędzia. W tym artykule użyję biblioteki pytesseract korzystającej z oprogramowania Tesseract. Dzięki niej w prosty sposób odczytacie tekst z pliku graficznego.

Instalacja

Instalacja na Raspberry Pi czy na Ubuntu przebiega w ten sam sposób. Z poprzedniej części serii potrzebna jest biblioteka Pillow.

Jeśli jeszcze jej nie zainstalowałeś, to możesz to zrobić za pomocą aplikacji pip:

pip install Pillow

Kolejną Python’ową biblioteką potrzebną do czytania tekstu jest wcześniej wspomniany pyteseract. Instalację również wykonujemy za pomocą aplikacji pip

pip install pytesseract

Sama biblioteka nie służy do czytania tekstu. Jest to tylko narzędziem, które używa programu Tesseract. Należy go także zainstalować na maszynie, której chcemy czytać teksty.

sudo apt install tesseract-ocr

Przeczytaj tekst

Po tych kilku krokach instalacyjnych czas sprawdzić, czy wszystko działa poprawnie. Poniżej przygotowałem obrazek png (można użyć oczywiście też jpgbmp czy każdego innego, który jesteśmy w stanie otworzyć za pomocą biblioteki Pillow) z nazwą naszego serwisu (nazwa pliku to read_logo.png):

Najpierw zaimportuj wcześniej wymienione biblioteki, następnie użyj metody image_to_string z biblioteki pytesseract, którego argumentem musi być zaczytany plik graficzny (obraz). Do wczytania pliku graficznego służy metoda open klasy Image:

from PIL import Image
import pytesseract
 
print("Text: ", pytesseract.image_to_string(Image.open('read_logo.png')))

Po uruchomieniu powyższego kodu uzyskanym wynikiem będzie przeczytana nazwa serwisu Qabrio.pl. Jak można zobaczyć, Tesseract rozpoznaje również znaki interpunkcyjne i wielkie i małe litery.

Aby zbytnio nie ułatwiać Tesseract’owi, spróbujmy odczu tekstu ze zdjęcia. Tym razem będzie to kubek i plik o nazwie read_photo o rozszerzeniu jpg:

from PIL import Image
import pytesseract
 
print("Text: ", pytesseract.image_to_string(Image.open('read_photo.jpg')))

Jednak jak można poniżej zauważyć, coś poszło nie tak. Niestety Tesseract nie daje sobie rady z tekstem, który jest obrócony.

Text:  7

W związku z powyższym musimy obrócić obraz, tak aby tekst był ustawiony horyzontalnie:

Text: w 

Jednak i to nie da oczekiwanego efektu – wręcz losowy. Dodatkowo musimy wyciąć fragment obrazu, na którym oczekujemy interesującego nas napisu:

Teraz już prawie jest już prawie idealnie:

Text:  Qabrio.p!

Ręczna edycja obrazu nie jest zbyt polecana, gdyż nie jest powtarzalna i nie jest automatyczna. Moglibyśmy tego użyć do celów prywatnych albo gdy czynność mamy wykonać jednokrotnie, lub 5-kroteni, ale jak już chodzi o seryjne działania nie jest to dobre rozwiązanie, gdyż jeśli chodzi o testy, musimy być pewni naszego wyniku. W kolejnym artykule poświęconym tej serii zajmę się obróbką grafiki na potrzeby testów i Tesseracta wykorzystując przy tym bibliotekę OpenCV.

close

Newsletter