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

1

Я использовал этот урок, чтобы сделать некоторые распознавания лиц на картинке. Проблема в том, когда я получаю путь к файлу, который используется на 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";
}

Изображение 174551

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

Теги:
file

3 ответа

2
Лучший ответ

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

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

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

  • 0
    спасибо: D, это работает. Я использую inputStream, чтобы узнать, где находится мой файл и его работа: D, мне жаль беспокоить вас снова, но должен ли я передать код corect здесь в качестве ответа или я просто оставлю его себе в коде?
  • 0
    @Appem: Вы, конечно, можете ответить на свой вопрос, если хотите, включая подробности того, как вы решили проблему. Я рад слышать, что у вас это работает!
0

Так я решил проблему с @CommonWare.

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

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
Uri video = Uri.parse("android.resource://com.test.test/raw/filename");

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

file:///android_asset/filename

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

Обратитесь к этой ссылке:

Необработанный путь к папке?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню