Kivy: OpenCV3 рдкрд░ рд╕рдлреЗрдж рд╕реНрдХреНрд░реАрди, рд▓реЗрдХрд┐рди OpenCV2 рдкрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рд╕рд┐рддре░ 2017  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: kivy/kivy

рд╕рдВрд╕реНрдХрд░рдгреЛрдВ

  • рдкрд╛рдпрдерди: v2.7.12
  • рдУрдПрд╕: рд▓рд┐рдирдХреНрд╕ (рдЬреЗрдВрдЯреВ)
  • рдХрд┐рд╡реА: 1.10.0
  • рдХрд┐рд╡реА рд╕реНрдерд╛рдкрдирд╛ рд╡рд┐рдзрд┐: рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ kivy==1.10.0

рд╡рд┐рд╡рд░рдг

рдореИрдВ рдпрд╣рд╛рдВ рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╡реА рдореЗрдВ рдЕрдкрдиреЗ рдХреИрдорд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
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 рдореЗрдВ рдЗрд╕рдХреЗ рдПрдХреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЙрд╕реЗ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦреЗрдВ .../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)

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдХреЛрдб рдореЗрдВ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рднреА рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛

рд╕рднреА 10 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

рдореЗрд░реЗ рдкрд╛рд╕ рдУрдкрдирд╕реАрд╡реА 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 рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрд┐рд╡реА рдХреЗ рдХреИрдорд░рд╛ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдиреЗ рдХреЗрд╡рд▓ рдмрдирд╛рд╡рдЯ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХреАред

рдпрд╣ рд╕рд╛рд░ рд╕реАрдзреЗ рдХреИрдорд░реЗ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛:

https://gist.github.com/ExpandOcean/de261e66949009f44ad2

рдПрдлрд╡рд╛рдИрдЖрдИ: рдУрдкрдирд╕реАрд╡реА 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)

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

KeyWeeUsr picture KeyWeeUsr  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

anas1434 picture anas1434  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

abhigenie92 picture abhigenie92  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Fogapod picture Fogapod  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