Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 安卓&x2B;Kivy:无法运行摄像头演示,可能是库或权限问题?_Python_Android_Kivy - Fatal编程技术网

Python 安卓&x2B;Kivy:无法运行摄像头演示,可能是库或权限问题?

Python 安卓&x2B;Kivy:无法运行摄像头演示,可能是库或权限问题?,python,android,kivy,Python,Android,Kivy,我正在寻找帮助,让Android上的工作。我认为存在某种库或权限问题 它构建并启动,但在Kivy加载启动屏幕后,它立即崩溃,出现了JVM异常:无法连接到摄像头服务。相同的文件在Ubuntu上完美运行 这不是一个明显的构建或安装问题,因为我已经成功地运行了自己的应用程序,可以访问互联网、读写文件,但我无法在Android上打开相机。在Ubuntu和MacOS上,摄像头打开并工作 Kivy演示文件只是一个最小的摄像头应用程序,它可以打开摄像头,使camera.playtrue只需按下一个按钮。完整来

我正在寻找帮助,让Android上的工作。我认为存在某种库或权限问题

它构建并启动,但在Kivy加载启动屏幕后,它立即崩溃,出现了
JVM异常:无法连接到摄像头服务。相同的文件在Ubuntu上完美运行

这不是一个明显的构建或安装问题,因为我已经成功地运行了自己的应用程序,可以访问互联网、读写文件,但我无法在Android上打开相机。在Ubuntu和MacOS上,摄像头打开并工作

Kivy演示文件只是一个最小的摄像头应用程序,它可以打开摄像头,使
camera.play
true只需按下一个按钮。完整来源如下。此图像来自运行在Ubuntu上的图像:

# UBUNTU LOG
[INFO   ] [CameraGi    ] Using Gstreamer 1.14.4.0
[INFO   ] [Camera      ] Provider: gi(['camera_picamera'] ignored)

# ANDROID LOG
[INFO   ] Camera: Provider: android
[WARNING] stderr:       4:    Camera:
[WARNING] stderr:       5:        id: camera
[WARNING] stderr: >>    6:        resolution: (640, 480)
[WARNING] stderr:       7:        play: False
[WARNING] stderr:       8:    ToggleButton:
[WARNING] stderr: ...
[WARNING] stderr: JavaException:
                  JVM exception occurred: Fail to connect to camera service
pip3 install --upgrade buildozer
sudo apt update
# from https://buildozer.readthedocs.io/en/latest/installation.html#targeting-ios
sudo apt install -y git zip unzip openjdk-8-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5
pip3 install --user --upgrade cython virtualenv
echo 'export PATH=$PATH:~/.local/bin/' >> ~/.bashrc
# log out, back in, check cython in path
which cython # says /home/username/.local/bin/cython

cython --version # says Cython version 0.29.12

有人能告诉我需要做什么才能让它在Android上运行吗?

我不认为这是权限问题,正如我所说的那样 buildozer.spec带有
android.permissions=互联网、摄像头(完整文件如下),并在应用程序信息屏幕中启用了这些权限:

然而,正如Kivy网站所说,我怀疑GStreamer

注意 如果找不到摄像头,可能是因为没有安装gstreamer,那么 在kv语言处理期间引发异常

我们在Android日志中没有看到关于Gstreamer的消息,但我们在Ubuntu上看到了:

# UBUNTU LOG
[INFO   ] [CameraGi    ] Using Gstreamer 1.14.4.0
[INFO   ] [Camera      ] Provider: gi(['camera_picamera'] ignored)

# ANDROID LOG
[INFO   ] Camera: Provider: android
[WARNING] stderr:       4:    Camera:
[WARNING] stderr:       5:        id: camera
[WARNING] stderr: >>    6:        resolution: (640, 480)
[WARNING] stderr:       7:        play: False
[WARNING] stderr:       8:    ToggleButton:
[WARNING] stderr: ...
[WARNING] stderr: JavaException:
                  JVM exception occurred: Fail to connect to camera service
