Mam kilka tysięcy plików PDF zawierających obrazy B (1bit) B & ze zdigitalizowanych formularzy papierowych. Próbuję OCR niektóre pola, ale kiedyś pisanie jest zbyt słaby:Wstępnie przetwarzanie słabo zeskanowanych, ręcznie pisanych cyfr
Właśnie dowiedziałem się o przekształceń morfologicznych. Są naprawdę fajne !!! Czuję się, jakbym ich nadużywał (tak jak robiłem to z wyrażeń regularnych, kiedy uczyłem się Perla).
Jestem zainteresowany tylko w dzień, 06.07.2017:
im = cv2.blur(im, (5, 5))
plt.imshow(im, 'gray')
ret, thresh = cv2.threshold(im, 250, 255, 0)
plt.imshow(~thresh, 'gray')
Osoby wypełniające formularz ten wydaje się mieć pewne lekceważenie siatkę, więc starałem się go pozbyć. Jestem w stanie wyizolować linię poziomą to transform:
horizontal = cv2.morphologyEx(
~thresh,
cv2.MORPH_OPEN,
cv2.getStructuringElement(cv2.MORPH_RECT, (100, 1)),
)
plt.imshow(horizontal, 'gray')
mogę pionowe linie, a także:
plt.imshow(horizontal^~thresh, 'gray')
ret, thresh2 = cv2.threshold(roi, 127, 255, 0)
vertical = cv2.morphologyEx(
~thresh2,
cv2.MORPH_OPEN,
cv2.getStructuringElement(cv2.MORPH_RECT, (2, 15)),
iterations=2
)
vertical = cv2.morphologyEx(
~vertical,
cv2.MORPH_ERODE,
cv2.getStructuringElement(cv2.MORPH_RECT, (9, 9))
)
horizontal = cv2.morphologyEx(
~horizontal,
cv2.MORPH_ERODE,
cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
)
plt.imshow(vertical & horizontal, 'gray')
Teraz mogę uzyskać Pozbądź się siatki:
plt.imshow(horizontal & vertical & ~thresh, 'gray')
Najlepszym Dostałem to, ale 4 jest nadal podzielony na 2 części:
plt.imshow(cv2.morphologyEx(im2, cv2.MORPH_CLOSE,
cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))), 'gray')
Prawdopodobnie w tym momencie lepiej jest użyć cv2.findContours
a niektóre heurystyki w celu zlokalizowania każdej cyfry, ale zastanawiałem się:
- powinienem dać się i żądasz ponownego skanowania wszystkich dokumentów w skali szarości?
- Czy istnieją lepsze metody w celu wyodrębnienia i zlokalizowania słabych cyfr?
- Czy znasz jakieś przekształcenie morfologiczne, aby dołączyć do przypadków takich jak "4"?
[aktualizacja]
Czy ponowne skanowanie dokumentów zbyt wymagający? Jeśli to nie jest wielki kłopot wierzę, to lepiej, aby wejść jakości wyższej niż szkolenia i stara się udoskonalić swój model, aby wytrzymać hałaśliwych i nietypowych danych
Odrobina kontekstu: jestem nikt nie pracuje w agencja publiczna w Brazylii. Cena rozwiązań ICR zaczyna się od 6 cyfr, więc nikt nie wie, że jeden facet może napisać rozwiązanie ICR w domu.Jestem wystarczająco naiwny, by uwierzyć, że mogę udowodnić, że się mylą. Te dokumenty PDF znajdowały się na serwerze FTP (około 100K plików) i zostały zeskanowane tylko po to, aby pozbyć się wersji drzewa martwego. Prawdopodobnie uda mi się uzyskać oryginalną formę i samemu przeskanować, ale musiałbym poprosić o oficjalne wsparcie - skoro jest to sektor publiczny, chciałbym, aby ten projekt był jak najdalej pod ziemią. Mam teraz wskaźnik błędu 50%, ale jeśli to podejście jest ślepym zaułkiem, nie ma sensu go ulepszać.
Czy ponowne skanowanie dokumentów jest zbyt wymagające? Jeśli nie jest to wielki problem, uważam, że lepiej jest uzyskać dane wejściowe o wyższej jakości niż trening i próbować udoskonalić model, aby wytrzymać hałaśliwe i nietypowe dane. – DarkCygnus
@GrayCygnus: Musiałbym przekroczyć ocean biurokracji i bezwładności, ale jest to możliwe . Prawdopodobnie sam będę musiał wykonać całą pracę ręczną. –
Poproszę również o zapoznanie się z tym [tutorialem] (http://www.pyimagesearch.com/2017/07/10/using-tesseract-ocr-python/) (z tego samego źródła co ten, który w mojej odpowiedzi na poprzednie pytanie), gdzie przedstawiają Tesseract (opakowanie OCR Engine Googles) jako świetne narzędzie do robienia OCR. Znalazłem także [ten dokument] (http://worldcomp-proceedings.com/proc/p2016/ICA3674.pdf), który wyjaśnia, w jaki sposób poprawić rozpoznawanie znaków za pomocą K-najbliższych sąsiadów z metryką odległości euklidesowej. Powodzenia przemierzając ten ocean :) – DarkCygnus