Во-первых, в каталоге проектов на компьютере (YourProjectDirectory\app\src\main
) создайте папку assets
, в этой папке создайте другую папку tessdata
. В папке tessdata поместите ваши файлы .traineddata, они будут переданы в вашем телефоне при запуске вашего проекта. Вы можете скачать файлы .traineddata для своего языка HERE.
Для передачи .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 = "TESSERACT";
private AssetManager assetManager;
private TessBaseAPI mTess;
public TessOCR(AssetManager assetManager) {
Log.i(TAG, DATA_PATH);
this.assetManager = assetManager;
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(new File(DATA_PATH + "tessdata/", lang + ".traineddata"));
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) != -1) {
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 = new TessBaseAPI();
mTess.setDebug(true);
mTess.init(DATA_PATH, lang);
}
public String getResults(Bitmap bitmap)
{
mTess.setImage(bitmap);
String result = mTess.getUTF8Text();
return result;
}
public void onDestroy() {
if (mTess != null)
mTess.end();
}
}
Этот код проверяет, существует ли в телефоне файл с каталогами , и если нет, создает один и помещает .traineddata файл здесь. Для этого в вашем OnCreate вам нужно будет создать AssetManager
, что позволит вам получить доступ к этому файлу .traineddata, который вы разместили на своем компьютере в своем проекте.
Так что в вашем OnCreate в MainActivity:
AssetManager assetManager = getAssets();
TessOCR tess = new TessOCR(assetManager);
Кроме того, чтобы ваши данные Android проекта записи в телефон в AndroidManifest.xml
файл, который нужно добавить permision строку:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Это метод, который я использую лично, и он работает без ошибок. Если у вас есть, выполните поиск в Google для ответов и если вы все еще не можете найти ответ, опубликуйте в комментариях.
Это то же самое для osd.traineddata (механизм распознавания текста)? – Mirco
Должно быть, я думаю. Просто попробуйте 'public static final String lang =" eng ";' change change with "osd", затем он должен поместить его в тот же каталог. Мне на самом деле никогда не требовалось osd, и tesseract не пытались загрузить его для меня, поэтому я не могу быть на 100% уверенным. Если вам нужно проверить и загрузить оба этих файла в телефоне, просто повторите функцию конструктора TessOCR два раза с разными именами .traineddata (lang variables). –
Я использовал ваш код, и он работает ... более или менее: он создает папку в памяти телефона, но он продолжает просить меня загрузить этот файл, и если я отменим строки кода, в которых задается загрузка, он показывает диалоговое окно с сообщением о том, что двигатель инициализируется ... и если я удалю эту часть, у меня есть только черный экран. – Mirco