|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
|
|
from __future__ import print_function
|
|
|
|
import cv2, os, sys, time
|
|
|
|
import numpy as np
|
|
|
|
from argparse import ArgumentParser
|
|
|
|
from picamera.array import PiRGBArray
|
|
|
|
from picamera import PiCamera
|
|
|
|
|
|
|
|
|
|
|
|
p = ArgumentParser("")
|
|
|
|
p.add_argument("--video", type=int, default=0, help="video, default: 0")
|
|
|
|
p.add_argument("--output", default=None, help="path to save movie, default: None (show live)")
|
|
|
|
p.add_argument("--width", type=int, default=640, help="pre-detect resize width")
|
|
|
|
p.add_argument("--height", type=int, default=480, help="pre-detect resize height")
|
|
|
|
p.add_argument("--fourcc", default="XVID", help="MJPG,mp4v,XVID")
|
|
|
|
p.add_argument("--framerate", type=float, default=25, help="output frame rate")
|
|
|
|
p.add_argument("--show", default=False, action="store_true")
|
|
|
|
p.add_argument("--frames", type=int, default=100)
|
|
|
|
args = p.parse_args()
|
|
|
|
|
|
|
|
fourcc = None
|
|
|
|
cam = cv2.VideoCapture(args.video)
|
|
|
|
cam.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, args.width)
|
|
|
|
cam.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, args.height)
|
|
|
|
|
|
|
|
if args.output:
|
|
|
|
try:
|
|
|
|
fourcc = cv2.cv.CV_FOURCC(*args.fourcc)
|
|
|
|
except AttributeError:
|
|
|
|
fourcc = cv2.VideoWriter_fourcc(*args.fourcc)
|
|
|
|
out = cv2.VideoWriter()
|
|
|
|
out.open(args.output, fourcc, args.framerate, (args.width, args.height))
|
|
|
|
else:
|
|
|
|
out = None
|
|
|
|
|
|
|
|
print ("Starting camera", file=sys.stderr)
|
|
|
|
cam = PiCamera()
|
|
|
|
framesize = (160, 128)
|
|
|
|
cam.resolution = framesize
|
|
|
|
cam.framerate = 32
|
|
|
|
rawCapture = PiRGBArray(cam, size=framesize)
|
|
|
|
# allow the camera to warmup
|
|
|
|
time.sleep(0.25)
|
|
|
|
|
|
|
|
count = 0
|
|
|
|
try:
|
|
|
|
# while True:
|
|
|
|
# ret, frame = cam.read()
|
|
|
|
for frame in cam.capture_continuous(rawCapture, format="bgr", use_video_port=True):
|
|
|
|
# print "GRAB FRAME"
|
|
|
|
frame = frame.array
|
|
|
|
|
|
|
|
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
|
|
|
ret, t= cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
|
|
|
|
frame = cv2.cvtColor(t, cv2.COLOR_GRAY2BGR)
|
|
|
|
# flow = cv2.calcOpticalFlowFarneback(prevgray, gray, 0.5, 3, 15, 3, 5, 1.2, 0)
|
|
|
|
# prevgray = gray
|
|
|
|
|
|
|
|
# clear the stream in preparation for the next frame (important for picamera!)
|
|
|
|
rawCapture.truncate(0)
|
|
|
|
|
|
|
|
if out != None:
|
|
|
|
out.write(frame)
|
|
|
|
count += 1
|
|
|
|
if args.show:
|
|
|
|
cv2.imshow('display', frame)
|
|
|
|
if cv2.waitKey(5) & 0xFF == ord('q'):
|
|
|
|
break
|
|
|
|
if args.frames != None:
|
|
|
|
if (count >= args.frames):
|
|
|
|
break
|
|
|
|
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
pass
|
|
|
|
|
|
|
|
print ("\nCleaning up... Wrote", count, "frames")
|
|
|
|
if out:
|
|
|
|
out.release()
|
|
|
|
if args.show:
|
|
|
|
cv2.destroyAllWindows()
|
|
|
|
|
|
|
|
|
|
|
|
|