我正在开发一个使用tesseract android库函数的应用程序。我成功编译了tesseract库并导入到我的工作区。然后我将库引用添加到我的app.But我写的这个方法导致强制关闭:
public static String BitmapOku (Bitmap image){
Bitmap image2=image.copy(Bitmap.Config.ARGB_8888, true);
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init("/mnt/sdcard/tessdata/eng.traineddata", "eng");
baseApi.setImage(image2);
String recognizedText = baseApi.getUTF8Text();
baseApi.end();
return recognizedText;
我的问题是--->我需要在tesseract android ocr应用程序中考虑哪些问题,我是否必须在我的应用程序中使用leptonica工具进行图像处理功能 - 例如旋转 - (因为我使用的是Opencv 2.4.0)?
答案 0 :(得分:0)
有时,即使语言文件插入SD卡中,也有可能无法正确检测到。因此,为了在SD卡中有效地建立文件,以下代码可能很有用。
String dirc = Environment.getExternalStorageDirectory()。getPath()。toString();
String[] paths = new String[] { dirc,dirc + "/tessdata/" };
for (String path :paths ) {
File dir = new File(path);
if (!dir.exists()) {
if (!dir.mkdirs()) {
System.out.println("Creation of directory on sdcard failed");
} else {
System.out.println("Creation of directory on sdcard successful");
}
}
}
// lang.traineddata file with the app (in assets folder)
// You can get them at:
// http://code.google.com/p/tesseract-ocr/downloads/list
// This area needs work and optimization
if (!(new File(dirc + "/tessdata/" + "eng.traineddata")).exists()) {
try {
AssetManager assetManager = getAssets();
InputStream in = assetManager.open("tessdata/eng.traineddata");
//GZIPInputStream gin = new GZIPInputStream(in);
OutputStream out = new FileOutputStream(dirc + "/tessdata/eng.traineddata");
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
//while ((lenf = gin.read(buff)) > 0) {
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
//gin.close();
out.close();
System.out.println("copied eng.traineddata");;
} catch (IOException e) {
e.printStackTrace();
}
}
这里,语言文件eng.traineddata被添加到项目的assets文件夹中。 在assets文件夹中,创建一个tessdata文件夹并将eng.traineddata放在该文件夹中..
希望这可以解决您的问题。