2009-12-11 6 views
6

W mojej pracy czasami muszę pobrać wydrukowany kod źródłowy i ręcznie wpisać kod źródłowy w edytorze tekstu. Nie pytaj czemu.Potrzebujesz dobrego OCR do wydrukowania listy kodów źródłowych, wszelkich pomysłów?

Oczywiście wpisanie go zajmuje długi czas i zawsze dodatkowy czas na debugowanie błędów pisowni (oops przegapił tam znak "$").

postanowiłem spróbować rozwiązania OCR, takich jak:

  • Microsoft Document Imaging - ma wbudowany OCR
    • Wynik: Nieodebrane wszystkich wiodących spacje, nieodebranych wszystkie podkreślenia interpretować wielu z interpunkcją niepoprawnie.
    • Wniosek: wolniej niż ręcznie wpisywać kod.
  • Różne Internecie web aplikacje OCR
    • Wynik: podobne lub gorsze niż Microsoft Document Imaging
    • Wniosek: Wolniej niż ręcznie wpisując kod.

Czuję kodu źródłowego byłoby bardzo łatwe do OCR dana czcionka jest sans serif i monospace.

Czy ktoś z was znalazł dobre rozwiązanie OCR, które działa dobrze na kodzie źródłowym?

Może po prostu potrzebuję lepszego rozwiązania OCR (niekoniecznie kodu źródłowego)?

Odpowiedz

5

Z OCR, istnieją obecnie trzy opcje:

  • Abbee FineReader i OminPage. Oba są produktami komercyjnymi, które są prawie takie same, jeśli chodzi o funkcje i wynik OCR. Nie mogę powiedzieć wiele na temat OmniPage, ale FineReader ma wsparcie dla czytania kodu źródłowego (na przykład ma bibliotekę języków Java).
  • Najlepszy silnik OCR OSS to tesseract. Jest o wiele trudniejsze w użyciu, prawdopodobnie będziesz musiał nauczyć go dla swojego języka.

Rzadko robię OCR, ale odkryłem, że wydawanie 150 dolarów na oprogramowanie komercyjne zdecydowanie znosi zmarnowany czas.

+0

Próbowałem tesseract. Nie udało się, gdy po raz pierwszy go pobrałem. Internetowy plik readme określa, że ​​nie zawiera żadnych danych szkoleniowych. Pobrałem dane treningowe z języka angielskiego ze strony internetowej i rozpakowałem je na podreser tessdata. ALE to wciąż narzekał na "nie mógł znaleźć eng.unicharset". Jak ja to robię? –

+2

Zobacz co mam na myśli? Tesseract jest bezpłatny tylko wtedy, gdy twój czas nic nie kosztuje. Ale możesz pisać pytania w grupie użytkowników tesseract. Są przyjazne, a Twój wkład ułatwi następnym osobom ustawienie tej bestii. –

+0

@Aaron Digulla, proszę mi udostępnić kilka bibliotek OCR w zakresie od $ 150 do $ 500, –

1

drukowany tekst vs odręcznie jest zwykle łatwiej OCR, jednak wszystko zależy od źródła obrazu, ja generalnie uważają, że przechwytywania w formacie PNG, ze zmniejszonymi kolorów (skala szarości jest najlepszy) z jakiegoś ręcznego czyszczenia (usunąć zdjęcie hałas spowodowany skanowaniem itp.) działa najlepiej.

Większość OCR ma podobną wydajność i dokładność. OCR z możliwością trenowania/poprawiania będą najlepsze.

1

Ogólnie stwierdziłem, że FineReader daje bardzo dobre wyniki. Zwykle wszystkie produkty mają dostępną wersję próbną. Spróbuj tak dużo, jak możesz.

Teraz, kod źródłowy programu może być trudne:

  • wiodącym spacje: być może kod pocztowy całkiem proces drukarka może pomóc
  • podkreślenia i interpunkcyjne Może dobry produkt może być przeszkoleni do tego
1

to także dobra opcja open source. Ale podobnie jak w przypadku Tesseract, istnieje dość stroma krzywa uczenia się, aby móc ją efektywnie wykorzystywać i integrować.

1

