2016-09-28 4 views
12

Я установил tesseract в своей среде Linux.tesseract не получил маленькие этикетки

Это работает, когда я исполняю что-то вроде

# tesseract myPic.jpg /output 

Но мой рис имеет некоторые маленькие этикетки и тессеракт их не видел.

Возможно ли установить настройку или что-то в этом роде?

Пример текстовых меток:

enter image description here

С этой картинкой, тессеракт не признает никакого значения ...

Но с этой картинкой:

enter image description here

У меня есть следующий выход:

J8 

J7A-J7B P7 \ 

2 
40 50 0 180 190 

200 

P1 P2 7 

110 110 
\ l 

К примеру, в этом случае, 90 (на верхнем левом углу) не видел тессеракта ...

Я думаю, что это просто возможность определить или somethink как это, нет?

Thx

ответ

5

Для того, чтобы получить точные результаты от Tesseract (а также любого двигателя OCR), вы должны следовать некоторые рекомендации, как можно видеть в моем ответе на этот пост: Junk results when using Tesseract OCR and tess-two

Здесь это суть его:

  • Используйте изображение высокого разрешения (при необходимости) 300 DPI минимально

  • Убедитесь, что нет никаких теней или изгибается в изображении

  • Если есть перекос, вам нужно будет фиксировать изображение в коде до OCr

  • Используйте словарь, чтобы помочь получить хорошие результаты

  • Регулировка размера текста (12 пт шрифт идеально)

  • Binarize изображение и использовать алгоритмы обработки изображения для удаления шума

Также рекомендуется, чтобы провести некоторое время на обучение двигатель OCR, чтобы получить лучшие результаты, как показано в этой ссылке: Training Tesseract

Я взял 2 изображения, которые совместно и провели некоторые обработки изображений на них с помощью LEADTOOLS SDK (отказ от ответственности: я являюсь сотрудником этой компании) и смог получить лучшие результаты, чем вы получали с обработанными изображениями, но поскольку исходные изображения не самые большие - он все еще не был на 100%.Вот код, который я использовал, чтобы попытаться исправить изображения:

//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); 
    } 
} 

Вот вывод изображения из этого процесса:

image1 processed image2 processed

+0

Thx за ответ, но почему она не может узнайте все метки, 90 в левом верхнем углу на втором изображении, например, легко читается. – Paul

+0

Вам, скорее всего, потребуется обучить двигатель, чтобы получить лучшие результаты или использовать лучший стартовый образ, чтобы у вас не было для интерполяции пикселей и изменения их размера. – hcham1

+0

Каков наилучший метод сегментации для моего случая? – Paul