'Kivy, XCamera: How can I solve Warning: 'can't open camera by index'?
System: Ubuntu: 21.10 Python: 3.8.8 Kivy: 2.0.0 KivyGraden: 0.1.4 XCamera: 2020.613
I'm trying to use XCamera in a multiwindow kivy app. Please help me to find a solution for the error. See main.py bla.kv and log below.
The app automatically interrupts while starting. My camera and cv2 seem to work properly. dev/video0 is part of my system as well.
main.py
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.image import Image
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import (
NumericProperty, ReferenceListProperty, ObjectProperty
)
from kivy.config import Config
from kivy_garden.xcamera import XCamera
class MainWindow(Screen):
text_input = ObjectProperty(None)
def read(self):
print('Text: ', self.text_input.text)
self.text_input.text = ''
pass
class SecondWindow(Screen):
pass
class CamWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
class ProjektApp(App):
def build(self):
return kv
kv = Builder.load_file('bla.kv')
if __name__ == '__main__':
ProjektApp().run()
bla.kv
#: kivy 2.0.0
#: import XCamera kivy.garden.xcamera.XCamera
WindowManager:
MainWindow:
SecondWindow:
CamWindow:
<Button>:
font_size: 50
color: .5,1,.7,1
background_color: 0,0,1,1
<MainWindow>:
name: 'main'
text_input: input
GridLayout:
size: root.width, root.height
cols: 2
rows: 2
Button:
text: 'Scan'
on_release:
app.root.current = 'cam'
root.manager.transition.direction = 'down'
Button:
text: 'Übersicht'
Button:
text: 'Top Secret'
on_release:
app.root.current = 'second'
root.manager.transition.direction = 'left'
TextInput:
id: input
font_size: 50
multiline: False
<SecondWindow>:
name: 'second'
Button:
text: 'Wer das liest ist doof.'
on_release:
app.root.current = 'main'
root.manager.transition.direction = 'right'
<CamWindow>:
name: 'cam'
FloatLayout:
XCamera:
id: xcamera
Button:
text: 'back'
on_release:
app.root.current = 'main'
root.manager.transition.direction = 'up'
LOG
[...]
[INFO ] [Clipboard ] Provider: xclip
[INFO ] [CutBuffer ] cut buffer support enabled
[DEBUG ] [Atlas ] Load </home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/data/images/defaulttheme.atlas>
[DEBUG ] [Atlas ] Need to load 1 images
[DEBUG ] [Atlas ] Load </home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/data/images/defaulttheme-0.png>
[DEBUG ] [ImageSDL2 ] Load </home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/data/images/defaulttheme-0.png>
[DEBUG ] Using opencv ver.4
[DEBUG ] Using opencv ver.4
[ WARN:[email protected]] global /io/opencv/modules/videoio/src/cap_v4l.cpp (889) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
Traceback (most recent call last):
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/lang/builder.py", line 705, in _apply_rule
setattr(widget_set, key, value)
File "kivy/weakproxy.pyx", line 35, in kivy.weakproxy.WeakProxy.__setattr__
File "kivy/properties.pyx", line 498, in kivy.properties.Property.__set__
File "kivy/properties.pyx", line 840, in kivy.properties.ListProperty.set
File "kivy/properties.pyx", line 545, in kivy.properties.Property.set
File "kivy/properties.pyx", line 600, in kivy.properties.Property.dispatch
File "kivy/_event.pyx", line 1248, in kivy._event.EventObservers.dispatch
File "kivy/_event.pyx", line 1154, in kivy._event.EventObservers._dispatch
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy_garden/xcamera/xcamera.py", line 85, in _on_index
self._on_index_dispatch(*largs)
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy_garden/xcamera/xcamera.py", line 88, in _on_index_dispatch
super()._on_index(*largs)
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/uix/camera.py", line 103, in _on_index
self._camera = CoreCamera(index=self.index,
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/core/camera/camera_opencv.py", line 70, in __init__
super(CameraOpenCV, self).__init__(**kwargs)
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/core/camera/__init__.py", line 70, in __init__
self.init_camera()
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/core/camera/camera_opencv.py", line 120, in init_camera
self._resolution = (int(frame.shape[1]), int(frame.shape[0]))
AttributeError: 'NoneType' object has no attribute 'shape'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 73, in <module>
kv = Builder.load_file('bla.kv')
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/lang/builder.py", line 306, in load_file
return self.load_string(data, **kwargs)
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/lang/builder.py", line 408, in load_string
self._apply_rule(
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/lang/builder.py", line 661, in _apply_rule
child.apply_class_lang_rules(
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/uix/widget.py", line 463, in apply_class_lang_rules
Builder.apply(
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/lang/builder.py", line 541, in apply
self._apply_rule(
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/lang/builder.py", line 663, in _apply_rule
self._apply_rule(
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/lang/builder.py", line 661, in _apply_rule
child.apply_class_lang_rules(
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/uix/widget.py", line 463, in apply_class_lang_rules
Builder.apply(
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/lang/builder.py", line 541, in apply
self._apply_rule(
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/lang/builder.py", line 710, in _apply_rule
raise BuilderException(rule.ctx, rule.line,
kivy.lang.builder.BuilderException: Parser: File "<inline>", line 28:
...
26:
27: id: camera
>> 28: resolution: 640, 480 # 1920, 1080
29: allow_stretch: True
30:
...
AttributeError: 'NoneType' object has no attribute 'shape'
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/lang/builder.py", line 705, in _apply_rule
setattr(widget_set, key, value)
File "kivy/weakproxy.pyx", line 35, in kivy.weakproxy.WeakProxy.__setattr__
File "kivy/properties.pyx", line 498, in kivy.properties.Property.__set__
File "kivy/properties.pyx", line 840, in kivy.properties.ListProperty.set
File "kivy/properties.pyx", line 545, in kivy.properties.Property.set
File "kivy/properties.pyx", line 600, in kivy.properties.Property.dispatch
File "kivy/_event.pyx", line 1248, in kivy._event.EventObservers.dispatch
File "kivy/_event.pyx", line 1154, in kivy._event.EventObservers._dispatch
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy_garden/xcamera/xcamera.py", line 85, in _on_index
self._on_index_dispatch(*largs)
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy_garden/xcamera/xcamera.py", line 88, in _on_index_dispatch
super()._on_index(*largs)
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/uix/camera.py", line 103, in _on_index
self._camera = CoreCamera(index=self.index,
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/core/camera/camera_opencv.py", line 70, in __init__
super(CameraOpenCV, self).__init__(**kwargs)
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/core/camera/__init__.py", line 70, in __init__
self.init_camera()
File "/home/joel/Projekte/kivy_venv/lib/python3.8/site-packages/kivy/core/camera/camera_opencv.py", line 120, in init_camera
self._resolution = (int(frame.shape[1]), int(frame.shape[0]))
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
