6

Android でキャプチャした画像からテキストを抽出しようとしています。そのため、カメラにアクセスするためのインテントを作成し、startActivityForResult.

これは私のonActivityResultコードです:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            Bundle extras = data.getExtras();
            Bitmap bitmap = (Bitmap) extras.get("data");
            TextView res = (TextView) findViewById(R.id.hello);
            //imageView.setImageBitmap(imageBitmap);
            //Image image = ImageIO.read(imageFile);
            //BufferedImage buffimg = (BufferedImage) image;
            //BufferedImage img = ImageHelper.convertImageToGrayscale(buffimg);
            //ITesseract instance = new Tesseract();  // JNA Interface Mapping
            //ITesseract instance = new Tesseract1(); // JNA Direct Mapping

            //TessDataManager.initTessTrainedData(context);
   if(isStoragePermissionGranted() == true) {
TessBaseAPI tessBaseAPI = new TessBaseAPI();

String path = Environment.getExternalStorageDirectory() + "/";
//String path = "/mnt/sdcard/";

tessBaseAPI.setDebug(true);
tessBaseAPI.init(path, "eng");


tessBaseAPI.setImage(bitmap);

String text = tessBaseAPI.getUTF8Text();
tessBaseAPI.end();
res.setText(text);
}
        }
        else
        {
            TextView res = (TextView) findViewById(R.id.hello);
            res.setText("Well damn");
        }


    }


}
public  boolean isStoragePermissionGranted() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG,"Permission is granted");
            return true;
        } else {

            Log.v(TAG,"Permission is revoked");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
            return false;
        }
    }
    else { //permission is automatically granted on sdk<23 upon installation
        Log.v(TAG, "Permission is granted");
        return true;
    }


}

私が受け取るエラーは次のとおりです。

java.lang.RuntimeException: Unable to resume activity {com.example.abc.snaptravel/com.example.abc.snaptravel.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data dat=content: (has extras) }} to activity {com.example.abc.snaptravel/com.example.abc.snaptravel.MainActivity}: java.lang.IllegalArgumentException: Data path does not exist!

具体的には:

Data path does not exist

私はこの問題について多くのことを読んで、さまざまな解決策を試しました。"/tessdata/"私もパス名の有無にかかわらず試しました。

何か提案があれば、本当に感謝します。ありがとう!

4

1 に答える 1

1

さて、私はEnvironment.getExternalStorageDirectory()自分のSDカードを指していると思っていましたが、そうではありません。それは私の内部ストレージを指しています。それは私が間違っていたところです。tessdata フォルダーを内部ストレージにコピーしたところ、完全に機能するようになりました。

于 2016-08-14T02:50:36.133 に答える