gpt4 book ai didi

android - 目录 : assets/tessdata

转载 作者:搜寻专家 更新时间:2023-11-01 07:48:49 25 4
gpt4 key购买 nike

我已经从 github 下载了一个 OCR 文本识别器。

我的问题是:我想在不在线的情况下启动我的应用程序,但每次我在手机上安装 apk 时,它都会开始下载英语和 tesseract OCR 引擎。我找到了一个在线指南,它说我必须在名为“tessdata”的 Assets 文件夹中创建一个文件夹,并将 eng.traineddata 和 osd.traineddata 放在这个文件夹中。

我已经尝试过了,但是当我第一次安装应用程序时,下载过程仍然开始。我该怎么做才能使这个应用程序完全脱机?

最佳答案

首先,在你的电脑项目目录(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();
}
}

此代码检查您的手机中是否存在目录为 /AndroidOCR/tessdata/eng.traineddata 的文件,如果不存在,则创建一个并将 .traineddata 文件放在这里。为此,您必须在 OnCreate 中创建 AssetManager,这将使您能够访问您在项目中放置在计算机中的 .traineddata 文件。

所以在 MainActivity 的 OnCreate 中:

AssetManager assetManager = getAssets();
TessOCR tess = new TessOCR(assetManager);

此外,为了让您的 Android 项目在 AndroidManifest.xml 文件中将数据写入您的手机,您需要添加许可行:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

这是我个人使用的方法,没有任何错误。如果您有任何问题,请在 google 中搜索答案,如果仍然找不到答案,请发表评论。

关于android - 目录 : assets/tessdata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38347384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com