Browse Source

Adicionando verificacao

lego 6 years ago
parent
commit
0d6fbd2757
5 changed files with 49 additions and 43 deletions
  1. 40 34
      cmarkers.py
  2. 2 2
      player-camera.py
  3. 1 1
      player-lejos.py
  4. 2 2
      player-virtual.py
  5. 4 4
      server.py

+ 40 - 34
cmarkers.py

@@ -3,6 +3,16 @@ import numpy as np
 import math
 from numpy.linalg import norm
 
+validcheck = [[False, True, False, False],
+[False, True, True, False],
+[False, False, True, False],
+[True, False, True, True],
+[True, False, True, False],
+[True, True, False, False],
+[True, True, False, True],
+[True, False, False, True]]
+
+
 def getCMarkers (img):
     markers = []
     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
@@ -67,10 +77,6 @@ def getCMarkers (img):
             k.append((point.pt, count))
             kk.append(point)
 
-
-    img2 = cv2.drawKeypoints(img2, kk, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
-    cv2.imshow("m3", img2)
-
     for point in k:
         p, near = point
         # distance open the angre and 90 degree
@@ -85,38 +91,38 @@ def getCMarkers (img):
                 v = np.array([p2[0]-p[0], p2[1]-p[1]])
                 c = np.dot(u,v)/norm(u)/norm(v)
                 angle = np.arccos(c)
-                if abs(angle) > midistance:
+                if abs(angle-math.pi/2.0) < math.pi/10.0:
                     bottom = p1
                     rigth = p2
-                    midistance = abs(angle-math.pi/2.0)
-
-        if midistance == math.pi/10:
-            continue
-
-        u = np.array([bottom[0]-p[0], bottom[1]-p[1]])
-        v = np.array([rigth[0]-p[0], rigth[1]-p[1]])
-        if u[1] > v[1]:
-            u,v = v,u
-        conner = rigth+u
-        addu = u*1.0/6.0
-        addv = v*1.0/6.0
-        conners = [p-addu-addv, bottom+addu-addv, rigth-addu+addv, conner+addu+addv]
-        trans = get_transform_matrix_points(conners, [10, 10], 10)
-        code = cv2.warpPerspective(gray, trans, dsize=(100, 100))
-        # code = cv2.erode(code, kernel,iterations = 1)
-        cv2.imshow("m2", code)
-
-        number = getNumber(code, 150)
-        if number == False:
-            continue
-
-        uu = np.array([0, 1])
-        vv = np.array([p[0]-bottom[0], p[1]-bottom[1]])
-        c = np.dot(uu,vv)/norm(uu)/norm(vv)
-        angle = np.arccos(c)
-        mid = p+u*0.5+v*0.5
-        if number != 0:
-            markers.append([number, mid, angle])
+
+                    
+                    conner = rigth+u
+                    addu = u/6.0
+                    addv = v/6.0
+                    conners = [p-addu-addv, bottom+addu-addv, rigth-addu+addv, conner+addu+addv]
+                    trans = get_transform_matrix_points(conners, [10, 10], 10)
+                    code = cv2.warpPerspective(gray, trans, dsize=(100, 100))
+
+
+                    number = getNumber(code, 150)
+                    if number == False:
+                        continue
+                    uvalid, vvalid = u >= 0, v > 0
+                    valid = [uvalid[0], uvalid[1], vvalid[0], vvalid[1]]
+
+                    if valid not in validcheck:
+                        continue
+                    #cv2.imshow("m2", code)
+
+                    uu = np.array([0, 1])
+                    angle = np.math.atan2(np.linalg.det([v,uu]),np.dot(v,uu))
+
+                    mid = p+u*0.5+v*0.5
+                    if number != 0:
+                        markers.append([number, mid, angle])
+    
+    img2 = cv2.drawKeypoints(img2, kk, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
+    cv2.imshow("m3", img2)
     return markers
 
 def getNumber(img, threshold):

+ 2 - 2
player-camera.py

@@ -6,13 +6,13 @@ import signal, sys
 import math
 import time
 
-rid = 14
+rid = 11
 run = False
 board = None
 tagplayer = -1
 
 client = TagClient('localhost', 10318)
-client.info(rid, 8, 8, 4, 4)
+client.info(rid, 14, 19, 7, 13.5)
 
 px, py, course = None, None, None
 

+ 1 - 1
player-lejos.py

@@ -19,7 +19,7 @@ s.connect((serverMACAddress, port))
 #sock.close()
 
 
-rid = 2
+rid = 11
 run = False
 board = None
 tagplayer = -1

+ 2 - 2
player-virtual.py

@@ -61,8 +61,8 @@ while not client.quit:
         # comportamento de fuga
         if tag in players and tag != rid:
             # foge se nao for pegador 
-            px = px + (px-players[tag][0])/900.0
-            py = py + (py-players[tag][1])/900.0
+            px = px + (px-players[tag][0])/180.0
+            py = py + (py-players[tag][1])/180.0
 
             course = course+(random()-0.5)/5.0
             client.setPosition(px, py, course)

+ 4 - 4
server.py

@@ -152,7 +152,7 @@ def get_green_dots(img_orig):
 ### Calibration Example ###
 if __name__ == "__main__":
     parser = argparse.ArgumentParser()
-    cam_id = 0
+    cam_id = 1
     dev = None
     
     parser.add_argument('-a',
@@ -189,9 +189,9 @@ if __name__ == "__main__":
     # Calculate the perspective transform matrix
     transform = None
     if manual and camera:
-        pass
         #transform = get_transform_matrix(dev, board_size, dpi)
-        # transform = get_transform_matrix_points([(327, 75), (280, 475), (805, 141), (805, 568)], board_size, dpi)
+        transform = get_transform_matrix_points([(74, 20), (76, 399), (445, 4), (530, 368)]
+, board_size, dpi)
 
     server = tag.TagServer(10318, board_size)
 
@@ -210,7 +210,7 @@ if __name__ == "__main__":
                     centers = get_green_dots(img_orig)
                     transform = get_transform_matrix_points(centers, board_size, dpi)
 
-                img = img_orig
+                img = cv2.warpPerspective(img_orig, transform, dsize=transform_size)
                 markers = getCMarkers(img)
 
                 for i in markers: