Esempio n. 1
0
def v4l2_video_capture():
    frame = Frame('/dev/video0')
    frame_data = frame.get_frame()
    while True:
        q.put(frame_data)
        q.get() if q.qsize() > 1 else time.sleep(0.01)
Esempio n. 2
0
from pyv4l2.frame import Frame
from pyv4l2.control import Control

frame = Frame('/dev/video0')
frame_data = frame.get_frame()
control = Control("/dev/video0")
print(control.get_controls())
print(control.get_control_value(9963776))
print(control.set_control_value(9963776, 8))
Esempio n. 3
0
 def record(self):
     """ Start recording """
     self.frame = Frame(self.device_name)
Esempio n. 4
0
class pyv4l2_reader:
    """ This class was created to look as similar to the openCV features used in Howdy as possible for overall code cleanliness. """

    # Init
    def __init__(self, device_name, device_format):
        self.device_name = device_name
        self.device_format = device_format
        self.height = 0
        self.width = 0
        self.probe()
        self.frame = ""

    def set(self, prop, setting):
        """ Setter method for height and width """
        if prop == CAP_PROP_FRAME_WIDTH:
            self.width = setting
        elif prop == CAP_PROP_FRAME_HEIGHT:
            self.height = setting

    def get(self, prop):
        """ Getter method for height and width """
        if prop == CAP_PROP_FRAME_WIDTH:
            return self.width
        elif prop == CAP_PROP_FRAME_HEIGHT:
            return self.height

    def probe(self):
        """ Probe the video device to get height and width info """

        vd = open(self.device_name, 'r')
        fmt = v4l2.v4l2_format()
        fmt.type = v4l2.V4L2_BUF_TYPE_VIDEO_CAPTURE
        ret = fcntl.ioctl(vd, v4l2.VIDIOC_G_FMT, fmt)
        vd.close()
        if ret == 0:
            height = fmt.fmt.pix.height
            width = fmt.fmt.pix.width
        else:
            # Could not determine the resolution from ioctl call. Reverting to slower ffmpeg.probe() method
            import ffmpeg
            probe = ffmpeg.probe(self.device_name)
            height = int(probe['streams'][0]['height'])
            width = int(probe['streams'][0]['width'])

        if self.get(CAP_PROP_FRAME_HEIGHT) == 0:
            self.set(CAP_PROP_FRAME_HEIGHT, int(height))

        if self.get(CAP_PROP_FRAME_WIDTH) == 0:
            self.set(CAP_PROP_FRAME_WIDTH, int(width))

    def record(self):
        """ Start recording """
        self.frame = Frame(self.device_name)

    def grab(self):
        """ Read a sigle frame from the IR camera. """
        self.read()

    def read(self):
        """ Read a sigle frame from the IR camera. """

        if not self.frame:
            self.record()

        # Grab a raw frame from the camera
        frame_data = self.frame.get_frame()

        # Convert the raw frame_date to a numpy array
        img = (numpy.frombuffer(frame_data, numpy.uint8))

        # Convert the numpy array to a proper grayscale image array
        img_bgr = cvtColor(img, COLOR_GRAY2BGR)

        # Convert the grayscale image array into a proper RGB style numpy array
        img2 = (numpy.frombuffer(img_bgr, numpy.uint8).reshape([352, 352, 3]))

        # Return a single frame of video
        return 0, img2

    def release(self):
        """ Empty our array. If we had a hold on the camera, we would give it back here. """
        self.video = ()
        self.num_frames_read = 0
        if self.frame:
            self.frame.close()
Esempio n. 5
0
parser.add_argument('--width', type=int, default=720)
parser.add_argument('--height', type=int, default=576)
parser.add_argument('--scale', type=float, default=1.)
parser.add_argument('--visdom-server', type=str, default='http://localhost')
parser.add_argument('--visdom', action='store_true')
parser.add_argument('--device', type=str, default='/dev/video0')

args = parser.parse_args()

w = int(args.width // args.scale)
h = int(args.height // args.scale)

os.system('v4l2-ctl -d {device} --set-fmt-video width={w},height={h}'.format(
    device=args.device, w=w, h=h))

frame = Frame(args.device)

if args.visdom:
    import visdom
    vis = visdom.Visdom(server=args.visdom_server)

pi = pigpio.pi()
if not pi.connected:
    print("could not connect spi")
    exit()
spi = pi.spi_open(0, 750000, 0)
SYNC_PIN = 24
pi.set_mode(SYNC_PIN, pigpio.INPUT)

NUM_LEDS_H = 16
NUM_LEDS_V = 24
Esempio n. 6
0
 def get_picture(self, idx):
     frame = Frame('/dev/video%d' % idx)
     frame_data = frame.get_frame()
     print frame_data
Esempio n. 7
0
* Also, set your video device (default /dev/video0)
* Hit h and l to adjust the threshold multiplier
  (Lower (h) gives more frequent updates
* While it waits for some initial frames, it otherwise
  begins right away, so it doesn't have a proper average for the
  brightness peaks. The end result is you get some images
  showing quickly, then they should reduce in frequency.
''')
avg_over=5 # Number of frames for averaging, to remove noise.
           # This same count is used for figuring out the
		   # threshold of peak brightness. (I currently keep
		   # those entire images, but I could just keep their
		   # sums for detecting peaks. Should fix that later.)


frame = Frame(vdev)
pltimg = None
plt.ion()
	#def __init__(self, dims=None, count=None, dtype=np.uint8):
imgsbuf = ImageBuf(dims=(ih,iw,3), count=avg_over)
diffbuf = ImageBuf(dims=(ih,iw,3), count=avg_over)
framecount=0
anomalycount=0
#thresh = 217000
tmult = 1.15
while True:
	imgd = frame.get_frame()
	framecount += 1
	img = np.frombuffer(imgd, dtype=np.uint8)
	img = img.reshape((ih,iw,3))
	imgsbuf.add(img)