Search
 
SCRIPT & CODE EXAMPLE
 

PYTHON

kivy video recorder

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.image import Image
from kivy.clock import Clock
from kivy.graphics.texture import Texture
from kivy.properties import StringProperty, NumericProperty

import cv2
import os

# Standard Video Dimensions Sizes
STD_DIMENSIONS =  {
    "480p": (640, 480),
    "720p": (1280, 720),
    "1080p": (1920, 1080),
    "4k": (3840, 2160),
}

# Video Encoding, might require additional installs
# Types of Codes: http://www.fourcc.org/codecs.php
VIDEO_TYPE = {
    'avi': cv2.VideoWriter_fourcc(*'XVID'),
    #'mp4': cv2.VideoWriter_fourcc(*'H264'),
    'mp4': cv2.VideoWriter_fourcc(*'XVID'),
}

class KivyCamera(BoxLayout):
    filename = StringProperty('video.avi')
    frames_per_second = NumericProperty(30.0)
    video_resolution = StringProperty('720p')

    def __init__(self, **kwargs):
        super(KivyCamera, self).__init__(**kwargs)
        self.img1=Image()
        self.add_widget(self.img1)
        self.capture = cv2.VideoCapture(0)
        self.out = cv2.VideoWriter(self.filename, self.get_video_type(self.filename), self.frames_per_second, self.get_dims(self.capture, self.video_resolution))
        Clock.schedule_interval(self.update, 1 / self.frames_per_second)

    def update(self, *args):
        ret, frame = self.capture.read()
        self.out.write(frame)
        buf = cv2.flip(frame, 0).tostring()
        texture = Texture.create(size=(frame.shape[1], frame.shape[0]), colorfmt="bgr")
        texture.blit_buffer(buf, colorfmt="bgr", bufferfmt="ubyte")
        self.img1.texture = texture

    # Set resolution for the video capture
    # Function adapted from https://kirr.co/0l6qmh
    def change_resolution(self, cap, width, height):
        self.capture.set(3, width)
        self.capture.set(4, height)

    # grab resolution dimensions and set video capture to it.
    def get_dims(self, cap, video_resolution='1080p'):
        width, height = STD_DIMENSIONS["480p"]
        if self.video_resolution in STD_DIMENSIONS:
            width, height = STD_DIMENSIONS[self.video_resolution]
        ## change the current caputre device
        ## to the resulting resolution
        self.change_resolution(cap, width, height)
        return width, height

    def get_video_type(self, filename):
        filename, ext = os.path.splitext(filename)
        if ext in VIDEO_TYPE:
          return  VIDEO_TYPE[ext]
        return VIDEO_TYPE['avi']

class CamApp(App):
    def build(self):
        return KivyCamera()

if __name__ == '__main__':
    CamApp().run()
Comment

PREVIOUS NEXT
Code Example
Python :: pandas continues update csv 
Python :: duplicate characters in a string python 
Python :: pylatex subsection 
Python :: display full length jupyter 
Python :: python iterate through list by chunks 
Python :: user logout in django rest framework 
Python :: Python regex emailadres no jpg 
Python :: updating to database 
Python :: concatenar columnas en una del mismo dataset 
Python :: pandas replace % with calculated 
Python :: python youtube_dl custom path 
Python :: foreach loop in python with index 
Python :: mechanize python #11 
Python :: django nested inlines 
Python :: UTC to ISO 8601 with Local TimeZone information without microsecond (Python 3): 
Python :: for_else_and_while_else_statement 
Python :: Solve abstract model relations conflicts while using inheritance 
Python :: join two deques 
Python :: fill variable based on values of other variables python 
Python :: pairplot hide original legend 
Python :: load xgb 
Python :: Palindrome in Python Using reverse function 
Python :: Code Example to Check the type of None object 
Python :: how to get class names in predict_proba 
Python :: scikit learn lazy predict 
Python :: Algorithms and Data Structures in Python (INTERVIEW Q&A) 
Python :: How to use glob.escape() function in python 
Python :: Python NumPy squeeze function Example with axis=1 
Python :: get nodes of xml in python 
Python :: Python NumPy require Function Syntax 
ADD CONTENT
Topic
Content
Source link
Name
6+4 =