Exemple #1
0
    def __init__(self, dev):
        self.caps = None
        self.dev = dev
        self.pipeline = Gst.Pipeline()
        self.bus = self.pipeline.get_bus()
        self.bus.add_signal_watch()
        self.bus.connect("message", self.on_message)
        self.src = VirtualDevice(dev.instream)
        self.vc1 = Gst.ElementFactory.make('videoconvert', None)
        self.video = PlateFinder(dev)
        self.sink = GstOutputStream(dev.outstream, split=False)

        self.pipeline.add(self.src)
        self.pipeline.add(self.vc1)
        self.pipeline.add(self.video)
        self.pipeline.add(self.sink)
        self.src.link(self.vc1)
        self.vc1.link(self.video)
        self.video.link(self.sink)
Exemple #2
0
class Finder(object):
    def __init__(self, dev):
        self.caps = None
        self.dev = dev
        self.pipeline = Gst.Pipeline()
        self.bus = self.pipeline.get_bus()
        self.bus.add_signal_watch()
        self.bus.connect("message", self.on_message)
        self.src = VirtualDevice(dev.instream)
        self.vc1 = Gst.ElementFactory.make('videoconvert', None)
        self.video = PlateFinder(dev)
        self.sink = GstOutputStream(dev.outstream, split=False)

        self.pipeline.add(self.src)
        self.pipeline.add(self.vc1)
        self.pipeline.add(self.video)
        self.pipeline.add(self.sink)
        self.src.link(self.vc1)
        self.vc1.link(self.video)
        self.video.link(self.sink)

    def start(self):
        log.info("starting %s"%self.dev.name)
        self.pipeline.set_state(Gst.State.PLAYING)

    def stop(self):
        log.info("stopping %s"%self.dev.name)
        self.pipeline.set_state(gst.STATE_NULL)

    def restart(self):
	log.info('restarting %s'%self.dev.name)
        self.stop()
        self.start()

    def on_message(self, bus, message):
        t = message.type
        if t == Gst.MessageType.ERROR: 
            err, debug = message.parse_error()
            error = str(err)
            if debug:
                error += " (%s)"%debug
                log.error("monitor '%s' received error; %s"%(self.dev, error))
	    sleep(10)
	    self.restart()
   	    
        elif t == Gst.MessageType.EOS:
            log.warn('EOS')
	    sleep(10)
	    self.restart()
	    
        elif t == Gst.MessageType.STATE_CHANGED:
            old, state, pending = message.parse_state_changed()
            if state == Gst.State.NULL:
                log.info("monitor '%s' main pipeline is stopped"% self.dev.name)
            elif state == Gst.State.PLAYING:
                if message.src == self.pipeline:
                    log.info("'%s' cambio de %s a %s."%(self.dev.name, self.get_state(old), self.get_state(state))) 
        elif t == Gst.MessageType.APPLICATION and message.has_name('video/x-raw'):
            s = message.get_structure()
            self.caps = s.to_string()
            if self.caps.endswith(';'):
                self.caps = self.caps[:-1]
        elif t == Gst.MessageType.INFO:
            e, d = message.parse_info()
            log.debug("{0}: {1}", e, d)
        elif t == Gst.MessageType.WARNING:
            e, d = message.parse_warning()
            error = str(e)
            if d:
                error += " (%s)"%d
                log.warn("monitor '%s' received warning; %s"%(self.dev, error))
	    sleep(10)
	    self.restart()

    
    def stop(self):
        self.pipeline.set_state(Gst.State.NULL)

    def get_state(self, state):
        if state == Gst.State.PLAYING:
            return "playing"
        elif state == Gst.State.READY:
            return "ready"
        elif state == Gst.State.PAUSED:
            return "paused"
        elif state == Gst.State.VOID_PENDING:
            return "pending"
        else:
            return "null"
    
    def __del__(self):
        self.bus.remove_signal_watch()
Exemple #3
0
 def test_oks(self):
     finder = PlateFinder()
     oks=['images/lyd134-1.jpg','images/krq809.jpg','images/krq809-1.jpg']
     for p in oks:
         plate = finder.find(Image(p))
         assert plate