Module vipy.camera

Expand source code Browse git
import urllib
import timeit
from vipy.util import tempimage, try_import, isurl
from vipy.image import Image
from vipy.globals import print

try_import("cv2", "opencv-python")
import cv2


class Camera(object):
    CAM = None
    FRAMERATE = False
    TIC = 0
    TOC = 0
    RESIZE = None
    GREY = None
    PROCESS = None


class Webcam(Camera):
    """Create a webcam object that will yield `vipy.image.Image` frames.

    This is a light wrapper to OpenCV webcam object (cv2.VideoCapture) that yields vipy objects.

    >>> cam = vipy.cmaera.Webcam()
    >>> cam.frame().show()

    Or as an iterator:
    
    >>> for im in vipy.camera.Webcam():
    >>>     im.show()

    To capture a video:

    >>> 
    Args:
        framerate: [float] The framerate to grab from the camera
        url: [int]  The camera index to open 

    """
    def __init__(self, framerate=False, idx=0):

        assert idx >= 0
        self.CAM = cv2.VideoCapture(idx)
        if not self.CAM.isOpened():
            self.CAM.open(idx)
        self.FRAMERATE = framerate
        if framerate:
            self.TIC = timeit.default_timer()

    def __del__(self):
        self.CAM.release()
        return self

    def __iter__(self):
        while(1):
            im = self.next()
            yield im

    def _read(self):
        return self.CAM.read()  # HACK: for slow processing to get most recent image

    def current(self):
        """Alias for `vipy.camera.Webcam.next`"""
        return self.next()

    def next(self):
        """Return a `vipy.image.Image` from the camera"""
        k = 0
        while not self.CAM.grab():
            k = k + 1
            # print '[webcam.camera][%d/%d]: invalid grab' % (k, 100)
            if k > 100:
                raise ValueError('Invalid Frame')

        (rval, im) = self.CAM.retrieve()
        if rval is False:
            raise ValueError('Invalid Frame')
        if self.FRAMERATE:
            self.TOC = timeit.default_timer()
            print('[vipy.camera]: frame rate = ' + str(round(1.0 / (self.TOC - self.TIC),1)) + ' Hz')
            self.TIC = self.TOC

        return Image(array=im, colorspace='bgr')

    def frame(self):
        """Alias for `vipy.camera.Webcam.next`"""
        return self.next()

    def video(self, n, framerate=30):
        """Return a `vipy.video.Video` with n frames, constructed using the provided framerate (defaults to 30Hz)"""
        assert n > 0

        frames = []
        for (k,im) in enumerate(self):
            frames.append(im.rgb())
            if k > n:
                break
        return vipy.video.Video(frames=frames, framerate=framerate)


class Ipcam(Camera):
    """Create a IPcam object that will yield `vipy.image.Image` frames.

    >>> cam = vipy.cmaera.IPcam()
    >>> cam.frame().show()

    Or as an iterator:
    
    >>> for im in vipy.camera.IPcam():
    >>>     im.show()

    """

    TMPFILE = None

    def __init__(self, url, imfile=tempimage()):
        self.CAM = url
        self.TMPFILE = imfile
        assert isurl(url)

    def __iter__(self):
        return self

    def next(self):
        urllib.urlretrieve(self.CAM, self.TMPFILE)
        return Image(array=cv2.imread(self.TMPFILE), colorspace='bgr')

Classes

class Camera
Expand source code Browse git
class Camera(object):
    CAM = None
    FRAMERATE = False
    TIC = 0
    TOC = 0
    RESIZE = None
    GREY = None
    PROCESS = None

Subclasses

Class variables

var CAM
var FRAMERATE
var GREY
var PROCESS
var RESIZE
var TIC
var TOC
class Ipcam (url, imfile='/tmp/0b07cd48247dfb33.jpg')

Create a IPcam object that will yield Image frames.

>>> cam = vipy.cmaera.IPcam()
>>> cam.frame().show()

Or as an iterator:

>>> for im in vipy.camera.IPcam():
>>>     im.show()
Expand source code Browse git
class Ipcam(Camera):
    """Create a IPcam object that will yield `vipy.image.Image` frames.

    >>> cam = vipy.cmaera.IPcam()
    >>> cam.frame().show()

    Or as an iterator:
    
    >>> for im in vipy.camera.IPcam():
    >>>     im.show()

    """

    TMPFILE = None

    def __init__(self, url, imfile=tempimage()):
        self.CAM = url
        self.TMPFILE = imfile
        assert isurl(url)

    def __iter__(self):
        return self

    def next(self):
        urllib.urlretrieve(self.CAM, self.TMPFILE)
        return Image(array=cv2.imread(self.TMPFILE), colorspace='bgr')

