-1

我正在开发一个使用 tesseract android 库函数的应用程序。我成功编译了 tesseract 库并导入到我的工作区。然后我将库引用添加到我的应用程序中。但是我编写的这个方法会导致强制关闭:

 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)?

4

1 回答 1

0

有时,即使将语言文件插入到 sdcard 中,也有可能无法正确检测到它。因此,为了有效地在 sdcard 中建立文件,以下代码可能很有用。

字符串目录= 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 放入文件夹中。

希望这可以解决您的问题。

于 2014-07-21T16:05:42.843 回答