2015-02-08 11 views
5

Próbuję opracować aplikację Windows Phone 8.1, ale muszę rozpoznać kilka liczb z różnych wyświetlaczy.Czy ktoś zna jakieś API do wyświetlania OCR 7-segmentowego dla Windows Phone?

enter image description here

enter image description here

enter image description here

ja następującym przykładem:

http://bsubramanyamraju.blogspot.com/2014/08/windowsphone-81-optical-character.html

To jest przy użyciu Microsoft OCR Runtime Library:

https://www.nuget.org/packages/Microsoft.Windows.Ocr/

Jednak nie działa, gdy próbuję rozpoznać te zdjęcia. Nawet znalazłam tę witrynę:

https://www.unix-ag.uni-kl.de/~auerswal/ssocr/

Czy ktoś ma zalecenie? Lub Czy ktoś zna jakiś związany z nim kod?

Dziękuję za twoją godną wiedzę.

Odpowiedz

10

Chciałbym, aby odpowiedź na twoje pytanie brzmiała: "Jasne, tutaj jest" z linkiem do czarnej skrzynki - wszystko, co jest narzędziem OCR, ale jest kilka aspektów, które najlepiej rozpatrzyć osobno.

Po pierwsze, niektóre prace nad wstępnym przetwarzaniem obrazu ZANIM nawet rozważasz jakiekolwiek OCR. Twoje próbki obrazów są bardzo drastycznie różne i obejmują pełen zakres problemów.

PRÓBKA 1 ma niski kontrast, więc gdy zostanie zesynchronizowany z czarno-białą warstwą, którą większość OCR będzie wykonywać wewnętrznie na pewnym etapie, nie będzie żadnych znaków do przetworzenia. Wygląda na to po binaryzacji: enter image description here

Zobacz ten post na blogu OCR, aby uzyskać dodatkowe informacje na temat wstępnego przetwarzania obrazu: http://www.ocr-it.com/guide-to-better-mobile-images-from-cell-phone-camera-for-higher-quality-ocr.

Po drugie, obraz nie zawiera informacji o rozdzielczości w nagłówku, które są używane przez niektóre technologie OCR do określenia odpowiedniego skalowania obrazu. Bez informacji w nagłówku niektóre programy OCR mogą ustawić domyślną rozdzielczość, która może, ale nie musi pasować do obrazu, wpływając w ten sposób na wynik OCR. To NIE jest krytyczne, ale preferowane, jeśli można to zaimplementować w momencie tworzenia obrazu.

PRÓBKA 2 ma wystarczający kontrast, a dostosowawcza notarialność zwraca czytelny obraz. Brakuje również wartości rozdzielczości dpi w nagłówku. enter image description here

PRZYKŁAD 3 ma bardzo wyraźny kontrast, ale nie ma rozdzielczości dpi w nagłówku.

Po uzyskaniu obrazów zoptymalizowanych do przetwarzania OCR, kolejnym krokiem jest spojrzenie na technologie OCR.

NIE testowałem tego, o czym już wspomniałeś, zakładając, że masz poprawną implementację, a mimo to nie osiągnąłeś żadnego sukcesu. Przetestowałem inne narzędzia OCR, z których korzystałem w przeszłości.

Ogólnie rzecz biorąc, nie ma 7-segmentowych OCR znanych mi.Jednak udało mi się przystosować inne ogólne narzędzie OCR do tego specjalistycznego zadania. Każdy OCR, który wypróbowałem "out-of-box" lub z ustawieniami domyślnymi, nie jest w stanie obsłużyć tego rozpoznawania. Jest to logiczne i oczekiwane. Czemu? Ponieważ większość ogólnych OCR jest napisanych, aby rozpoznawać nierozłączny wzór pikseli dla każdej postaci. Jest to związane z zasadą "separacji znaków" używaną do rozdzielania słów na oddzielne znaki. Innymi słowy, wewnętrzne algorytmy OCR szukają połączonych kresek, które składają się na poszczególne znaki. Bardziej zaawansowane komercyjne rozpoznawanie tekstu (OCR) pozwala na pewne przerwy w wzorcach pikseli, ale oczekuje się, że będą minimalne lub żadne, takie jak błędy w druku lub skanie, co może skutkować brakującymi elementami.

7-segmentowy wyświetlacz z natury będzie miał wiele przerw w każdym znaku, co jest sprzeczne z zasadą separacji znaków.

Bardziej wydajne technologie OCR mają a) większą tolerancję na przerwy w pikselach i/lub b) mają specjalne ustawienia do obsługi tych przypadków.