Ancestors

Class variables

var TMPFILE

Methods

def next(self)
Expand source code Browse git
def next(self):
    urllib.urlretrieve(self.CAM, self.TMPFILE)
    return Image(array=cv2.imread(self.TMPFILE), colorspace='bgr')
class Webcam (framerate=False, idx=0)

Create a webcam object that will yield Image frames.

This is a light wrapper to OpenCV webcam object (cv2.VideoCapture) that yields vipy objects.

>>> cam = vipy.cmaera.Webcam()
>>> cam.frame().show()

Or as an iterator:

>>> for im in vipy.camera.Webcam():
>>>     im.show()

To capture a video:

>>> 

Args

framerate
[float] The framerate to grab from the camera
url
[int] The camera index to open
Expand source code Browse git
class Webcam(Camera):
    """Create a webcam object that will yield `vipy.image.Image` frames.

    This is a light wrapper to OpenCV webcam object (cv2.VideoCapture) that yields vipy objects.

    >>> cam = vipy.cmaera.Webcam()
    >>> cam.frame().show()

    Or as an iterator:
    
    >>> for im in vipy.camera.Webcam():
    >>>     im.show()

    To capture a video:

    >>> 
    Args:
        framerate: [float] The framerate to grab from the camera
        url: [int]  The camera index to open 

    """
    def __init__(self, framerate=False, idx=0):

        assert idx >= 0
        self.CAM = cv2.VideoCapture(idx)
        if not self.CAM.isOpened():
            self.CAM.open(idx)
        self.FRAMERATE = framerate
        if framerate:
            self.TIC = timeit.default_timer()

    def __del__(self):
        self.CAM.release()
        return self

    def __iter__(self):
        while(1):
            im = self.next()
            yield im

    def _read(self):
        return self.CAM.read()  # HACK: for slow processing to get most recent image

    def current(self):
        """Alias for `vipy.camera.Webcam.next`"""
        return self.next()

    def next(self):
        """Return a `vipy.image.Image` from the camera"""
        k = 0
        while not self.CAM.grab():
            k = k + 1
            # print '[webcam.camera][%d/%d]: invalid grab' % (k, 100)
            if k > 100:
                raise ValueError('Invalid Frame')

        (rval, im) = self.CAM.retrieve()
        if rval is False:
            raise ValueError('Invalid Frame')
        if self.FRAMERATE:
            self.TOC = timeit.default_timer()
            print('[vipy.camera]: frame rate = ' + str(round(1.0 / (self.TOC - self.TIC),1)) + ' Hz')
            self.TIC = self.TOC

        return Image(array=im, colorspace='bgr')

    def frame(self):
        """Alias for `vipy.camera.Webcam.next`"""
        return self.next()

    def video(self, n, framerate=30):
        """Return a `vipy.video.Video` with n frames, constructed using the provided framerate (defaults to 30Hz)"""
        assert n > 0

        frames = []
        for (k,im) in enumerate(self):
            frames.append(im.rgb())
            if k > n:
                break
        return vipy.video.Video(frames=frames, framerate=framerate)

Ancestors

Methods

def current(self)

Alias for Webcam.next()

Expand source code Browse git
def current(self):
    """Alias for `vipy.camera.Webcam.next`"""
    return self.next()
def frame(self)

Alias for Webcam.next()

Expand source code Browse git
def frame(self):
    """Alias for `vipy.camera.Webcam.next`"""
    return self.next()
def next(self)

Return a Image from the camera

Expand source code Browse git
def next(self):
    """Return a `vipy.image.Image` from the camera"""
    k = 0
    while not self.CAM.grab():
        k = k + 1
        # print '[webcam.camera][%d/%d]: invalid grab' % (k, 100)
        if k > 100:
            raise ValueError('Invalid Frame')

    (rval, im) = self.CAM.retrieve()
    if rval is False:
        raise ValueError('Invalid Frame')
    if self.FRAMERATE:
        self.TOC = timeit.default_timer()
        print('[vipy.camera]: frame rate = ' + str(round(1.0 / (self.TOC - self.TIC),1)) + ' Hz')
        self.TIC = self.TOC

    return Image(array=im, colorspace='bgr')
def video(self, n, framerate=30)

Return a Video with n frames, constructed using the provided framerate (defaults to 30Hz)

Expand source code Browse git
def video(self, n, framerate=30):
    """Return a `vipy.video.Video` with n frames, constructed using the provided framerate (defaults to 30Hz)"""
    assert n > 0

    frames = []
    for (k,im) in enumerate(self):
        frames.append(im.rgb())
        if k > n:
            break
    return vipy.video.Video(frames=frames, framerate=framerate)