我正在为 android 编写应用程序,并且正在使用 caffe 库。我的问题是,在开始时我需要初始化 caffe,这是通过将两个文件(网络结构)传递给 caffe 来完成的。问题是我不知道如何在设备上存储额外的文件。我已将模型文件添加到资产中,但我不知道如何使用文件路径读取它。你能告诉我在哪里存储可以使用文件路径访问的这些文件吗?
感谢您的任何想法。
我正在为 android 编写应用程序,并且正在使用 caffe 库。我的问题是,在开始时我需要初始化 caffe,这是通过将两个文件(网络结构)传递给 caffe 来完成的。问题是我不知道如何在设备上存储额外的文件。我已将模型文件添加到资产中,但我不知道如何使用文件路径读取它。你能告诉我在哪里存储可以使用文件路径访问的这些文件吗?
感谢您的任何想法。
这应该这样做。只需将这些文件从资产文件夹复制到数据目录即可。如果您已经有这些文件,只需加载它们。
String toPath = "/data/data/" + getPackageName(); // Your application path
private static boolean copyAssetFolder(AssetManager assetManager,
String fromAssetPath, String toPath) {
try {
String[] files = assetManager.list(fromAssetPath);
new File(toPath).mkdirs();
boolean res = true;
for (String file : files)
if (file.contains("."))
res &= copyAsset(assetManager,
fromAssetPath + "/" + file,
toPath + "/" + file);
else
res &= copyAssetFolder(assetManager,
fromAssetPath + "/" + file,
toPath + "/" + file);
return res;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
private static boolean copyAsset(AssetManager assetManager,
String fromAssetPath, String toPath) {
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(fromAssetPath);
new File(toPath).createNewFile();
out = new FileOutputStream(toPath);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
return true;
} catch(Exception e) {
e.printStackTrace();
return false;
}
}
private static void copyFile(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
}
资产仅使用特殊方法打包和访问,因此我通过访问文件解决了问题,然后将其复制到我传递给本机方法的新位置。
将它们作为资产放入您的项目中,然后在应用程序启动时,您可以从资产中读取它们并将它们复制到应用程序的私有存储区域中。您可以使用Context.getFilesDir()
.
从那里,您将能够将文件传递给 Caffe。