Ejemplo n.º 1
0
class Image():
    cachedimage = None
    image = None
    cache = None
    
    def __init__(self, image=None, cache=Cache()):
        if isnumpy(image):
            self.image = image
        elif image is not None:
            self.cachedimage = CachedObject(image, cache)
        self.cache = cache
        
    def __repr__(self):
        if self.image is not None:
            return str('<bobo.image: image=(%d,%d)>' % (self.image.shape[0], self.image.shape[1]))
        else:
            return str('<bobo.image: uri="%s">' % (self.cachedimage.uri))            

    def parse(self, row):
        """Parse a row from a viset csv textfile into image"""
        self.cachedimage = CachedObject(row, cache=self.cache)        
        self.image = None
        return self
    
    def load(self):
        """Load images from cache"""
        if self.image is not None:
            return self.image
        elif self.cachedimage is not None:
            try:
                quietprint('[bobo.image]: loading "%s"'% self.cachedimage.uri, True);                
                self.image = self.cachedimage.load()
            except (httplib.BadStatusLine, urllib2.URLError, urllib2.HTTPError):
                quietprint('[bobo.image][WARNING]: download failed - ignoring image', True);
            except CacheError:
                quietprint('[bobo.image][WARNING]: cache error during download - ignoring image', True);                
            except IOError:
                quietprint('[bobo.image][WARNING]: IO error during download - ignoring image', True);                
            except:
                #raise
                quietprint('[bobo.image][WARNING]: error during download - ignoring image', True);                
                pass
                
            return self.image
        else:
            return None

    def show(self):
        if self.load() is not None:
            imshow(self.image)

    def filename(self):
        return (self.cachedimage.filename())
Ejemplo n.º 2
0
class ImageCategory():
    cachedimage = None
    image = None
    category = None
    cache = None
    
    def __init__(self, image=None, category=None, cache=Cache()):
        if isnumpy(image):
            self.image = image
        elif image is not None:
            self.cachedimage = CachedObject(image, cache)
        self.category = category
        self.cache = cache
        
    def __repr__(self):
        if self.image is not None:
            return str('<bobo.image.imcategory: image=(%d,%d), category="%s">' % (self.image.shape[0], self.image.shape[1], self.category))
        else:
            return str('<bobo.image.imcategory: uri="%s", category="%s">' % (self.cachedimage.uri, self.category))            

    def __eq__(self, other):
        return self.category.lower() == other.category.lower()

    def __ne__(self, other):
        return self.category.lower() != other.category.lower()

    
    def __hash__(self):
        return hash(self.category.lower())
                
    def parse(self, row):
        """Parse a row from a viset csv textfile into image and category"""
        rowlist = row.encode('utf-8').split()
        self.category = rowlist[1]
        self.cachedimage = CachedObject(rowlist[0], cache=self.cache)        
        self.image = None
        return self
    
    def load(self):
        """Load images from cache"""
        if self.image is not None:
            return self.image
        elif self.cachedimage is not None:
            try:
                quietprint('[bobo.image]: loading "%s"'% self.cachedimage.uri, True);                
                self.image = self.cachedimage.load()
                if self.cachedimage.size() < 10000:
                    quietprint('[bobo.image][WARNING]: invalid download size - ignoring image', True);                                    
                    os.remove(self.cachedimage.filename())
                    return None
            except (httplib.BadStatusLine, urllib2.URLError, urllib2.HTTPError):
                quietprint('[bobo.image][WARNING]: download failed - ignoring image', True);
                self.cachedimage.discard()                
            except CacheError:
                quietprint('[bobo.image][WARNING]: cache error during download - ignoring image', True);
                self.cachedimage.discard()                
            except IOError:
                quietprint('[bobo.image][WARNING]: IO error during download - ignoring image', True);
                self.cachedimage.discard()                
            except:
                raise
            return self.image
        else:
            return None

    def iscategory(self, category):
        return (self.category.lower() == category.lower())
                
    def show(self):
        if self.load() is not None:
            imshow(self.image)

    def export(self):
        """List suitable for export"""
        return [os.path.join(self.cache.root(), self.cachedimage.uri), self.category]

    def filename(self):
        return (self.cachedimage.filename())