Я использовал этот урок, чтобы сделать некоторые распознавания лиц на картинке. Проблема в том, когда я получаю путь к файлу, который используется на 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";
}
я получаю ошибку подтверждения от opencv, которая говорит мне, что файл пуст. Это означает, что я ошибся, когда я использовал путь к файлу в моем методе. Как я могу получить путь к файлу на сырых ресурсах? помогите мне пожалуйста я застрял на несколько дней
Как я могу получить путь к файлу на сырых ресурсах?
Ты не можешь Там нет пути. Это файл на вашей машине для разработки. Это не файл на устройстве. Вместо этого это запись в файле APK, которая является вашим приложением на устройстве.
Если ваша библиотека поддерживает InputStream
вместо пути в файловой системе, getResources().openRawResource()
в Context
чтобы получить InputStream
для вашего необработанного ресурса.
Так я решил проблему с @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");
}
Uri video = Uri.parse("android.resource://com.test.test/raw/filename");
Используя это, вы можете получить доступ к файлу в необработанной папке, если вы хотите получить доступ к файлу в папке ресурсов, используйте этот URL...
file:///android_asset/filename
Убедитесь, что вы не добавляете расширение к имени файла. Например, "/movie", а не "/movie.mp4".
Обратитесь к этой ссылке: