-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
79 lines (65 loc) · 8.21 KB
/
Copy pathutils.py
File metadata and controls
79 lines (65 loc) · 8.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import cv2
import numpy as np
import pandas as pd
# [black, orange, blue, green, purple]
HOLDCOORDINATES = [[1020, 1225], [960, 1225], [900, 1225], [840, 1225], [780, 1225], [720, 1225], [660, 1225], [600, 1225], [540, 1225], [480, 1225], [420, 1225], [360, 1225], [300, 1225], [240, 1225], [180, 1225], [120, 1225], [60, 1225], [60, 1165], [120, 1165], [180, 1165], [240, 1165], [300, 1165], [360, 1165], [420, 1165], [480, 1165], [540, 1165], [600, 1165], [660, 1165], [720, 1165], [780, 1165], [840, 1165], [900, 1165], [960, 1165], [1020, 1165], [60, 1105], [120, 1105], [180, 1105], [240, 1105], [300, 1105], [360, 1105], [420, 1105], [480, 1105], [540, 1105], [600, 1105], [660, 1105], [720, 1105], [780, 1105], [840, 1105], [900, 1105], [960, 1105], [1020, 1105], [60, 1045], [120, 1045], [180, 1045], [240, 1045], [300, 1045], [360, 1045], [420, 1045], [480, 1045], [540, 1045], [600, 1045], [660, 1045], [720, 1045], [780, 1045], [840, 1045], [900, 1045], [960, 1045], [1020, 1045], [60, 985], [120, 985], [180, 985], [240, 985], [300, 985], [360, 985], [420, 985], [480, 985], [540, 985], [600, 985], [660, 985], [720, 985], [780, 985], [840, 985], [900, 985], [960, 985], [1020, 985], [60, 925], [120, 925], [180, 925], [240, 925], [300, 925], [360, 925], [420, 925], [480, 925], [540, 925], [600, 925], [660, 925], [720, 925], [780, 925], [840, 925], [900, 925], [960, 925], [1020, 925], [60, 865], [120, 865], [180, 865], [240, 865], [300, 865], [360, 865], [420, 865], [480, 865], [540, 865], [600, 865], [660, 865], [720, 865], [780, 865], [840, 865], [900, 865], [960, 865], [1020, 865], [60, 805], [120, 805], [180, 805], [240, 805], [300, 805], [360, 805], [420, 805], [480, 805], [540, 805], [600, 805], [660, 805], [720, 805], [780, 805], [840, 805], [900, 805], [960, 805], [1020, 805], [60, 745], [120, 745], [180, 745], [240, 745], [300, 745], [360, 745], [420, 745], [480, 745], [540, 745], [600, 745], [660, 745], [720, 745], [780, 745], [840, 745], [900, 745], [960, 745], [1020, 745], [60, 685], [120, 685], [180, 685], [240, 685], [300, 685], [360, 685], [420, 685], [480, 685], [540, 685], [600, 685], [660, 685], [720, 685], [780, 685], [840, 685], [900, 685], [960, 685], [1020, 685], [60, 625], [120, 625], [180, 625], [240, 625], [300, 625], [360, 625], [420, 625], [480, 625], [540, 625], [600, 625], [660, 625], [720, 625], [780, 625], [840, 625], [900, 625], [960, 625], [1020, 625], [60, 565], [120, 565], [180, 565], [240, 565], [300, 565], [360, 565], [420, 565], [480, 565], [540, 565], [600, 565], [660, 565], [720, 565], [780, 565], [840, 565], [900, 565], [960, 565], [1020, 565], [60, 505], [120, 505], [180, 505], [240, 505], [300, 505], [360, 505], [420, 505], [480, 505], [540, 505], [600, 505], [660, 505], [720, 505], [780, 505], [840, 505], [900, 505], [960, 505], [1020, 505], [60, 445], [120, 445], [180, 445], [240, 445], [300, 445], [360, 445], [420, 445], [480, 445], [540, 445], [600, 445], [660, 445], [720, 445], [780, 445], [840, 445], [900, 445], [960, 445], [1020, 445], [60, 385], [120, 385], [180, 385], [240, 385], [300, 385], [360, 385], [420, 385], [480, 385], [540, 385], [600, 385], [660, 385], [720, 385], [780, 385], [840, 385], [900, 385], [960, 385], [1020, 385], [60, 325], [120, 325], [180, 325], [240, 325], [300, 325], [360, 325], [420, 325], [480, 325], [540, 325], [600, 325], [660, 325], [720, 325], [780, 325], [840, 325], [900, 325], [960, 325], [1020, 325], [60, 265], [120, 265], [180, 265], [240, 265], [300, 265], [360, 265], [420, 265], [480, 265], [540, 265], [600, 265], [660, 265], [720, 265], [780, 265], [840, 265], [900, 265], [960, 265], [1020, 265], [60, 205], [120, 205], [180, 205], [240, 205], [300, 205], [360, 205], [420, 205], [480, 205], [540, 205], [600, 205], [660, 205], [720, 205], [780, 205], [840, 205], [900, 205], [960, 205], [1020, 205], [60, 145], [120, 145], [180, 145], [240, 145], [300, 145], [360, 145], [420, 145], [480, 145], [540, 145], [600, 145], [660, 145], [720, 145], [780, 145], [840, 145], [900, 145], [960, 145], [1020, 145], [1050, 1255], [990, 1255], [930, 1255], [870, 1255], [810, 1255], [750, 1255], [690, 1255], [630, 1255], [570, 1255], [510, 1255], [450, 1255], [390, 1255], [330, 1255], [270, 1255], [210, 1255], [150, 1255], [90, 1255], [30, 1255], [30, 1135], [150, 1135], [270, 1135], [390, 1135], [510, 1135], [630, 1135], [750, 1135], [870, 1135], [990, 1135], [90, 1075], [210, 1075], [330, 1075], [450, 1075], [570, 1075], [690, 1075], [810, 1075], [930, 1075], [1050, 1075], [30, 1015], [150, 1015], [270, 1015], [390, 1015], [510, 1015], [630, 1015], [750, 1015], [870, 1015], [990, 1015], [90, 955], [210, 955], [330, 955], [450, 955], [570, 955], [690, 955], [810, 955], [930, 955], [1050, 955], [30, 895], [150, 895], [270, 895], [390, 895], [510, 895], [630, 895], [750, 895], [870, 895], [990, 895], [90, 835], [210, 835], [330, 835], [450, 835], [570, 835], [690, 835], [810, 835], [930, 835], [1050, 835], [30, 775], [150, 775], [270, 775], [390, 775], [510, 775], [630, 775], [750, 775], [870, 775], [990, 775], [90, 715], [210, 715], [330, 715], [450, 715], [570, 715], [690, 715], [810, 715], [930, 715], [1050, 715], [30, 655], [150, 655], [270, 655], [390, 655], [510, 655], [630, 655], [750, 655], [870, 655], [990, 655], [90, 595], [210, 595], [330, 595], [450, 595], [570, 595], [690, 595], [810, 595], [930, 595], [1050, 595], [30, 535], [150, 535], [270, 535], [390, 535], [510, 535], [630, 535], [750, 535], [870, 535], [990, 535], [90, 475], [210, 475], [330, 475], [450, 475], [570, 475], [690, 475], [810, 475], [930, 475], [1050, 475], [30, 415], [150, 415], [270, 415], [390, 415], [510, 415], [630, 415], [750, 415], [870, 415], [990, 415], [90, 355], [210, 355], [330, 355], [450, 355], [570, 355], [690, 355], [810, 355], [930, 355], [1050, 355], [30, 295], [150, 295], [270, 295], [390, 295], [510, 295], [630, 295], [750, 295], [870, 295], [990, 295]]
colors = [(0, 0, 0), (0, 221, 0), (255, 255, 0), (0, 165, 255), (255, 0, 255)]
# colors = ["black", "#FFA500", "#00FFFF", "#00DD00", "#FF00FF"]
def drawImg(img="base_kilter_board.png", holdArray=[], holdCoordinates=HOLDCOORDINATES, saveImg=True, name="output.png"):
xCoords, yCoords = translateCoords(holdCoordinates)
if len(holdArray.shape) != 1:
holdArray = holdArray.flatten()
if img == "base_kilter_board.png":
img = cv2.imread(img)
for i in range(holdArray.size):
if holdArray[i] > 0:
# cv2.circle(img, holdCoordinates[i], 25, colors[int(holdArray[i])], 5)
try:
cv2.circle(img, (xCoords[i % 35], yCoords[i // 35]), 25, colors[int(holdArray[i])], 5)
except:
print("Tried to draw on an invalid hold")
if saveImg:
cv2.imwrite(name, img)
return img
def readCSV(file="training_data30.csv"):
shape = pd.read_csv(file, nrows=1)
shape.drop('Unnamed: 0', axis=1)
df = pd.read_csv(file, skiprows=2)
holds = df.drop('rating', axis=1)
holds = holds.drop('Unnamed: 0', axis=1)
ratings = df['rating']
return shape.to_numpy()[0][1:], holds.to_numpy(), ratings.to_numpy()
def translateCoords(HOLDCOORDINATES):
xCoords = [coord[0] for coord in HOLDCOORDINATES]
yCoords = [coord[1] for coord in HOLDCOORDINATES]
setx = set(xCoords)
sety = set(yCoords)
return (sorted(list(setx)), sorted(list(sety)))
def drawMultipleImages(holdArrays, holdCoordinates=HOLDCOORDINATES, saveImg=True, name="output.png"):
xCoords, yCoords = translateCoords(holdCoordinates)
img = np.array([])
if holdArrays.shape[0] != 4:
print("Invalid number of holdArrays")
return
routes = []
for holdArray in holdArrays:
routes.append(drawImg(holdArray=holdArray, holdCoordinates=holdCoordinates, saveImg=False))
top_row = np.hstack((routes[0], routes[1]))
bottom_row = np.hstack((routes[2], routes[3]))
img = np.vstack((top_row, bottom_row))
if saveImg:
img = cv2.resize(img, (1400, 1400), interpolation=cv2.INTER_AREA)
cv2.imwrite(name, img)
return img
# sh, x, y = readCSV()
# print(sh, x.shape, y.shape)
def normalizeData(data):
data = data / 4
data[data == 0] = -1
return data
# return (data - 2) / 2
def denormalizeData(data):
data[data == -1] = 0
data = data * 4
return np.abs(data).astype(int)
# return (data + 1) * 2