git-svn-id: http://moon:8086/svn/software/trunk/projects/opencv@334 b431acfa-c32f-4a4a-93f1-934dc6c82436
62 lines
1.5 KiB
Python
Executable File
62 lines
1.5 KiB
Python
Executable File
import time
|
|
import cv2
|
|
import imutils
|
|
from threading import Thread
|
|
from picamera import PiCamera
|
|
from piCameraPipeline.PiCameraPipeline import RgbProcessorAdapter
|
|
|
|
class VideoSource(RgbProcessorAdapter):
|
|
def __init__(self, fileName, res, framerate):
|
|
super(VideoSource, self).__init__(res)
|
|
self.fileName = fileName
|
|
self.res = res
|
|
self.framerate = framerate
|
|
self.thread = None
|
|
self.camera = None
|
|
self.cancel = False
|
|
if fileName == 'piCamera':
|
|
self.camera = PiCamera()
|
|
self.camera.resolution = (self.res[0], self.res[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)
|
|
cap_w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
|
|
cap_h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
|
|
needResize = False
|
|
if self.res[0] != cap_w or self.res[1] != cap_h:
|
|
needResize = True
|
|
|
|
while not self.cancel:
|
|
ret, frame = cap.read()
|
|
if ret:
|
|
if needResize:
|
|
self.write(imutils.resize(frame, width=self.res[0], height=self.res[1]))
|
|
else:
|
|
self.write(frame)
|
|
else:
|
|
break
|
|
time.sleep(1.0/self.framerate)
|
|
self.flush()
|