- improved PiCameraPipeline (added names for procs, better thread mgmt)
- added VideoSource to piCameraPipeline git-svn-id: http://moon:8086/svn/software/trunk/projects/opencv@330 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
Executable
+51
@@ -0,0 +1,51 @@
|
||||
import time
|
||||
import cv2
|
||||
from threading import Thread
|
||||
from picamera import PiCamera
|
||||
from piCameraPipeline.PiCameraPipeline import RgbProcessorAdapter
|
||||
|
||||
class VideoSource(RgbProcessorAdapter):
|
||||
def __init__(self, fileName, resolution, framerate):
|
||||
super(VideoSource, self).__init__(resolution)
|
||||
self.fileName = fileName
|
||||
self.resolution = resolution
|
||||
self.framerate = framerate
|
||||
self.thread = None
|
||||
self.camera = None
|
||||
self.cancel = False
|
||||
if fileName == 'piCamera':
|
||||
self.camera = PiCamera()
|
||||
self.camera.resolution = (self.resolution[0], self.resolution[1])
|
||||
self.camera.framerate = self.framerate
|
||||
else:
|
||||
self.needRgbConversion = False
|
||||
self.thread = Thread(target=self.fileReadThread)
|
||||
|
||||
def fileReadThread(self):
|
||||
pass
|
||||
|
||||
def start(self):
|
||||
if self.thread is not None:
|
||||
if not self.thread.is_alive():
|
||||
self.thread.start()
|
||||
else:
|
||||
self.camera.start_recording(self, format="bgr")
|
||||
|
||||
def stop(self):
|
||||
if self.thread is not None:
|
||||
if self.thread.is_alive():
|
||||
self.cancel = True
|
||||
self.thread.join()
|
||||
else:
|
||||
self.camera.stop_recording()
|
||||
|
||||
def fileReadThread(self):
|
||||
cap = cv2.VideoCapture(self.fileName)
|
||||
while not self.cancel:
|
||||
ret, frame = cap.read()
|
||||
if ret:
|
||||
self.write(frame)
|
||||
else:
|
||||
break
|
||||
time.sleep(1.0/self.framerate)
|
||||
self.flush()
|
||||
Reference in New Issue
Block a user