Wypróbuj http://www.free-ocr.com/. Użyłem go do odzyskania kodu źródłowego z grabka ekranu, gdy moje IDE ulega awarii w sesji edytora bez ostrzeżenia. Oczywiście zależy to od czcionki używanej w edytorze (używam Courier New 10pt w Delphi). Próbowałem użyć Dokumentów Google, który będzie OCR obraz podczas przesyłania go - podczas gdy Dokumenty Google są dość dobre na zeskanowanych dokumentach, to niestety marnie na źródła Pascal z jakiegoś powodu.

Przykładem FreeOCR w pracy: obraz wejściowy:

image uploaded

dał tak:

begin 
FileIDToDelete := FolderToClean + 5earchRecord.Name ; 
Inc (TotalFilesFound) ; 
if (DeleteFile (PChar (FileIDToDelete))) then 
begin 
Log5tartupError (FormatEx (‘%s file %s deleted‘, [Annotation, Fi eIDToDelete])) ; 
Inc (TotalFilesDeleted) ; 
end 
else 
begin 
Log5tartupError (FormatEx (‘Error deleting %s file %s‘, [Annotat'on, FileIDToDelete])) ; 
Inc (TotalFilesDeleteErrors) ; 
end ; 
end ; 
FindResult := 5ysUtils.FindNext (5earchRecord) ; 
end ; 

więc zastąpienie wcięcia jest większa część pracy, a następnie zmienia się cały 5 „s na duże litery S. Został również zdezorientowany pionową linią przy znaku 80 kolumn. Na szczęście większość błędów zostanie pobrana przez kompilator (z wyjątkiem błędów wewnątrz cytowanych ciągów znaków).

Szkoda, że ​​FreeOCR nie ma opcji "kodu źródłowego", gdzie biała przestrzeń jest traktowana jako znacząca.

Wskazówka: jeśli źródło zawiera podświetlanie składni, przed przesłaniem obrazu należy go zapisać w skali szarości.

3

Dwie nowe opcje istnieje do dzisiaj (rok po pytano):

1.)

systemu Windows 10 jest wyposażony w silnik OCR firmy Microsoft.

Jest w przestrzeni nazw:

Windows.Media.Ocr.OcrEngine 

https://msdn.microsoft.com/en-us/library/windows/apps/windows.media.ocr

Jest też przykładem na Github:

https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/OCR

trzeba albo VS2015 kompilacji tych rzeczy. Lub jeśli chcesz użyć starszej wersji programu Visual Studio, musisz wywołać go za pośrednictwem tradycyjnej wersji COM, a następnie przeczytaj ten artykuł na Codeproject: http://www.codeproject.com/Articles/262151/Visual-Cplusplus-and-WinRT-Metro-Some-fundamentals

Jakość OCR jest bardzo dobra. Niemniej jednak, jeśli tekst jest zbyt mały, należy go wcześniej wzmocnić. Możesz pobrać każdy język istniejący na świecie za pośrednictwem witryny Windows Update - nawet w przypadku pisma ręcznego!


2.)

Inną opcją jest użycie biblioteki OCR z pakietu Office. Jest to biblioteka DLL COM. Jest on dostępny w pakiecie Office 2003, 2007 i Vista, ale został usunięty w Office 2010.

http://www.codeproject.com/Articles/10130/OCR-with-Microsoft-Office

Wadą jest to, że każda instalacja pakietu Office posiada wsparcie dla kilku języków. Na przykład hiszpański Office instaluje obsługę języka hiszpańskiego, angielskiego, portugalskiego i francuskiego. Ale zauważyłem, że prawie nie robi różnicy, jeśli używasz hiszpańskiego lub angielskiego jako języka OCR do wykrycia hiszpańskiego tekstu.

Po konwersji obrazu na odcienie szarości uzyskuje się lepsze wyniki. Rozpoznanie jest OK, ale mnie to nie zadowoliło. Występuje w przybliżeniu tyle samo błędów, co Tesseract, chociaż Tesseract potrzebuje znacznie więcej przetwarzania obrazu, aby uzyskać te wyniki.

+0

Hej @Elume, możesz rzucić okiem na ten http://stackoverflow.com/questions/38824278/add-new-language-for-ocr-engine – Cloy

Powiązane problemy