2017-04-13 9 views
7

Próbuję więc wyodrębnić tekst z obrazu. A ponieważ jakość i rozmiar obrazu nie jest dobra, daje niedokładne wyniki. Próbowałem kilka ulepszeń i innych rzeczy z PIL, ale to tylko pogorszyło jakość obrazu.Zwiększ dokładność rozpoznawania tekstu przez pytesseract i PIL

Czy ktoś może zaproponować ulepszenie obrazu, aby uzyskać lepsze wyniki. Kilka przykładowych zdjęć:

two

three

+0

O ile rozumiem, istnieją dość sztywne zasady tutaj na stackoverflow i jedną z tych zasad jest skupienie się na odpowiadaniu na pytanie, a nie na pokazaniu, co jeszcze można zrobić, aby osiągnąć cel, jeśli nie było o to poproszone.Więc jeśli chcesz również odpowiedzi, które mogą dać lepsze wyniki, ale nie opierają się na ulepszaniu obrazu, możesz poprosić o to w swoim pytaniu. – Claudio

+0

Co powiesz o oznaczeniu mojej odpowiedzi jako zaakceptowanej? Czy chybiłem coś wyjaśnić? – Claudio

+0

P.S. sprawdź ponownie moją odpowiedź - dodałem do niej kilka wyjaśnień. – Claudio

Odpowiedz

4

W podanym przykładzie obrazu tekst jest wizualnie z dość dobrej jakości, więc pytanie brzmi, jak chodzi, że OCR daje niedokładne wyniki?

Aby zilustrować wnioski podane w dalszej treści niniejszego odpowiedź niech uruchomić dany obraz

enter image description here

przez Tesseract. Poniżej wyniku Tesseract OCR:

"fhpgearedmomrs©gmachom" 

Teraz zmieńmy rozmiar obrazu cztery razy i zastosuj do niego progowanie. Ręcznie zmierzyłem rozmiar i próg w Gimpie, ale z odpowiednią metodą zmiany rozmiaru i wartości progowej dla PIL, może być to na pewno zautomatyzowane, tak że po ulepszeniu otrzymujesz obraz podobny do ulepszonego obrazu, który mam:

enter image description here

ulepszony obraz prowadzony przez Tesseract OCR daje następujący tekst:

"fhpgearedmotors © gmail.com"

To pokazuje, że pl Powiększenie obrazu może pomóc osiągnąć 100% dokładność na podanym przykładzie tekstu-obrazu.

Może wydawać się dziwne, że powiększenie obrazu pomaga osiągnąć lepszą dokładność OCR, ALE ... OCR został opracowany do konwersji skanów mediów drukowanych do tekstów i oczekuje od projektu 300 dpi obrazów tekstu. To tłumaczy, dlaczego niektóre programy OCR nie zmieniły rozmiaru tekstu samodzielnie, aby poprawić swoje wyniki i źle wpływają na małe czcionki oczekujące wyższej rozdzielczości obrazu, którą można osiągnąć poprzez powiększanie.

Oto fragment Tesseract FAQ on github.com prooving powyższe oświadczenie:

[Istnieje minimalny rozmiar tekstu za rozsądną dokładnością. Musisz wziąć pod uwagę zarówno rozdzielczość, jak i wielkość punktu. Dokładność spada poniżej 10pt x 300dpi, szybko poniżej 8pt x 300dpi. Szybkim sprawdzeniem jest policzenie pikseli wysokości x twoich postaci. (Wysokość X to wysokość małej litery x.) Na 10pt x 300 dpi x-wysokości mają zwykle około 20 pikseli, chociaż może się to znacznie różnić od czcionki do czcionki. Poniżej wysokości x 10 pikseli masz bardzo małe szanse na uzyskanie dokładnych wyników, a poniżej około 8 pikseli, większość tekstu będzie "usunięta".]

+0

Bardzo dobre wyjaśnienie i dobra odpowiedź. Pracowałem nad czytaniem tekstu z obrazu (oprogramowanie do rozpoznawania sekcji dokumentów) i chciałem się dowiedzieć, czy udało się uzyskać jakąś zmienną dynamiczną, ile razy trzeba powiększyć obraz, aby mógł rozpoznać tekst? Dla obrazu o rozdzielczości 800x800 rozpoznaje wszystko, jeśli jest powiększony do 1600x1600, ale obraz o rozmiarze 30x800 musi zostać powiększony do 120x3200, aby rozpoznać wszystko (przecinki, kropki, ukośniki itp.). Ponadto, czy wiesz, dlaczego słowo "Plik" nie jest dobrze rozpoznawane? Char "i" nie pochodzi z alfabetu angielskiego –