Я работал над графическим интерфейсом бинго в Java, который в основном отслеживает все ваши доски для бинго для вас.Пока все идет хорошо, но в настоящее время мне или пользователю придется вручную вводить все числа на карточке бинго в текстовый документ.Затем программа обрабатывает его оттуда, читая текстовый документ, вводя числа, выясняя расположение доски и размер на экране, анализируя ввод от пользователя, чтобы убедиться, что ошибки не были допущены, сбрасывает доски по запросу пользователя иЯ даже реализовал команду изменения.Тем не менее, я хочу, чтобы пользователь просто мог сфотографировать каждую доску бинго и поместить изображения в место назначения файла, и это все.Чтобы сделать это, я знал, что мне понадобится какой-нибудь считыватель изображений.Я узнал, что это называется OCR.Я нашел видео из трубки и заставил OCR работать с некоторыми изображениями.Однако я быстро узнал, что он читает только красные символы, а не черные цифры бинго.Таким образом, стек поверх потока, который я прочитал, сказал, чтобы преобразовать в оттенки серого.Я смотрю на Google о том, как это сделать, и я успешно смог преобразовать изображение в оттенки серого, используя Java.Затем, когда я помещаю это новое изображение в OCR, оно все равно не работает, на самом деле оно хуже, поскольку оно ничего не читает из этого конкретного файла.В любом случае, вот мои изображения: одно перед серой шкалой, а другое - преобразованное серое.
https://imgur.com/a/mAIjUu3
Я знаю, что переполнение стека не нравится, когда люди загружают весь код, поэтому я постараюсь опубликовать только соответствующий код OCR.Если вы хотите увидеть код в градациях серого или мой настоящий программный код бинго, дайте мне знать.Тем не менее, я еще не перенес свой код OCR или полутонов в код моей программы бинго, поскольку я все еще на этапе тестирования.Вот код OCR:
Основной класс
package com.chillyfacts.com;
import java.io.PrintWriter;
public class my_main {
public static void main(String[] args) {
String input_file="E:\\testfiles\\bcard.png";
String output_file="E:\\testfiles\\outputOCR";
String tesseract_install_path="E:\\Tesseract-OCR\\tesseract";
String[] command =
{
"cmd",
};
Process p;
try {
p = Runtime.getRuntime().exec(command);
new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
stdin.println("\""+tesseract_install_path+"\" \""+input_file+"\" \""+output_file+"\" -l eng");
stdin.close();
p.waitFor();
//System.out.println();
//System.out.println();
//System.out.println();
//System.out.println();
System.out.println(Read_File.read_a_file(output_file+".txt"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Вот класс SyncPipe:
package com.chillyfacts.com;
import java.io.InputStream;
import java.io.OutputStream;
class SyncPipe implements Runnable
{
public SyncPipe(InputStream istrm, OutputStream ostrm) {
istrm_=istrm;
ostrm_=ostrm;
}
public void run() {
try {
final byte[] buffer=new byte[1024];
for (int length=0;(length=istrm_.read(buffer))!=-1;)
{
ostrm_.write(buffer,0,length);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private final OutputStream ostrm_;
private final InputStream istrm_;
}
Вот класс чтения файла:
package com.chillyfacts.com;
import java.io.BufferedReader;
import java.io.FileReader;
public class Read_File {
public static String read_a_file(String file_name) {
BufferedReader br = null;
String read_string="";
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(file_name));
while ((sCurrentLine = br.readLine()) != null) {
read_string=read_string+sCurrentLine;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return read_string;
}
}
Я новичок в OCR, поэтому, пожалуйста, будьте осторожны со мной.Заранее спасибо.
![enter image description here](https://i.stack.imgur.com/81Gzx.png)