python 2.7 - Raspberry pi VideoCapture freezes while Recording -


i have been trying save webcam stream of raspberry pi using opencv videocapture. code is:

import wx import vlc import os import user import numpy np import time import cv, cv2  class mainwindow(wx.panel):      def __init__(self, parent,capture):           wx.panel.__init__(self, parent)                 mainsizer = wx.boxsizer(wx.vertical)  # video             videowarper = wx.staticbox(self,size=(640,480)                 videoboxsizer = wx.staticboxsizer(videowarper, wx.vertical)              videoframe = wx.panel(self, -1,size=(640,480))                 capture = showcapture(videoframe, capture)                videoboxsizer.add(videoframe,0)                mainsizer.add(videoboxsizer,0)                parent.centre()                 self.show()                 self.setsizerandfit(mainsizer)         # panels  # first panel holds video , it's black          self.videopanel = wx.panel(self, -1)                 self.videopanel.setbackgroundcolour(wx.black)  # second panel holds controls          ctrlpanel = wx.panel(self, -1 )               self.timeslider = wx.slider(ctrlpanel, -1, 0, 0, 1000)                 self.timeslider.setrange(0, 1000)                 record = wx.button(ctrlpanel, label="record")                end = wx.button(ctrlpanel, label="end")  # bind controls events          self.bind(wx.evt_button, self.onrecord, record)               self.bind(wx.evt_button, self.onend, end)  # give pretty layout controls          ctrlbox = wx.boxsizer(wx.vertical)                 box = wx.boxsizer(wx.horizontal)  # box contains buttons , volume controls          box.add(record)                box.add(end)  # merge box ctrlsizer          ctrlbox.add(box, flag=wx.expand, border=10)                 ctrlpanel.setsizer(ctrlbox)  # put togheter          sizer = wx.boxsizer(wx.vertical)                 sizer.add(ctrlpanel, flag=wx.expand | wx.bottom | wx.top, border=10)                 self.setsizer(sizer)                 self.setminsize((350, 300))  # vlc player controls          self.instance = vlc.instance()                self.player = self.instance.media_player_new()         def onrecord(self, evt):          fourcc = cv2.cv.cv_fourcc('d', 'i', 'v', 'x')              out = cv2.videowriter('video.avi', fourcc, 8.0, (640, 480))             counter = 0              while counter < 1:                                     ret,frame = capture.read()                        out.write(frame)      def onend(self, evt):         out = cv2.videowriter('video.avi', fourcc, 8.0, (640, 480))               out.release()                 cv2.destroyallwindows()  class showcapture(wx.panel):      def __init__(self, parent, capture, fps=8):          wx.panel.__init__(self, parent, wx.id_any, (0,0), (640,480))                 self.capture = capture                ret, frame = capture.read()                 height, width = frame.shape[:2]                 parent.setsize((width, height))                 frame = cv2.cvtcolor(frame, cv2.color_bgr2rgb)             self.bmp = wx.bitmapfrombuffer(width, height, frame)                 self.timer = wx.timer(self)                self.timer.start(1000./fps)             self.bind(wx.evt_paint, self.onpaint)                 self.bind(wx.evt_timer, self.nextframe)      def onpaint(self, evt):          dc = wx.bufferedpaintdc(self)                 dc.drawbitmap(self.bmp, 0, 0)      def nextframe(self, event):          ret, frame = self.capture.read()                if ret:                        frame = cv2.cvtcolor(frame, cv2.color_bgr2rgb)                         self.bmp.copyfrombuffer(frame)                         self.refresh()  capture = cv2.videocapture(-1)  app = wx.app(false)  frame = wx.frame(none, title='camgui') panel = mainwindow(frame, capture) frame.show() app.mainloop() 

i have managed video stream inside gui window freezes after start record video , livestream struck though keep recording in background, until close python shell.

what might reason?


Comments