pip3 install --upgrade buildozer
sudo apt update
# from https://buildozer.readthedocs.io/en/latest/installation.html#targeting-ios
sudo apt install -y git zip unzip openjdk-8-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5
pip3 install --user --upgrade cython virtualenv
echo 'export PATH=$PATH:~/.local/bin/' >> ~/.bashrc
# log out, back in, check cython in path
which cython # says /home/username/.local/bin/cython

cython --version # says Cython version 0.29.12
我需要在Android设备上安装Gstreamer吗?我该怎么做?buildozer依赖关系?Python导入?

提前感谢您的帮助或建议

乔纳森


详细信息

  • 构建环境是Ubuntu 18.04.1 LTS
  • 使用安卓8.1.0的目标设备诺基亚1(全新、无支架)
  • 还使用Android 6.0在Moto E第二代上进行了测试(旧的、无根的)
  • 通过USB进行调试
  • Kivy 1.11.0(Ubuntu上的1.11.1)
  • Python 3.7.1(Ubuntu上的3.6.7)
我用

buildozer -v android debug deploy run
重复一次:我的所有其他应用程序都以相同的方式编译和运行,所以这至少不是一个基本的安装问题

完整日志:

[INFO   ] Logger: Record log in /data/user/0/org.test.kivycamera/files/app/.kivy/logs/kivy_19-08-02_0.txt
[WARNING] [Config      ] Upgrading configuration in progress.
[WARNING] [Config      ] Older configuration version detected (0 instead of 21)
[INFO   ] Kivy: v1.11.0
[INFO   ] Kivy: Installed at "/data/user/0/org.test.kivycamera/files/app/_python_bundle/site-packages/kivy/__init__.pyc"
[INFO   ] Python: v3.7.1 (default, Aug  2 2019, 14:44:11) 
[Clang 6.0.2 (https://android.googlesource.com/toolchain/clang 183abd29fc496f55
[INFO   ] Python: Interpreter at "android_python"
[INFO   ] Logger: Purge log fired. Analysing...
[INFO   ] Logger: Purge finished!
[INFO   ] Factory: 184 symbols loaded
[INFO   ] Image: Providers: img_tex, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
[INFO   ] Window: Provider: sdl2
[INFO   ] GL: Using the "OpenGL ES 2" graphics system
[INFO   ] GL: Backend used <sdl2>
[INFO   ] GL: OpenGL version <b'OpenGL ES 3.1 v1.r18p0-00cet0.78299f586f7919862c85cb764ae43fad'>
[INFO   ] GL: OpenGL vendor <b'ARM'>
[INFO   ] GL: OpenGL renderer <b'Mali-T720'>
[INFO   ] GL: OpenGL parsed version: 3, 1
[INFO   ] GL: Texture max size <8192>
[INFO   ] GL: Texture max units <16>
[INFO   ] Window: auto add sdl2 input provider
[INFO   ] Window: virtual keyboard not allowed, single mode, not docked
[INFO   ] Camera: Provider: android
[INFO   ] Text: Provider: sdl2
[WARNING] stderr: Traceback (most recent call last):
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/lang/builder.py", line 700, in _apply_rule
[WARNING] stderr:   File "kivy/weakproxy.pyx", line 35, in kivy.weakproxy.WeakProxy.__setattr__
[WARNING] stderr:   File "kivy/properties.pyx", line 497, in kivy.properties.Property.__set__
[WARNING] stderr:   File "kivy/properties.pyx", line 839, in kivy.properties.ListProperty.set
[WARNING] stderr:   File "kivy/properties.pyx", line 544, in kivy.properties.Property.set
[WARNING] stderr:   File "kivy/properties.pyx", line 599, in kivy.properties.Property.dispatch
[WARNING] stderr:   File "kivy/_event.pyx", line 1214, in kivy._event.EventObservers.dispatch
[WARNING] stderr:   File "kivy/_event.pyx", line 1120, in kivy._event.EventObservers._dispatch
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/uix/camera.py", line 103, in _on_index
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/core/camera/camera_android.py", line 42, in __init__
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/core/camera/__init__.py", line 70, in __init__
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/core/camera/camera_android.py", line 49, in init_camera
[WARNING] stderr:   File "jnius/jnius_export_class.pxi", line 1044, in jnius.jnius.JavaMultipleMethod.__call__
[WARNING] stderr:   File "jnius/jnius_export_class.pxi", line 765, in jnius.jnius.JavaMethod.__call__
[WARNING] stderr:   File "jnius/jnius_export_class.pxi", line 931, in jnius.jnius.JavaMethod.call_staticmethod
[WARNING] stderr:   File "jnius/jnius_utils.pxi", line 91, in jnius.jnius.check_exception
[WARNING] stderr: jnius.jnius.JavaException: JVM exception occurred: Fail to connect to camera service
[WARNING] stderr: 
[WARNING] stderr: During handling of the above exception, another exception occurred:
[WARNING] stderr: 
[WARNING] stderr: Traceback (most recent call last):
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/app/main.py", line 59, in <module>
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/app.py", line 829, in run
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/app/main.py", line 56, in build
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/uix/boxlayout.py", line 145, in __init__
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/uix/layout.py", line 76, in __init__
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/uix/widget.py", line 361, in __init__
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/uix/widget.py", line 469, in apply_class_lang_rules
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/lang/builder.py", line 538, in apply
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/lang/builder.py", line 707, in _apply_rule
[WARNING] stderr: kivy.lang.builder.BuilderException: Parser: File "<inline>", line 6:
[WARNING] stderr: ...
[WARNING] stderr:       4:    Camera:
[WARNING] stderr:       5:        id: camera
[WARNING] stderr: >>    6:        resolution: (640, 480)
[WARNING] stderr:       7:        play: False
[WARNING] stderr:       8:    ToggleButton:
[WARNING] stderr: ...
[WARNING] stderr: JavaException: JVM exception occurred: Fail to connect to camera service
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/lang/builder.py", line 700, in _apply_rule
[WARNING] stderr:   File "kivy/weakproxy.pyx", line 35, in kivy.weakproxy.WeakProxy.__setattr__
[WARNING] stderr:   File "kivy/properties.pyx", line 497, in kivy.properties.Property.__set__
[WARNING] stderr:   File "kivy/properties.pyx", line 839, in kivy.properties.ListProperty.set
[WARNING] stderr:   File "kivy/properties.pyx", line 544, in kivy.properties.Property.set
[WARNING] stderr:   File "kivy/properties.pyx", line 599, in kivy.properties.Property.dispatch
[WARNING] stderr:   File "kivy/_event.pyx", line 1214, in kivy._event.EventObservers.dispatch
[WARNING] stderr:   File "kivy/_event.pyx", line 1120, in kivy._event.EventObservers._dispatch
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/uix/camera.py", line 103, in _on_index
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/core/camera/camera_android.py", line 42, in __init__
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/core/camera/__init__.py", line 70, in __init__
[WARNING] stderr:   File "/home/projects/kivy/camera/.buildozer/android/platform/build/build/python-installs/kivycamera/kivy/core/camera/camera_android.py", line 49, in init_camera
[WARNING] stderr:   File "jnius/jnius_export_class.pxi", line 1044, in jnius.jnius.JavaMultipleMethod.__call__
[WARNING] stderr:   File "jnius/jnius_export_class.pxi", line 765, in jnius.jnius.JavaMethod.__call__
[WARNING] stderr:   File "jnius/jnius_export_class.pxi", line 931, in jnius.jnius.JavaMethod.call_staticmethod
[WARNING] stderr:   File "jnius/jnius_utils.pxi", line 91, in jnius.jnius.check_exception
[WARNING] stderr: 

您需要将此代码放入
build
方法:

request_permissions([
    Permission.CAMERA,
    Permission.WRITE_EXTERNAL_STORAGE,
    Permission.READ_EXTERNAL_STORAGE
])
当然,在文件的开头导入:

from android.permissions import request_permissions, Permission
请参阅kivy存储库中的相关问题:

from android.permissions import request_permissions, Permission