1
Voici ce que je fais actuellement:tess-deux n'initialiser, même avec des autorisations correctes
- tess-deux est mis en place dans mon projet Android
- J'ai les permissions spécifiées dans le AndroidManifest.xml de mon application principale (pas le tess-two AndroidManifest.xml):
Je vérifie aussi pour les autorisations explicitement dans mon code:
int readPermission = ActivityCompat.checkSelfPermission(this, READ_EXTERNAL_STORAGE); int writePermission = ActivityCompat.checkSelfPermission(this, WRITE_EXTERNAL_STORAGE); // Check we have both read and write permissions if (readPermission != PackageManager.PERMISSION_GRANTED || writePermission != PackageManager.PERMISSION_GRANTED) { // We don't have permission so prompt the user ActivityCompat.requestPermissions( this, new String[] {READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE}, REQUEST_EXTERNAL_STORAGE ); } else { Log.d(TAG, "Read and write external permissions granted"); initTess(); }
Essayez d'initialiser le TessBaseAPI:
private void initTess() { // Check we have the eng.traineddata file in the correct place mTessDataPath = getFilesDir() + "/tesseract/"; checkTessFile(new File(mTessDataPath + "tessdata/")); // Initialise TessBaseAPI mTess = new TessBaseAPI(); mTess.init(mTessDataPath, "eng"); } private void checkTessFile(File dir) { // Check if directory already exists if (dir.exists()) { // Check if file already exists String dataFilePath = mTessDataPath + "tessdata/eng.traineddata"; File datafile = new File(dataFilePath); if (!datafile.exists()) { // If file doesn't exist, copy it over from assets folder copyTessFiles(); } } else { if (dir.mkdirs()) { // If directory doesn't exist, but we can create it, copy file from assets folder copyTessFiles(); } } } private void copyTessFiles() { try { // Location we want the file to be at String filepath = mTessDataPath + "tessdata/eng.traineddata"; // Get access to AssetManager AssetManager assetManager = getAssets(); // Open byte streams for reading/writing InputStream instream = assetManager.open("tessdata/eng.traineddata"); OutputStream outstream = new FileOutputStream(filepath); // Copy the file to the location specified by filepath byte[] buffer = new byte[1024]; int read; while ((read = instream.read(buffer)) != -1) { outstream.write(buffer, 0, read); } outstream.flush(); outstream.close(); instream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case REQUEST_EXTERNAL_STORAGE: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Initialise Tesseract API initTess(); } return; } } }
Quand je lance l'application , Je reçois l'erreur suivante dans mon journaux:
E/Tesseract(native): Could not initialize Tesseract API with language=eng!
Je ne sais pas où aller d'ici, de sorte que toute aide ou conseil serait grandement apprécié, merci :)
Où est votre méthode onRequestPermissionsResult où vous gérez l'autorisation? –
J'ai modifié la question pour l'afficher et ajouté l'appel à la méthode initTess() si nous avons déjà les deux permissions (ce que je fais). – TinyDancer