2016-02-10 1 views
1

Я работаю над проектом, в котором я планирую использовать tesseract OCR, чтобы извлечь текст с данного изображения. Когда я предоставляю монохромные изображения, Tesseract не имеет большой проблемы.Java: преобразование цветного изображения в монохромное и сохранить текст читаемым

Цветные изображения, однако, совершенно разные сценарии. Из этого я получаю в основном искаженный текст. Поэтому я подумал о том, чтобы преобразовать изображение в монохромное, а затем передать его Tesseract. К сожалению, мои усилия по преобразованию не дали удовлетворительных результатов.

Образ преобразуется в монохромный, но текст как-то напортачивается (не может думать о подходящем слове). Даже я не смог прочитать текст правильно, как я могу ожидать от программы?

Итак, главная проблема, с которой я столкнулся, - как преобразовать цветное изображение в монохромное на Java, где текст не завинчен (снова).

Наш проект работает на сервере Linux, поэтому, если есть какие-либо скрипты или некоторые другие программы, которые я могу вызывать из Java и получить результат обратно, также все в порядке. Но я предпочел бы на Java.

Вот код, у меня есть:

@Override 
    public void testOcr() { 
     ITesseract instance = new Tesseract(); 
     File imageFile = new File("/home/username/other.jpg"); 
BufferedImage img = null; 
      img = ImageIO.read(imageFile); 

      BufferedImage blackNWhite = new BufferedImage(img.getWidth(),img.getHeight(),BufferedImage.TYPE_BYTE_BINARY); 
      Graphics2D graphics = blackNWhite.createGraphics(); 
      graphics.drawImage(img, 0, 0, null); 
      File outputfile = new File("/home/username/other1.jpg"); 
      ImageIO.write(blackNWhite, "jpg", outputfile); 
    instance.setDatapath("/usr/share/tesseract-ocr/"); 
      // ISO 693-3 standard 
      instance.setLanguage("deu"); 
      String result = instance.doOCR(outputfile); 
      System.out.println(result); 
} 

Оба изображения:

enter image description here

Старинное изображение:

enter image description here

Вот что я вернулся из Tesseract выше:

90/(/a —’Ä(l/énÄ ' ß(l(1(»m]«u 
„„ „‚„„„ „ „„ „„ „‚„„„ „„ n 00 w—v „„„ s 3 na 
‘„‘‚';‚ J‘;;Mt:.‘ *‘ “ ‘„*;;131:„'r„‘:1 „ . A „„ „„ _ «3 uu 
„„ „.„„„\ „„ „„ uu „„„„\„..\ ; 5 oo “ ‘ " "' ‘* ‘=* —“ "° 
„...„.„„. „‘ ‘„‘ „„ „„-„..„‚„„‚» <b(m 
„..„„„„.‘ \ „„-„‚„„„„„k („m 
„„„\„„„„ muu ‚„„„„„‚ s»’ou 
m M 6«»//% 
' ‚ , \ ‚“ _ „„ sKUD 
:> 3 — „».>' ' z«„„«.„«„„„ <3(m 
' ‘)\‚ia "‚ “ l’ ‚„„„.„„\_ „rm 
.„.‚\ ‚ . \. . 
‘. ‚„.‚.A _ \ „ „ "*°‘Ä‘ „„w„„m„»v.. mm 
; ‚ \ :« ‘ 4 ‚ _. 
»"9 » @ We have Spema\smr 
' Lunch & D\nner ew3rydav 
' ßm/n'/ ‚0(*JJP1/' 
V\S\\ Cur '<’e3\au\an\ ’ 
?“"‘:‘“1“1C1„ 55"" ::‘‚:J:'.J‘.‘t‘:‘;1f:.1?t„ ““ Fur6'2a:'z:‘e ' 
..„„.‘„‚„.„„‘„..„ ‘ s7uu x.„„.„„..„.‘<h„.„„„ ;7uu Eng\gnCp - 
5::r‘Ja‘.‘7r“x:1f‘."‘3:l'_„„ ““ ‘°°° @ us ‘ 
„.„..„‚„ „„„‚„‚ „ uu m.„„„< „„„„ sB 00 \23‚g5f„ 78% .L 
— 

Итак, любые предложения о том, как импровизировать чтение цветных изображений. Спасибо.

+0

Является ли входное изображение дано в * этом * разрешение , и * не * более высокий? Тогда это будет сложно. (Меньший текст трудно читать даже во входном изображении сейчас ...) – Marco13

+0

@ Marco13: Это всего лишь тестовое изображение. Ширина: 700 пикселей, Высота: 542 пикселя. Тип: JPEG. Но даже если это правильно, большой текст также не идентифицируется, как видно из вывода. –

+0

Я думаю, что подходы, которые могут быть использованы здесь, также будут зависеть от размера входного изображения. Итак, насколько велика эта картина в случае ** реального ** приложения? Можете ли вы предоставить/добавить изображение с размером изображения, которое вы хотите обработать? – Marco13

ответ

0

Вы можете использовать OpenCV для бинаризации. Но; teserract по-прежнему нуждается в изменении размера, если вы хотите получить правильный результат для этого примера.

Этот заказ должен работать нормально.

  1. операции Дополнительный процесс изображения (удаление шумов, устранение перекоса, нечеткие, растениеводство, граница)
  2. Изменение размера изображения
  3. Binarize изображение
  4. OCR
+0

Почему требуется изменить размер, я не понимаю эту часть. Не следует ли Tesseract сканировать пиксель изображения по пикселям и определять символы в этих пикселях? Можете ли вы сказать мне, как я могу как-то сгруппировать задания 1 и 3. –

+0

1) Вы можете использовать метод порогового значения OpenCV для бинаризации. ** Порог OTSU ** может быть хорошим выбором для бинаризации. Вы можете использовать OpenCV в Java. 2) Для этой части нет определенного решения. Вам нужно попробовать разные методы и посмотреть, какие методы работают для вас. 3) Teserract работает лучше всего, если размер шрифта составляет около 12 пт. Если текст меньше 12 пт, увеличение может повысить производительность. – bodoroman