예제 #1
0
 def put_calibrate_images(self, screen_image, cam_img):
     """calibrate(self, screen_image, cam_img) -> None
     Find the screen corners, transform matrix, and light state"""
 
     # find screen corners by comparing the difference between previous taken images
     if self._md is None:
         self._md = MotionDetector(N=2, shape=cam_img.shape)
 
     self._md.feed_image(cam_img.copy())
     
     gray_diff = cvtColor(self._md.diff, COLOR_BGR2GRAY)
     quadrangles = find_polygons(gray_diff, 4, 0.1, 1000, True, 10)
     
     if quadrangles != []:
         self.screens = quadrangles
 
     if self.screens is not None:
         self.compute_transform(screen_img)
예제 #2
0
    def __init__(self,
                 test_res,
                 test_borders=None,
                 full_res=None,
                 localdir=None,
                 remotedir=None,
                 secs=5):
        self.test_res = test_res
        self.width = test_res[0]
        self.height = test_res[1]
        self.localdir = localdir
        self.remotedir = remotedir
        self.full_res = full_res
        self.millisecs = secs * 1000

        self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.win.set_border_width(10)

        # Unfortunately delete and destroy events don't work on the RPi.
        # Not sure why, but most of the time the event never gets passed.
        # It works on other Linux platforms.
        self.win.connect("delete_event", self.quit)
        self.win.connect("destroy", self.quit)

        self.drawing_area = gtk.DrawingArea()
        self.drawing_area.set_size_request(self.width, self.height)
        self.win.add(self.drawing_area)

        self.drawing_area.set_events(
            gtk.gdk.EXPOSURE_MASK |
            # gtk.gdk.POINTER_MOTION_MASK |
            # gtk.gdk.POINTER_MOTION_HINT_MASK |
            gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK)
        self.drawing_area.connect("expose-event", self.expose_handler)
        self.drawing_area.connect("button_press_event", self.button_press)
        self.drawing_area.connect("button_release_event", self.button_release)
        self.drawing_area.connect("motion_notify_event", self.drag_handler)

        # Just for testing, temporarily
        self.num = 0

        gobject.timeout_add(self.millisecs, self.idle_handler,
                            self.drawing_area)

        self.gc = None
        self.pixbuf = None
        self.imgwidth = None
        self.imgheight = None
        self.cur_img = None
        self.drag_start_x = None
        self.drag_start_y = None

        self.win.show_all()

        # And the motion detecting parts,
        # which are infinitely simpler than the GTK garbage:
        self.md = MotionDetector(test_res=test_res,
                                 test_borders=test_borders,
                                 full_res=self.full_res,
                                 localdir=self.localdir,
                                 remotedir=self.localdir,
                                 verbose=2)
        self.buf1 = None
        self.buf2 = None
예제 #3
0
    def __init__(self,
                 test_res,
                 test_borders=None,
                 full_res=None,
                 localdir=None,
                 remotedir=None,
                 secs=5,
                 rangefinder=None):
        self.test_res = test_res
        self.width = test_res[0]
        self.height = test_res[1]
        self.localdir = localdir
        self.remotedir = remotedir
        self.full_res = full_res
        self.millisecs = secs * 1000

        self.use_tmp_file = True

        self.win = gtk.Window()
        self.win.set_border_width(10)

        # Unfortunately delete and destroy events don't work on the RPi.
        # Not sure why, but most of the time the event never gets passed.
        # It works on other Linux platforms.
        self.win.connect("delete_event", self.quit)
        self.win.connect("destroy", self.quit)

        vbox = gtk.VBox(spacing=3)
        self.win.add(vbox)

        self.drawing_area = gtk.DrawingArea()
        self.drawing_area.set_size_request(self.width, self.height)
        #self.win.add(self.drawing_area)
        vbox.pack_start(self.drawing_area)

        self.drawing_area.set_events(
            gtk.gdk.EXPOSURE_MASK |
            # gtk.gdk.POINTER_MOTION_MASK |
            # gtk.gdk.POINTER_MOTION_HINT_MASK |
            gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK)

        try:
            # GTK2:
            self.drawing_area.connect("expose-event", self.expose_handler)
        except TypeError:
            # Python3/GI GTK3:
            self.drawing_area.connect('size-allocate', self.on_size_allocate)
            self.width = self.height = 0
            self.drawing_area.connect('draw', self.expose3)

        self.drawing_area.connect("button_press_event", self.button_press)
        self.drawing_area.connect("button_release_event", self.button_release)
        self.drawing_area.connect("motion_notify_event", self.drag_handler)

        # Just for testing, temporarily
        self.num = 0

        glib.timeout_add(self.millisecs, self.idle_handler, self.drawing_area)

        # GTK2: X GC
        self.gc = None

        self.redgc = None
        self.pixbuf = None
        self.imgwidth = None
        self.imgheight = None
        self.cur_img = None
        self.drag_start_x = None
        self.drag_start_y = None

        try:
            self.win.show_all()
        except:
            print("Couldn't show window: exiting")
            sys.exit(1)

        # And the motion detecting parts,
        # which are infinitely simpler than the GTK garbage:
        self.md = MotionDetector(test_res=test_res,
                                 test_borders=test_borders,
                                 full_res=self.full_res,
                                 sensitivity=400,
                                 threshold=30,
                                 localdir=self.localdir,
                                 remotedir=self.localdir,
                                 rangefinder=rangefinder,
                                 verbose=2)
        self.buf1 = None
        self.buf2 = None