【问题标题】:How can I use the files in the project files?如何使用项目文件中的文件?
【发布时间】:2020-08-16 03:24:59
【问题描述】:

我在 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&)']

【问题讨论】:

    标签: java android


    【解决方案1】:

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

    不知道readNetFromDarknet能否接受InputStreams。

    • 如果为真,您可以使用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

    【讨论】:

    • 感谢您的回答。我照他说的做了,但是 readNetFromDarknet 不接受 InputStream。
    • @user13179766 所以你应该采用最后一种方法。
    • 我创建了一个资产文件夹并将文件放在这里。当应用程序第一次打开时,我从这里获取文件并将它们上传到手机的内存中。这样,用户不需要采取任何额外的动作。我这样解决了问题。
    【解决方案2】:

    我遇到了同样的问题,我解决这个问题的方法是在资产文件夹中添加文件,然后我创建了两个文件并将资产文件夹文件的内容复制到那里。确保使用此路径:

    applicationContext.filesDir.absolutePath
    

    并在那里创建您的文件!

    【讨论】:

      猜你喜欢
      • 2022-10-04
      • 2021-11-28
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多