コード例 #1
0
ファイル: test_corners_position.py プロジェクト: Sasza/pisak
def stats(points):
    global prop_max, prop_min, angle_max, angle_min, rot_max, angle_diff_max, angle_diff_min
    a = length(vector(points[0], points[1]))
    b = length(vector(points[1], points[2]))
    c = length(vector(points[2], points[3]))
    d = length(vector(points[3], points[0]))
    if a > c:
        a, c = c, a
    if b > d:
        b, d = d, b
    if c == 0.0:
        pass
    else:
        # print "sides a/c:", a/c
        if (c - a) / c > prop_max:
            prop_max = (c - a) / c
        if (c - a) / c < prop_min:
            prop_min = (c - a) / c
    if d == 0.0:
        pass
    else:
        # print "sides b/d", b/d
        if (d - b) / d > prop_max:
            prop_max = (d - b) / d
        if (d - b) / d < prop_min:
            prop_min = (d - b) / d
    corners = Corner.get_corners(points)
    for cor in corners:
        if cor.angle < angle_min:
            angle_min = cor.angle
        if cor.angle > angle_max:
            angle_max = cor.angle
        if cor.rotation > rot_max:
            rot_max = cor.rotation
    a, b, c, d = [c.angle for c in corners]
    if a > c:
        a, c = c, a
    if b > d:
        b, d = d, b
    if (c - a) / c > angle_diff_max:
        angle_diff_max = (c - a) / c
    if (c - a) / c < angle_diff_min:
        angle_diff_min = (c - a) / c
    # print "angle diff a/c", (c-a)/c
    if (d - b) / d > angle_diff_max:
        angle_diff_max = (d - b) / d
    if (d - b) / d < angle_diff_min:
        angle_diff_min = (d - b) / d
    # print "angle diff b/d", (d-b)/d
    if angle_diff_max > 0.90:
        pass
コード例 #2
0
 def _predict(self,npoints):
     cv.FillConvexPoly(self.draw_img, npoints, (0,0,0))
     corners = Corner.get_corners(npoints)
     tcorners = list(corners)
     for i,cor in enumerate(corners):
         print cor.p
         if not(0<=cor.p[0]<self.size and 0<=cor.p[1]<self.size):
             tcorners[i]=None
     
     CP = CornerPredictor(self.corners, 1, self.tmp_img, self.timg, self.draw_img)
     print "predicting....",tcorners
     ncorners = CP.predict_corners(tcorners)
     print 'done'
     for i,cor in enumerate(ncorners):
         v=vector(corners[i].p,cor.p)
         print length(v), cor.toString()
         self.assertTrue(length(v)<5,"Wrong prediction!Corner: %d \
         Expected: (%d,%d) received (%d,%d)" \
         %(i,corners[i].p[0],corners[i].p[1],cor.p[0],cor.p[1]))
     print ncorners  
コード例 #3
0
def stats(points):
    global prop_max, prop_min, angle_max, angle_min, rot_max, angle_diff_max, angle_diff_min
    a = length(vector(points[0], points[1]))
    b = length(vector(points[1], points[2]))
    c = length(vector(points[2], points[3]))
    d = length(vector(points[3], points[0]))
    if a > c:
        a, c = c, a
    if b > d:
        b, d = d, b
    if c == 0.0:
        pass
    else:
        #print "sides a/c:", a/c
        if (c - a) / c > prop_max: prop_max = (c - a) / c
        if (c - a) / c < prop_min: prop_min = (c - a) / c
    if d == 0.0:
        pass
    else:
        #print "sides b/d", b/d
        if (d - b) / d > prop_max: prop_max = (d - b) / d
        if (d - b) / d < prop_min: prop_min = (d - b) / d
    corners = Corner.get_corners(points)
    for cor in corners:
        if cor.angle < angle_min: angle_min = cor.angle
        if cor.angle > angle_max: angle_max = cor.angle
        if cor.rotation > rot_max: rot_max = cor.rotation
    a, b, c, d = [c.angle for c in corners]
    if a > c:
        a, c = c, a
    if b > d:
        b, d = d, b
    if (c - a) / c > angle_diff_max: angle_diff_max = (c - a) / c
    if (c - a) / c < angle_diff_min: angle_diff_min = (c - a) / c
    #print "angle diff a/c", (c-a)/c
    if (d - b) / d > angle_diff_max: angle_diff_max = (d - b) / d
    if (d - b) / d < angle_diff_min: angle_diff_min = (d - b) / d
    #print "angle diff b/d", (d-b)/d
    if angle_diff_max > 0.90:
        pass
