Как я могу получить путь к файлу на сырых ресурсах в Android Studio? - PullRequest
1 голос
/ 09 апреля 2019

Я использовал этот учебник, чтобы сделать некоторые распознавания лиц на картинке. Проблема в том, когда я получаю путь к файлу, который используется на Java

String xmlFile = "E:/OpenCV/facedetect/lbpcascade_frontalface.xml";
CascadeClassifier classifier = new CascadeClassifier(xmlFile);

как я могу перевести на Android Studio. Я пытаюсь поместить мой lbpcascade_frontalface.xml на сырые ресурсы. CascadeClassifier - это класс, предоставляемый библиотекой opencv. Единственная проблема заключается в том, что они загружают только строковый путь (в xmlfile). это мой код.

String pathtoRes = getRawPathAtempt2(context);
CascadeClassifier cascadeClassifier = new CascadeClassifier();
cascadeClassifier.load(pathtoRes);

я перевел на такой метод.

  public String getRawPathAtempt2(Context context) {
    return "android.resource://" + context.getPackageName() + "/raw/" + "lbpcascade_frontalface.xml";
}

enter image description here

я получаю ошибку подтверждения от opencv, которая говорит мне, что файл пуст. Это означает, что я ошибся, когда я использовал путь к файлу в моем методе. Как я могу получить путь к файлу на сырых ресурсах? помогите мне, пожалуйста, я застрял на несколько дней

Ответы [ 3 ]

2 голосов
/ 09 апреля 2019

как я могу получить путь к файлу на сырых ресурсах?

Вы не можете.Там нет пути.Это файл на вашей машине для разработки.Это не файл на устройстве.Вместо этого это запись в файле APK, которая является вашим приложением на устройстве.

Если ваша библиотека поддерживает InputStream вместо пути файловой системы, getResources().openRawResource() на Context для получения InputStream на вашем сырьевом ресурсе.

0 голосов
/ 09 апреля 2019

Вот так я решил проблему с @CommonWare Answer

Я использую поток ввода, чтобы получить файл

is = context.getResources().openRawResource(R.raw.lbpcascade_frontalface);

, поэтому файл будет открыт, и я сделаюукажите на класс File

 File cascadeDir = context.getDir("cascade", Context.MODE_PRIVATE);
 mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml"); 

, а затем я выполню поиск в файле пути, используя getAbsolutePath, как это

 cascadeClassifier.load(mCascadeFile.getAbsolutePath());

, посмотрите мой полный код

try {
        is = context.getResources().openRawResource(R.raw.lbpcascade_frontalface);
        File cascadeDir = context.getDir("cascade", Context.MODE_PRIVATE);
        mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml");

        os = new FileOutputStream(mCascadeFile);

        byte[] buffer = new byte[4096];
        int bytesRead;
        while ((bytesRead = is.read(buffer)) != -1) {
            os.write(buffer, 0, bytesRead);
        }

        is.close();
        os.close();

        cascadeClassifier.load(mCascadeFile.getAbsolutePath());


    } catch (IOException e) {
        Log.i(TAG, "face cascade not found");
    }
0 голосов
/ 09 апреля 2019
Uri video = Uri.parse("android.resource://com.test.test/raw/filename");

С его помощью вы можете получить доступ к файлу в необработанной папке, если вы хотите получить доступ к файлу в папке ресурсов, используйте этот URL ...

file:///android_asset/filename

Убедитесь, что вы не добавили расширение к имени файла. Например. "/ movie" not "/movie.mp4".

Ссылка на эту ссылку:

Необработанный путь к URL-адресу папки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...