mozilla/DeepSpeech

File descriptor support for Android/Java/JNI

Open

#3,507 建立於 2021年1月20日

在 GitHub 查看
 (7 留言) (0 反應) (0 負責人)C++ (26,755 star) (4,093 fork)batch import
help wanted

描述

I would like the Android/Java/JNI bindings to support file descriptors. Currently, they only support paths.

I am using Android's SAF (the OS's graphical file picker) to open the model and scorer files. It avoids asking for invasive permissions but returns a file descriptor instead of a path. On Android 10, I could just convert the file descriptor into a path using the expression "/proc/self/fd/" + fd. After updating to Android 11, this fails with a permission denied error. A workaround might be to request for access to the entire internal storage, but this is not ideal for privacy reasons.

I heard that dup works while fopen doesn't. This leads to two possible solutions:

  • Add another constructor that accepts an int to use as a file descriptor, and pass that all the way into native code
  • Have the existing constructor detect whether the path starts with /proc/self/fd/, and if it does, use the existing file descriptor instead of opening a file

If you've found a bug, or have a feature request, then please create an issue with the following information:

  • Have I written custom code (as opposed to running examples on an unmodified clone of the repository): WIP https://github.com/mozilla/DeepSpeech-examples/pull/101
  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Android 11 Beta 1 on OnePlus 7 Pro
  • TensorFlow installed from (our builds, or upstream TensorFlow): N/A
  • TensorFlow version (use command below): N/A
  • Python version: N/A
  • Bazel version (if compiling from source): N/A
  • GCC/Compiler version (if compiling from source): N/A
  • CUDA/cuDNN version: N/A
  • GPU model and memory: N/A
  • Exact command to reproduce: N/A
  • Gradle dependency: implementation 'org.mozilla.deepspeech:libdeepspeech:0.9.2'

貢獻者指南