Będę przeprowadzał dalsze testy z wykorzystaniem internetowej platformy OCR-IT OCR API, która jest mi dobrze znana. Pracowałem jako programista w zakresie funkcji OCR. Używam go również szeroko w moich własnych aplikacjach na iOS i Androida. OCR-IT API jest oparty na silnym komercyjnym silniku OCR, więc ma dobrą tolerancję na niedoskonałości charakteru, a także pewne kontrole, które pomagają w tym przypadku.

PRÓBKA 3. Jest to najłatwiejsza do przetestowania próbka, więc najpierw ją przetestowałem. Korzystanie z OCR-IT API, a składając wniosek z ustawieniami domyślnymi, prosząc o wyjście do formatu TXT, mam następujące: enter image description here

Wydaje się, że OCR jest) segmentacji znaków na dwie oddzielne linie, oraz b) próbuje odczytywanie wynikowych wzorców jak najbliżej ważnych znaków.

enter image description here

podstawie tej szybkiej analizy, dokonując jednego korekty ustawienia OCR wyników w następującym ujęciu:

enter image description here

ustawienie, które dokonały znacznych różnic w wyniku OCR jest przejście z domyślnego druku wpisz do "DotMatrix", który jest w środku całego ustawienia API OCR-IT XML:

<Job> 
 
<InputURL>http://i.stack.imgur.com/wOtFx.jpg</InputURL> 
 
    <CleanupSettings> 
 
     <Deskew>false</Deskew> 
 
     <RemoveGarbage>false</RemoveGarbage> 
 
     <RemoveTexture>false</RemoveTexture> 
 
     <RotationType>NoRotation</RotationType> 
 
    </CleanupSettings> 
 
    <OCRSettings> 
 
     <PrintType>DotMatrix</PrintType> 
 
     <OCRLanguage>English</OCRLanguage> 
 
     <SpeedOCR>false</SpeedOCR> 
 
     <AnalysisMode>MixedDocument</AnalysisMode> 
 
     <LookForBarcodes>false</LookForBarcodes> 
 
    </OCRSettings> 
 
    <OutputSettings> 
 
     <ExportFormat>Text</ExportFormat> 
 
    </OutputSettings> 
 
</Job>

Zastosowanie alfanumerycznych rodzaju druku włączony niezbędne algorytmy w celu zwiększenia tolerancji na przerwy w konstrukcji znaku, który powszechnie występuje w przyrodzie drukarek igłowych drukuje igłowych. Alternatywnie można użyć typu "Maszyna do pisania", ponieważ znaki pisane na maszynie są również oczekiwane w czcionkach pisanych na maszynie, dzięki czemu są automatycznie obsługiwane przez OCR.

Nie może być jeszcze jedna zmiana w ustawieniu API do uruchomienia OCR za pomocą „Cyfry” zestawu znaków (język), skutecznie eliminując jakąkolwiek możliwość MIS-czytaniu 1 jako I, itp

SAMPLE 2. W tym próbka, luki w strukturze każdej postaci są znacznie szersze. Nawet standardowe algorytmy do obsługi typów druku DotMatrix lub Typerwriter nie mogą pomieścić tych szerokich szczelin. Użycie wszystkich możliwych odmian ustawień zwróciło coś takiego: enter image description here

Wydaje się, że problemem jest segmentacja znaków. Jednym z rozwiązań technicznych jest wstępne przetwarzanie obrazu. Prosty algorytm można zaimplementować, aby wypełnić luki między każdym segmentem znaku 7-segmentowego.To nie musi być bardzo precyzyjny, coś takiego:

enter image description here

Ale to wystarczy, aby stworzyć doskonały wynik OCR.

enter image description here

Ponieważ może to być nieznana z wyprzedzeniem, co 7-segmentowy wyświetlacz LCD wymagać będzie wypełniona w szczelinach, a które nie, polecam zastosowanie tego algorytmu do wszystkich obrazów LCD 7-segmentowy, z małym lub duże luki. Ograniczałbym wielkość przerwy do szerokości nie większej niż szerokość segmentu. Biorąc pod uwagę, że te ekrany występują w różnych kolorach tła i segmentu, ten algorytm przetwarzania wstępnego może być znacznie uproszczony, jeśli jest wykonywany na binarizowanym (czarnym obrazie & biały).

Ogólnie rzecz biorąc, to zadanie jest możliwe przy OCR i niemal gotowej do użycia funkcji, zakładając, że wykonywane jest wstępne przetwarzanie obrazu. Ogólnie rzecz biorąc, uważam, że wstępne przetwarzanie obrazu jest wymagane w każdym projekcie związanym z OCR, a konkretnie w tym projekcie.

Jeśli masz dodatkowe pytania dotyczące wstępnego przetwarzania obrazu lub OCR, proszę o kontakt.

Powiązane problemy