Skip to content

Instantly share code, notes, and snippets.

@ExpandOcean
Created January 7, 2015 06:48
Show Gist options
  • Save ExpandOcean/de261e66949009f44ad2 to your computer and use it in GitHub Desktop.
Save ExpandOcean/de261e66949009f44ad2 to your computer and use it in GitHub Desktop.
kivy and opencv work together demo
# coding:utf-8
from kivy.app import App
from kivy.uix.image import Image
from kivy.clock import Clock
from kivy.graphics.texture import Texture
import cv2
class KivyCamera(Image):
def __init__(self, capture, fps, **kwargs):
super(KivyCamera, self).__init__(**kwargs)
self.capture = capture
Clock.schedule_interval(self.update, 1.0 / fps)
def update(self, dt):
ret, frame = self.capture.read()
if ret:
# convert it to texture
buf1 = cv2.flip(frame, 0)
buf = buf1.tostring()
image_texture = Texture.create(
size=(frame.shape[1], frame.shape[0]), colorfmt='bgr')
image_texture.blit_buffer(buf, colorfmt='bgr', bufferfmt='ubyte')
# display image from the texture
self.texture = image_texture
class CamApp(App):
def build(self):
self.capture = cv2.VideoCapture(1)
self.my_camera = KivyCamera(capture=self.capture, fps=30)
return self.my_camera
def on_stop(self):
#without this, app will not exit even if the window is closed
self.capture.release()
if __name__ == '__main__':
CamApp().run()
@StarkGang
Copy link

I tried running it on a Raspberry Pi and it runs pretty slow. Do you have any optimizations for that?

Threads?

@ambrosecodes
Copy link

I don't know if anyone is still interested in this, but since it took me three days to get there, here is a "minimal" example of OpenCV VideoCapture displaying frame by frame on Android:

https://github.com/4ndr3aR/kivy-opencv-demo

I couldn't get this to work. The code ran ok but only for one frame after which the Kivy window closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment