Я делаю приложение на Android Studio с Tesseract OCR. Я сделал код, который должен распознавать текст на изображениях, сделанных камерой телефона. Проблема: функция tesseract getUTF8Text() не дает результата AT ALL (null, несмотря на то, что изображение имеет текст). Программа не дает никаких ошибок.Tesseract не дает результатов распознавания (Android studio, Java)
Я задавался вопросом о возможных проблемах: 1. Может быть, я интегрировал tesseract в свой проект не правильно? (Компилятор не обнаруживает проблем при использовании классов tesseract в коде). 2. Может быть проблема с кодом? (плохой тренированный путь)?
Основной класс: Код:
private TessOCR Tess;
//after taking picture I call:
PictureCallback pictureCallback = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
String result = Tess.getOCRResult(bitmap);
if (result != null) Log.i(TAG, result);
else Log.i(TAG, "NO RESULT");
}
};
TessOCR класс для тессеракт traineddata файла нахождения или добавления и распознавания текста (Конструктор только для поиска traineddata файла):
public class TessOCR {
public static final String PACKAGE_NAME = "com.example.dainius.ocr";
public static final String DATA_PATH = Environment
.getExternalStorageDirectory().toString() + "/AndroidOCR/";
public static final String lang = "eng";
private static final String TAG = "OCR";
private TessBaseAPI mTess;
public TessOCR(AssetManager assetManager) {
mTess = new TessBaseAPI();
String[] paths = new String[] { DATA_PATH, DATA_PATH + "tessdata/" };
for (String path : paths) {
File dir = new File(path);
if (!dir.exists()) {
if (!dir.mkdirs()) {
Log.v(TAG, "ERROR: Creation of directory " + path + " on sdcard failed");
return;
} else {
Log.v(TAG, "Created directory " + path + " on sdcard");
}
}
}
if (!(new File(DATA_PATH + "tessdata/" + lang + ".traineddata")).exists()) {
try {
InputStream in = assetManager.open("tessdata/" + lang + ".traineddata");
OutputStream out = new FileOutputStream(DATA_PATH
+ "tessdata/" + lang + ".traineddata");
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
Log.v(TAG, "Copied " + lang + " traineddata");
} catch (IOException e) {
Log.e(TAG, "Was unable to copy " + lang + " traineddata " + e.toString());
}
}
mTess.setDebug(true);
mTess.init(DATA_PATH, lang);
}
public String getOCRResult(Bitmap bitmap) {
mTess.setImage(bitmap);
String result = mTess.getUTF8Text();
return result;
}
public void onDestroy() {
if (mTess != null)
mTess.end();
}
- Если это проблема вызвана плохой интеграцией с tesseract, пожалуйста, разместите соответствующий учебник о том, как его интегрировать, потому что каждый учебник в Интернете отличается друг от друга, трудно отказаться и как правильно это сделать.
Спасибо за ваш ответ, Престон. Было несколько проблем с тем, как я интегрировал tesseract в свой проект, поэтому я реинтегрировал его другим учебником. Тем не менее, моя проблема не была решена, поэтому, как я это сделал, я объяснил в своем ответе на мой вопрос. Я довольно новичок в студии Android (но не очень-то новичок в программировании), и использование его с tesseract кажется для меня головной болью, поэтому спасибо за ваш ответ, это действительно расширило мой взгляд на этот инструмент. –