Я работаю над проектом, в котором я планирую использовать 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);
}
Оба изображения:
Старинное изображение:
Вот что я вернулся из 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
—
Итак, любые предложения о том, как импровизировать чтение цветных изображений. Спасибо.
Является ли входное изображение дано в * этом * разрешение , и * не * более высокий? Тогда это будет сложно. (Меньший текст трудно читать даже во входном изображении сейчас ...) – Marco13
@ Marco13: Это всего лишь тестовое изображение. Ширина: 700 пикселей, Высота: 542 пикселя. Тип: JPEG. Но даже если это правильно, большой текст также не идентифицируется, как видно из вывода. –
Я думаю, что подходы, которые могут быть использованы здесь, также будут зависеть от размера входного изображения. Итак, насколько велика эта картина в случае ** реального ** приложения? Можете ли вы предоставить/добавить изображение с размером изображения, которое вы хотите обработать? – Marco13