class CameraBundle: def __init__(self): self.cam = CoreCamera(index=0, resolution=(640, 480)) self.caminstance = self.cam._android_camera def start(self): self.cam.start() def stop(self): self.cam.stop() def fps(self): return self.cam.fps def capture(self, n): frames = [] st = 1.0 / 29.97 self._flash_on() for i in range(0, n): frames.append(self.cam.grab_frame()) sleep(st) self._flash_off() return frames def decode(self, frames): r = np.zeros((1, len(frames))) for i in range(0, len(frames)): frame = self.cam.decode_frame(frames[i]) frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) r[0, i] = np.mean(frame[180:260:5, 270:340:5]) print r[0, i] return r def _flash_on(self): p = self.caminstance.getParameters() p.setFlashMode(Parameters.FLASH_MODE_TORCH) p.setExposureCompensation(-2) self.caminstance.setParameters(p) def _flash_off(self): p = self.caminstance.getParameters() p.setFlashMode(Parameters.FLASH_MODE_OFF) p.setExposureCompensation(0) self.caminstance.setParameters(p)
class StartWorker(Screen, Utils): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def _on_enter(self, instance_program): self.app = instance_program # print('enter') if self.camera is None: self.camera = Camera() self.camera.play = True self.camera.start() self.clear_images() self.ids.first.texture = None self.ids.second.texture = None def _on_exit(self): # print('exit') # camera = self.ids['camera'] self.camera.play = False self.camera.stop()
class Camera(Image): '''Camera class. See module documentation for more information. ''' play = BooleanProperty(True) '''Boolean indicating whether the camera is playing or not. You can start/stop the camera by setting this property:: # start the camera playing at creation (default) cam = Camera(play=True) # create the camera, and start later cam = Camera(play=False) # and later cam.play = True :attr:`play` is a :class:`~kivy.properties.BooleanProperty` and defaults to True. ''' index = NumericProperty(-1) '''Index of the used camera, starting from 0. :attr:`index` is a :class:`~kivy.properties.NumericProperty` and defaults to -1 to allow auto selection. ''' resolution = ListProperty([-1, -1]) '''Preferred resolution to use when invoking the camera. If you are using [-1, -1], the resolution will be the default one:: # create a camera object with the best image available cam = Camera() # create a camera object with an image of 320x240 if possible cam = Camera(resolution=(320, 240)) .. warning:: Depending on the implementation, the camera may not respect this property. :attr:`resolution` is a :class:`~kivy.properties.ListProperty` and defaults to [-1, -1]. ''' def __init__(self, **kwargs): self._camera = None super(Camera, self).__init__(**kwargs) if self.index == -1: self.index = 0 on_index = self._on_index fbind = self.fbind fbind('index', on_index) fbind('resolution', on_index) on_index() def on_tex(self, *l): self.canvas.ask_update() def _on_index(self, *largs): self._camera = None if self.index < 0: return if self.resolution[0] < 0 or self.resolution[1] < 0: return self._camera = CoreCamera(index=self.index, resolution=self.resolution, stopped=True) self._camera.bind(on_load=self._camera_loaded) if self.play: self._camera.start() self._camera.bind(on_texture=self.on_tex) def _camera_loaded(self, *largs): self.texture = self._camera.texture self.texture_size = list(self.texture.size) def on_play(self, instance, value): if not self._camera: return if value: self._camera.start() else: self._camera.stop()
class Camera(Image): '''Camera class. See module documentation for more information. ''' play = BooleanProperty(True) '''Boolean indicate if the camera is playing. You can start/stop the camera by setting this property. :: # start the camera playing at creation (default) cam = Camera(play=True) # create the camera, and start later cam = Camera(play=False) # and later cam.play = True :data:`play` is a :class:`~kivy.properties.BooleanProperty`, default to True. ''' index = NumericProperty(-1) '''Index of the used camera, starting from 0. :data:`index` is a :class:`~kivy.properties.NumericProperty`, default to -1 to allow auto selection. ''' resolution = ListProperty([-1, -1]) '''Prefered resolution to use when invoking the camera. If you are using [-1, -1], the resolution will be the default one. :: # create a camera object with the best image available cam = Camera() # create a camera object with an image of 320x240 if possible cam = Camera(resolution=(320, 240)) .. warning:: Depending of the implementation, the camera may not respect this property. :data:`resolution` is a :class:`~kivy.properties.ListProperty`, default to [-1, -1] ''' def __init__(self, **kwargs): self._camera = None super(Camera, self).__init__(**kwargs) if self.index == -1: self.index = 0 self.bind(index=self._on_index, resolution=self._on_index) self._on_index() def _on_index(self, *largs): self._camera = None if self.index < 0: return self._camera = CoreCamera(index=self.index, resolution=self.resolution, stopped=True) self._camera.bind(on_load=self._camera_loaded) if self.play: self._camera.start() def _camera_loaded(self, *largs): self.texture = self._camera.texture self.texture_size = list(self.texture.size) def on_play(self, instance, value): if not self._camera: return if value: self._camera.start() else: self._camera.stop()
class Camera(Image): '''Camera class. See module documentation for more informations. ''' play = BooleanProperty(False) '''Boolean indicate if the camera is playing. You can start/stop the camera by setting this property. :: # start the camera playing at creation video = Camera(source='movie.mkv', play=True) # create the camera, and start later video = Camera(source='movie.mkv') # and later video.play = True :data:`play` is a :class:`~kivy.properties.BooleanProperty`, default to True. ''' index = NumericProperty(-1) '''Index of the used camera, starting from 0. :data:`index` is a :class:`~kivy.properties.NumericProperty`, default to -1 to allow auto selection. ''' resolution = ListProperty([-1, -1]) '''Prefered resolution to use when invoking the camera. If you are using [-1, -1], the resolution will be the default one. :: # create a camera object with the best image available cam = Camera() # create a camera object with an image of 320x240 if possible cam = Camera(resolution=(320, 240)) .. warning:: Depending of the implementation, the camera may not respect this property. :data:`resolution` is a :class:`~kivy.properties.ListProperty`, default to [-1, -1] ''' def __init__(self, **kwargs): self._camera = None super(Camera, self).__init__(**kwargs) if self.index == -1: self.index = 0 self.bind(index=self._on_index, resolution=self._on_index) self._on_index() def _on_index(self, *largs): self._camera = None if self.index < 0: return self._camera = CoreCamera(index=self.index, resolution=self.resolution, stopped=True) self._camera.bind(on_load=self._camera_loaded) if self.play: self._camera.start() def _camera_loaded(self, *largs): self.texture = self._camera.texture self.texture_size = list(self.texture.size) def on_play(self, instance, value): if not self._camera: return if value: self._camera.play() else: self._camera.stop()