0

Android用のOCRアプリを構築しており、tesseract ocrエンジンを使用しています。どういうわけか、写真でエンジンを使用するたびに、空のテキストが返されます。これは私のコードです:

public String detectText(Bitmap bitmap) {
    TessBaseAPI tessBaseAPI = new TessBaseAPI();
    String mDataDir = setTessData();
    tessBaseAPI.setDebug(true);
    tessBaseAPI.init(mDataDir + File.separator, "eng");
    tessBaseAPI.setImage(bitmap);
    tessBaseAPI.setPageSegMode(TessBaseAPI.OEM_TESSERACT_ONLY);
    String text = tessBaseAPI.getUTF8Text();

    tessBaseAPI.end();

    return text;
}

private String setTessData(){
    String mDataDir = this.getExternalFilesDir("data").getAbsolutePath();
    String mTrainedDataPath = mDataDir + File.separator + "tessdata";
    String mLang = "eng";
    // Checking if language file already exist inside data folder
    File dir = new File(mTrainedDataPath);
    if (!dir.exists()) {
        if (!dir.mkdirs()) {
            //showDialogFragment(SD_ERR_DIALOG, "sd_err_dialog");
        } else {
        }
    }

    if (!(new File(mTrainedDataPath + File.separator + mLang + ".traineddata")).exists()) {

        // If English or Hebrew, we just copy the file from assets
        if (mLang.equals("eng") || mLang.equals("heb")){
            try {
                AssetManager assetManager = context.getAssets();
                InputStream in = assetManager.open(mLang + ".traineddata");
                OutputStream out = new FileOutputStream(mTrainedDataPath + File.separator + mLang + ".traineddata");
                copyFile(in, out);
                //Toast.makeText(context, getString(R.string.selected_language) + " " + mLangArray[mLangID], Toast.LENGTH_SHORT).show();
                //Log.v(TAG, "Copied " + mLang + " traineddata");
            } catch (IOException e) {
                //showDialogFragment(SD_ERR_DIALOG, "sd_err_dialog");
            }
        }

        else{

            // Checking if Network is available
            if (!isNetworkAvailable(this)){
                //showDialogFragment(NETWORK_ERR_DIALOG, "network_err_dialog");
            }
            else {
                // Shows a dialog with File dimension. When user click on OK download starts. If he press Cancel revert to english language (like NETWORK ERROR)
                //showDialogFragment(CONTINUE_DIALOG, "continue_dialog");
            }
        }
    }
    else {
        //Toast.makeText(mThis, getString(R.string.selected_language) + " " + mLangArray[mLangID], Toast.LENGTH_SHORT).show();
    }
    return mDataDir;
}

何度もデバッグしましたが、ビットマップは detectText メソッドに正しく転送されています。言語データ ファイル (tessdata) が電話に存在し、それらへのパスも正しい。

ここで何が問題なのか誰か知っていますか?

4

1 に答える 1