рдореИрдВ рдпрд╣рд╛рдВ рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╡реА рдореЗрдВ рдЕрдкрдиреЗ рдХреИрдорд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
https://github.com/kivy/kivy/blob/1.10.0/examples/camera/main.py
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ cv2.so рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреЗрд╡рд▓ рдПрдХ рд╕рдлреЗрдж рд╕реНрдХреНрд░реАрди рдорд┐рд▓рддреА рд╣реИ opencv-3.3.0|. If I compile
opencv-2.4.13.3` рд╕реЗ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреИрдорд░рд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ (рдПрд▓рдИрдбреА рдЯрд░реНрдирд┐рдВрдЧ) рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдУрдкрдирд╕реАрд╡реА -2 рдХреЗ рд╕рд╛рде рд╡реАрдбрд┐рдпреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕реНрдХреНрд░реАрди рдУрдкрдирд╕реАрд╡реА -3 рдХреЗ рд╕рд╛рде рд╕рдлреЗрдж рд░рд╣рддреА рд╣реИред
рдореИрдВрдиреЗ рдиреАрдЪреЗ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:
import kivy
from kivy.app import App
from kivy.uix.camera import Camera
class MainApp(App):
def build(self):
return Camera(play=True, resolution=(640, 480))
if __name__== "__main__":
MainApp().run()
рдФрд░ рдореИрдВ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдпрд╛рдиреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рдорд┐рд▓ opencv-2.4.13.3
рдирд╣реАрдВ рдХреЗ рд╕рд╛рде opencv-3.3.0
ред
рдореИрдВрдиреЗ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдг https://github.com/opencv/opencv/releases рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП
рдФрд░ рд╡реЗ рджреЛрдиреЛрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЭрдВрдбреЗ (рдмрд╕ cmake
рдФрд░ рдлрд┐рд░ make -j4
) рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╢реБрджреНрдз рдУрдкрдирд╕реАрд╡реА рдЙрджрд╛рд╣рд░рдг рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Display the resulting frame
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Kivy рдореЗрдВ рдЗрд╕рдХреЗ рдПрдХреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ
рдореЗрд░реЗ рдкрд╛рд╕ рдУрдкрдирд╕реАрд╡реА 3 рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдлреЗрдж рд╕реНрдХреНрд░реАрди рднреА рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдбрд┐рдмрдЧ рдХрд┐рдпрд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдлреНрд░реЗрдо рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╡реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ
рдЙрд╕реЗ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦреЗрдВ .../lib/python3.6/site-packages/kivy/core/camera/camera_opencv.py
рдкрдВрдХреНрддрд┐ 121:
if self.fps <= 0:
self.fps = 1 / 30.
рдЬрдм рдЖрдк рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рд╡рд╣рд╛рдВ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдлрдкреАрдПрд╕ рдорд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 30 рд╣реИ (рдФрд░ 1/30 рдирд╣реАрдВ)ред
рдпрд╣ рдорд╛рди рддрдм рдлрд╝реНрд░реЗрдо-рдЕрдкрдбреЗрдЯ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
self._update_ev = Clock.schedule_interval(self._update, self.fps)
рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП:
self._update_ev = Clock.schedule_interval(self._update, 1/self.fps)
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдХреЛрдб рдореЗрдВ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рднреА рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛
рдкрд╛рдЗрдерди 2.7.14 рдФрд░ рдУрдкрдирд╕реАрд╡реА 3 рдХреЗ рд╕рд╛рде рдЙрдмрдВрдЯреВ 18.04 (рдмреАрдЯрд╛ рд░рд┐рд▓реАрдЬ) рдкрд░ рдЙрдкрд░реЛрдХреНрдд 'рд╕рдорд╛рдзрд╛рди' рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╡реЗрдмрдХреИрдо рдкрдиреАрд░ рдЬреИрд╕реЗ рдбреЗрд╕реНрдХрдЯреЙрдк рдРрдкреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╣рдо, Braintrainerplus.nl, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗрдмрдХреИрдо рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрддрд╛ рд╣реИ рддреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЗрдирд╛рдо рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рдореИрдВ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, opencv рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП numpy array рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрд┐рд╡реА рдХреЗ рдХреИрдорд░рд╛ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдиреЗ рдХреЗрд╡рд▓ рдмрдирд╛рд╡рдЯ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХреАред
рдпрд╣ рд╕рд╛рд░ рд╕реАрдзреЗ рдХреИрдорд░реЗ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛:
рдПрдлрд╡рд╛рдИрдЖрдИ: рдУрдкрдирд╕реАрд╡реА 2.4.13 рдЙрдмрдВрдЯреВ 18.04 рдкрд░ рдХрд┐рд╡реА 1.10 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
(рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ рдХреНрдпреЛрдВ рд╡рд┐рдлрд▓ рд╣реБрдЖ рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛)
рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ @yoelk рдХрд╛ "рдлрд┐рдХреНрд╕" рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡реА рдХреЗ рдЕрдВрджрд░ рдкрд╛рдпрдерди 3.6.5 рдФрд░ рдУрдкрдирд╕реАрд╡реА 3.3.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд░реНрдХ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпрд╣ https://github.com/kivy/kivy/issues/5146 рдЬреИрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ
@yoelk рдореЗрд░реА рд▓рд╛рдЗрди 121 is
if self.fps <= 0:
self.fps = 1 / 30
рдФрд░ рдореБрдЭреЗ рд╕рдлреЗрдж рд╕реНрдХреНрд░реАрди рдорд┐рд▓ рд░рд╣реА рд╣реИред рдореБрдЭреЗ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдпрд╛ рддреЛ рдкреАрдЖрдИрдкреА рдпрд╛ рдХреЛрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдУрдкрдирд╕реАрд╡реА 2 рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ
рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдм рдХреИрдорд░рд╛, рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЬрдВрдЧрд▓реА рднреИрдВрд╕реЛрдВ рдФрд░ рдпреВрдПрд╕рдмреА logitech рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдЕрдм @yoelk рд╕реЗ рдареАрдХ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ kivy 1.10.1 рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╕рд┐рд╕реНрдЯрдо: Ubuntu 18.04/Mint 19, openvc 3.2.0 рдФрд░ kivy 1.10.1 ppa :kivy-team/kivy рд╕реЗред
рдореБрдЭреЗ kivy/core/camera/__init__.py рдореЗрдВ opencv рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдкреНрд░рджрд╛рддрд╛рдУрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреА рд╣реЛрдЧреА рддрд╛рдХрд┐ opencv рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрд╛рдзреНрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдХреА рдмрд╕ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдЬреАрдм рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджреЗрддреЗ рд╣реИрдВред
@CurtlyCritchlow рдлрд┐рдХреНрд╕ рд▓рд╛рдЗрди 152 рдореЗрдВ рд╣реИ: self._update_ev = Clock.schedule_interval(self._update, 1/self.fps)
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЙрд╕реЗ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦреЗрдВ
.../lib/python3.6/site-packages/kivy/core/camera/camera_opencv.py
рдкрдВрдХреНрддрд┐ 121:
рдЬрдм рдЖрдк рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рд╡рд╣рд╛рдВ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдлрдкреАрдПрд╕ рдорд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 30 рд╣реИ (рдФрд░ 1/30 рдирд╣реАрдВ)ред
рдпрд╣ рдорд╛рди рддрдм рдлрд╝реНрд░реЗрдо-рдЕрдкрдбреЗрдЯ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП:
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдХреЛрдб рдореЗрдВ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рднреА рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