2016-09-28 98 views
12

Zainstalowałem tesseract na moim środowisku Linux.tesseract nie dostał małych etykiet

Działa kiedy wykonać coś podobnego

# tesseract myPic.jpg /output 

Ale mój pic ma kilka małych etykiet i tesseract ich nie zobaczyć.

Czy jest dostępna opcja ustawienia wysokości boiska lub coś w tym stylu?

Przykład etykiet tekstowych:

enter image description here

Z tego pic, tesseract nie rozpoznaje żadnej wartości ...

Ale z tego pic:

enter image description here

Mam następujące wyjście:

J8 

J7A-J7B P7 \ 

2 
40 50 0 180 190 

200 

P1 P2 7 

110 110 
\ l 

Na przykład, w tym przypadku 90 (na górze po lewej) nie jest postrzegane przez tesserakt ...

myślę, że to po prostu opcja zdefiniowania lub somethink tak, nie?

Thx

Odpowiedz

5

W celu uzyskania dokładnych wyników z Tesseract (jak również każdego silnika OCR) trzeba przestrzegać pewnych wytycznych, jak widać w mojej odpowiedzi na ten post: Junk results when using Tesseract OCR and tess-two

Tutaj jest istotą go:

  • Zastosowanie obraz o wysokiej rozdzielczości (w razie potrzeby) 300 DPI jest minimalna

  • Upewnij się, że nie ma cienia lub wygina się w obrazie

  • Jeżeli istnieje jakakolwiek pochylać, trzeba będzie naprawić obraz w kodzie przed OCR

  • używać słownika, aby pomóc uzyskać dobre wyniki

  • Regulacja wielkości tekstowych (12 PT czcionki idealnie)

  • Binarize obraz i wykorzystanie algorytmów przetwarzania usuwa zakłócenia

Zaleca się również, aby spędzić trochę czasu na szkolenie silnika OCR aby otrzymywać lepsze wyniki jak widać w ten link: Training Tesseract

Wziąłem 2 obrazy, które udostępnione i prowadził niektóre przetwarzania obrazu na nich za pomocą LEADTOOLS SDK (zrzeczenie się: jestem pracownikiem tej firmy) i mogłem uzyskać lepsze wyniki niż uzyskiwane z przetworzonymi obrazami, ale ponieważ oryginalne zdjęcia nie są najlepsze - nadal nie było to 100%.Oto kod Kiedyś, aby spróbować rozwiązać obrazy:

//initialize the codecs class 
using (RasterCodecs codecs = new RasterCodecs()) 
{ 
    //load the file 
    using (RasterImage img = codecs.Load(filename)) 
    { 
     //Run the image processing sequence starting by resizing the image 
     double newWidth = (img.Width/(double)img.XResolution) * 300; 
     double newHeight = (img.Height/(double)img.YResolution) * 300; 
     SizeCommand sizeCommand = new SizeCommand((int)newWidth, (int)newHeight, RasterSizeFlags.Resample); 
     sizeCommand.Run(img); 

     //binarize the image 
     AutoBinarizeCommand autoBinarize = new AutoBinarizeCommand(); 
     autoBinarize.Run(img); 

     //change it to 1BPP 
     ColorResolutionCommand colorResolution = new ColorResolutionCommand(); 
     colorResolution.BitsPerPixel = 1; 
     colorResolution.Run(img); 

     //save the image as PNG 
     codecs.Save(img, outputFile, RasterImageFormat.Png, 0); 
    } 
} 

Oto obrazy wyjściowe z tego procesu:

image1 processed image2 processed

+0

Thx za odpowiedź, ale dlaczego nie może rozpoznaj wszystkie etykiety, np. 90 na górze po lewej na drugim obrazie, wydaje się być łatwe do odczytania – Paul

+0

Prawdopodobnie musisz wyszkolić silnik, aby uzyskać lepsze wyniki lub użyć lepszego obrazu początkowego, abyś nie miał interpolować piksele i zmieniać ich rozmiar. – hcham1

+0

Jaka jest najlepsza metoda segmentacji do zastosowania w mojej sprawie? – Paul