Rozpoznawanie ekranu #2 Czytanie tekstu

Rozpoznawanie ekranu #2: Czytanie tekstu

Poziom trudności
2.5/5

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ż jpg, bmp 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):

Rozpoznawanie ekranu #2 Czytanie tekstu image

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:

  1. from PIL import Image
  2. import pytesseract
  3. 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:

  1. from PIL import Image
  2. import pytesseract
  3. print("Text: ", pytesseract.image_to_string(Image.open('read_photo.jpg')))
Rozpoznawanie ekranu #2 Czytanie tekstu image

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:

Rozpoznawanie ekranu #2 Czytanie tekstu image
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:

Rozpoznawanie ekranu #2 Czytanie tekstu image

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.

Dodaj komentarz