Exemplo n.º 1
0
 def __init__(self, url):
     self.url = url
     self.input = urllib2.urlopen(url)
     self.process_data = threading.Event()
     
     self.server = SimpleThreadedHTTPServer('', 8080, self.process_data)
     
     # Use jpegtran to perform lossless fast transformations on the image.
     # You can pipe together as many commands as you'd like here.
     self.jpegtran_transform = "jpegtran -flip horizontal |  jpegtran -flip vertical"
     
     # PIL transformation options. These are quite a bit slower - not to mention
     # lossy - compared to jpegtran.
     self.pil_transform = False
     self.pil_quality = 90
     self.pil_size = (1024,768)
Exemplo n.º 2
0
class Camera(object):
    def __init__(self, url):
        self.url = url
        self.input = urllib2.urlopen(url)
        self.process_data = threading.Event()
        
        self.server = SimpleThreadedHTTPServer('', 8080, self.process_data)
        
        # Use jpegtran to perform lossless fast transformations on the image.
        # You can pipe together as many commands as you'd like here.
        self.jpegtran_transform = "jpegtran -flip horizontal |  jpegtran -flip vertical"
        
        # PIL transformation options. These are quite a bit slower - not to mention
        # lossy - compared to jpegtran.
        self.pil_transform = False
        self.pil_quality = 90
        self.pil_size = (1024,768)
                    
    def run(self):
        self.server.start()
        
        while True:
            # Block until the server indicates we have at least one client.
            self.process_data.wait()
            
            # Note: This exact sequence works for newiswh Vivotek cameras.
            # I'm sure there is a much better way of doing this.
            self.input.readline()
            self.input.readline()
            content_length = int(self.input.readline().split(": ")[1].strip())
            self.input.readline()
                    
            if self.jpegtran_transform:
                transformations = subprocess.Popen(self.jpegtran_transform, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
                data, _ = transformations.communicate(self.input.read(content_length))
            else:
                data = self.input.read(content_length)
                
            if self.pil_transform:
                output = StringIO.StringIO()
                im = Image.open(io.BytesIO(data))
                if self.pil_size:
                    im = im.resize(self.pil_size)
                im.save(output, format="jpeg", quality=self.pil_quality)
                
                self.server.add(output.getvalue())
            else:
                self.server.add(data)