コード例 #4
0
    def set_new_position(self, points_or_corners, offset=True, scale=1):
        '''
        Sets new position for this marker using points (in order)
        @param points_or_corners: list of points or corners
        @param offset: if true, image ROI is checked and points are shifted
        '''
        if len(points_or_corners) > 0 and type(points_or_corners[0]) == tuple:
            self.predicted = -1
            points = points_or_corners
            img = self.m_d.img
            (x, y, _, _) = rect = cv.GetImageROI(img)
            if offset and (x, y) <> (0, 0):
                points = map(lambda z: add((x, y), z), points)
            cv.ResetImageROI(img)
            crit = (cv.CV_TERMCRIT_EPS + cv.CV_TERMCRIT_ITER, 30, 0.1)
            if (scale > 1):
                points = cv.FindCornerSubPix(self.m_d.gray_img, points,
                                             (scale * 2 + 4, scale * 2 + 4),
                                             (-1, -1), crit)
            else:
                points = cv.FindCornerSubPix(self.m_d.gray_img, points, (3, 3),
                                             (-1, -1), crit)
            ncorners = Corner.get_corners(points, self.m_d.time)
            if len(self.corners) <> 0:
                for i, cor in enumerate(ncorners):
                    cor.compute_change(self.corners[i])
            cv.SetImageROI(img, rect)
        else:
            ncorners = points_or_corners
            self.predicted += len(filter(lambda x: x.is_predicted, ncorners))
        for i, c in enumerate(ncorners):
            c.black_inside = self.black_inside
#            if len(self.corners)==4:
#                if dist_points(c.p, self.corners[i].p)<4:
#                    c.p=self.corners[i].p
        self.corners = ncorners

        self.area = abs(cv.ContourArea(self.points))
        self.last_seen = self.m_d.time
        self.model_view = None
コード例 #5
0
ファイル: marker.py プロジェクト: BrainTech/eyetracker
    def set_new_position(self, points_or_corners, offset=True, scale=1):
        '''
        Sets new position for this marker using points (in order)
        @param points_or_corners: list of points or corners
        @param offset: if true, image ROI is checked and points are shifted
        '''
        if len(points_or_corners) > 0 and type(points_or_corners[0]) == tuple:
            self.predicted = -1
            points = points_or_corners
            img = self.m_d.img
            (x, y, _, _) = rect = cv.GetImageROI(img)
            if offset and (x, y) <> (0, 0):
                points = map(lambda z: add((x, y), z), points)
            cv.ResetImageROI(img)
            crit = (cv.CV_TERMCRIT_EPS + cv.CV_TERMCRIT_ITER, 30, 0.1)
            if (scale > 1):
                points = cv.FindCornerSubPix(self.m_d.gray_img, points, (scale * 2 + 4, scale * 2 + 4), (-1, -1), crit)
            else:
                points = cv.FindCornerSubPix(self.m_d.gray_img, points, (3, 3), (-1, -1), crit)
            ncorners = Corner.get_corners(points, self.m_d.time)
            if len(self.corners) <> 0:
                for i, cor in enumerate(ncorners):
                    cor.compute_change(self.corners[i])
            cv.SetImageROI(img, rect)
        else:
            ncorners = points_or_corners
            self.predicted += len(filter(lambda x:x.is_predicted, ncorners))
        for i,c in enumerate(ncorners):
            c.black_inside=self.black_inside
#            if len(self.corners)==4:
#                if dist_points(c.p, self.corners[i].p)<4:
#                    c.p=self.corners[i].p
        self.corners = ncorners

        self.area = abs(cv.ContourArea(self.points))
        self.last_seen = self.m_d.time
        self.model_view = None