java - 如何使用项目文件中的文件?

标签 java android

我在 Android studio 中使用 OpenCV 制作了一个对象检测应用程序。我使用 yolo 进行对象检测。我从手机内存中获取必要的 yolo 文件。

String tinyCfg =  Environment.getExternalStorageDirectory() + "/dnns/yolov3-tiny.cfg";
String tinyWeights = Environment.getExternalStorageDirectory() + "/dnns/yolov3-tiny.weights";
tinyYolo = Dnn.readNetFromDarknet(tinyCfg, tinyWeights);

我想将这些文件传输到应用程序文件并从那里使用它们。我正在使用此代码。

String tinyCfg = "dnns/yolov3-tiny.cfg";
String tinyWeights = "dnns/yolov3-tiny.weights";
tinyYolo = Dnn.readNetFromDarknet(tinyCfg, tinyWeights);

enter image description here

但我收到此错误

E/cv::error(): OpenCV(3.4.5) Error: Parsing error (Failed to parse NetParameter file: dnns/yolov3-tiny.cfg) in cv::dnn::experimental_dnn_34_v11::Net cv::dnn::experimental_dnn_34_v11::readNetFromDarknet(const cv::String&, const cv::String&), file /build/3_4_pack-android/opencv/modules/dnn/src/darknet/darknet_importer.cpp, line 207
E/org.opencv.dnn: dnn::readNetFromDarknet_10() caught cv::Exception: OpenCV(3.4.5) /build/3_4_pack-android/opencv/modules/dnn/src/darknet/darknet_importer.cpp:207: error: (-212:Parsing error) Failed to parse NetParameter file: dnns/yolov3-tiny.cfg in function 'cv::dnn::experimental_dnn_34_v11::Net cv::dnn::experimental_dnn_34_v11::readNetFromDarknet(const cv::String&, const cv::String&)'
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.vision, PID: 26157
    CvException [org.opencv.core.CvException: cv::Exception: OpenCV(3.4.5) /build/3_4_pack-android/opencv/modules/dnn/src/darknet/darknet_importer.cpp:207: error: (-212:Parsing error) Failed to parse NetParameter file: dnns/yolov3-tiny.cfg in function 'cv::dnn::experimental_dnn_34_v11::Net cv::dnn::experimental_dnn_34_v11::readNetFromDarknet(const cv::String&, const cv::String&)']

最佳答案

如果您想将文件直接放入应用包中,则应将它们放入 assetsraw 资源文件夹中(here 是一个用于比较的问题) 。 然后您可以通过 AssetManager 访问它们或Resources.openRawResource()或使用适当的 Uri。

我不知道readNetFromDarknet是否可以接受InputStream

  • 如果为 true,您可以使用 AssetManager.open("dnns/yolov3-tiny.cfg")Resources.openRawResource(your_resource_id) 获取流。

  • 如果没有,如果它接受 Uri 作为输入,您可以使用 file:///android_asset/dnns/yolov3-tiny.cfgandroid.resource://[package]/[res type]/[res name] (基于 this )来查找文件。

  • 如果不是这些,您可以将它们复制到您的应用文件目录,然后提供函数的路径。

如果您不知道如何将文件放入 Assets 文件夹中,请检查 this .

关于java - 如何使用项目文件中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61545861/

相关文章:

java - 如何在点击 Android 应用程序中的任何按钮时禁用音频?

Android:修改另一个应用的SharedPreferences

java - 使用 Camel 在运行时配置数据源

java - 尽管有错误,你可以强制编译吗

java reader 以 null 结尾字符串

java - Netbeans 8.0.2 Clean and Build then Run 会导致运行旧代码

java - 对 glGetString() 的静态调用在 Android 5.0 中返回 null

java - 关于 rxjava 请求 url

android - 启用 wi-fi 时不接收移动状态状态更改事件

java - 为什么我的冒泡排序不起作用? java