Skip to content

Latest commit

 

History

History
3595 lines (3274 loc) · 162 KB

README.org

File metadata and controls

3595 lines (3274 loc) · 162 KB

#-*- org-todo-keyword-faces: ((“TODO” . org-warning) (“FAILED” . “red”) (“DONE” . “green”)); -*-

Solvation Steps. Как я выполнил задание.

Classical approach have been used with help of OpenCV library.

The task have been solved in following order:

  1. Found two rectangles at hint image for hints with help of cv.findContours and collected statistic about max/min position of them.
  2. Fixed angle for main image with help of cv.HoughLinesP
  3. Found train position on main images by HSV colour range.
  4. Found subimages points on first main image with help of cv.SIFT and cv.FlannBasedMatcher.
  5. Calcuate hint position by clustering points with help of cv.kmeans automatic clustering.
  6. Calculate closes train by x and by y coordinates to found hint subimages.

Additional task is not solved.

Accuracy: 0.9137254901960784 or 91%

This task may be solved with better accuracy and speed if NN would be used. I don’t have GPU now.

If I would use NNs I would train of PyTorch Object Detection model and simple CNN with fully connected layers to match images and predict result.

В следующем порядке:

  1. Нашел два прямоугольника на изображении подсказке с помощью cv.findContours и собрал статистику об их максимальном/минимальном положении.
  2. Исправил угол основного изображения с помощью cv.HoughLinesP.
  3. Нашел положение поезда на основных изображениях по цветовой гамме HSV.
  4. нашел точки подизображения-подсказк на первом основном изображении с помощью cv.SIFT и cv.FlannBasedMatcher.
  5. Нашел центры подизображения-подсказк по точкам c помощью KMean автоматической кластеризации.
  6. Расчил ближайшее положение поезда к подсказкам по координатам x и y.

Дополнительно задание не выполнял.

Точность 0.9137254901960784 или 91%

Эту задачу можно решить с большей точностью и скоростью, если использовать NN. Просто у меня сейчас нет GPU и я не хочу тратить время на веб интервейс в Kaggle или Google Colab.

Если бы я использовал NN, я бы обучил модель обнаружения объектов PyTorch и простую CNN с полностью связанными слоями для сопоставления изображений и прогнозирования результата.

How to test

python final.py task1.1/mixed_train_to_the_coordinates_dataset/2627.jpg | head -n1

2

where 2 is a number of image in range 0-6

Used tools or requirements

  • Python 3.11
  • cv2==4.8.0
  • pandas==2.1.1
  • numpy==1.25.2
  • scipy==1.11.3

Task itself

2023-11-18 task file https://talantix.ru/ats/testTasks/97b2b22a922b4eac917314012f6a3505

data 52MB: https://drive.google.com/file/d/1WVZIeqPdfi7TR7rRoLkB-xRIQr9F0uWw/view

  • train_to_the_coordinates_dataset.zip
  • accuracy required 85%

Task: select one image from 7 according to hint image.

2023-11-22 task change: https://talantix.ru/ats/testTasks/8158a092bdd64992ae7c1318c2ff8386

  • task1.1/CVResearcherv1.1.pdf
  • new dataset and labels
  • accuracy required to be at least 90%.
  • additional optional variations of images to solve
    • 4x4 grid
    • train don’t have colour
    • background have more contrast
  • numbers and figures may occur interchangable
  • at hint figure occur more fuzzy
  • numbers have random coloured background rectangle

labelme - used for json format of target

https://github.com/wkentaro/labelme dependencies that I MUST INSTALL ON MY OWN PC!

  • “gdown”,
  • “imgviz>=0.11”,
  • “matplotlib”,
  • “natsort>=7.1.0”,
  • “numpy”,
  • “onnxruntime>=1.14.1”,
  • “Pillow>=2.8”,
  • “PyYAML”,
  • “qtpy!=1.11.2”,
  • “scikit-image”,
  • “termcolor”,

Data exploration

files task1.0

dataset is very small:

ls -al train_to_the_coordinates_dataset/ | head
ls -al train_to_the_coordinates_dataset/*.jpg | wc -l
ls -al train_to_the_coordinates_dataset/*.json | wc -l
total 58020
drwxrwxr-x 1 u u 35700 Oct 31 17:58 .
drwxrwxr-x 1 u u   220 Nov 18 14:55 ..
-rw-rw-r-- 1 u u 50349 Aug  4 02:01 2626.jpg
-rw-rw-r-- 1 u u  5422 Aug  8 12:46 2626.json
-rw-rw-r-- 1 u u 42980 Aug  4 02:01 2627.jpg
-rw-rw-r-- 1 u u  5410 Aug  8 12:47 2627.json
-rw-rw-r-- 1 u u 43888 Aug  4 02:01 2628.jpg
-rw-rw-r-- 1 u u  5420 Aug  8 12:48 2628.json
-rw-rw-r-- 1 u u 46580 Aug  4 02:01 2629.jpg
1050
1050

train_to_the_coordinates_dataset/2626.jpg

At image i see:

  • 7 same images with:
    • digits at top: 22, 23, 24
    • 3 images at left with fugure.
    • dot at one of 3x3 grid
  • 1 image with:
    • one of 3 figure with digit 22

train_to_the_coordinates_dataset/2626.jpg

file train_to_the_coordinates_dataset/2626.jpg
train_to_the_coordinates_dataset/2626.jpg: JPEG image data, baseline, precision 8, 1400x400, components 3

train_to_the_coordinates_dataset/2627.jpg

At image i see:

  • 7 same images with:
    • digits at top: 16, 17, 18
    • 3 images at left with fugure.
    • dot at one of 3x3 grid
  • 1 image with:
    • one of 3 figure with digit 17

orientation and size of images are different shape is the same, I guess.

train_to_the_coordinates_dataset/2627.jpg

train_to_the_coordinates_dataset/2626.json

cat train_to_the_coordinates_dataset/2626.json | wc -l
# cat train_to_the_coordinates_dataset/2626.json | head -n 100 | tr  '
' ' '
cat train_to_the_coordinates_dataset/2626.json | head -n 100
277
{
  "version": "5.2.1",
  "flags": {},
  "shapes": [
    {
      "label": "+",
      "points": [
        [
          517.4107142857143,
          99.10714285714286
        ]
      ],
      "group_id": null,
      "description": "",
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "1",
      "points": [
        [
          22.689075630252102,
          118.9075630252101
        ],
        [
          53.78151260504201,
          158.40336134453784
        ]
      ],
      "group_id": null,
      "description": "",
      "shape_type": "rectangle",
      "flags": {}
    },
    {
      "label": "2",
      "points": [
        [
          23.52941176470588,
          74.36974789915968
        ],
        [
          57.14285714285714,
          111.34453781512607
        ]
      ],
      "group_id": null,
      "description": "",
      "shape_type": "rectangle",
      "flags": {}
    },
    {
      "label": "3",
      "points": [
        [
          24.369747899159666,
          29.83193277310925
        ],
        [
          59.66386554621849,
          67.64705882352942
        ]
      ],
      "group_id": null,
      "description": "",
      "shape_type": "rectangle",
      "flags": {}
    },
    {
      "label": "4",
      "points": [
        [
          67.22689075630252,
          7.983193277310924
        ],
        [
          96.63865546218487,
          34.87394957983194
        ]
      ],
      "group_id": null,
      "description": "",
      "shape_type": "rectangle",
      "flags": {}
    },
    {
      "label": "5",
      "points": [
        [
          110.92436974789916,
          11.344537815126053
        ],
        [
          140.3361344537815,
          36.554621848739494
        ]
      ],
      "group_id": null,
      "description": "",
      "shape_type": "rectangle",

277 { “version”: “5.2.1”, “flags”: {}, “shapes”: [ { “label”: “+”, “points”: [ [ 517.4107142857143, 99.10714285714286 ] ], “group_id”: null, “description”: “”, “shape_type”: “point”, “flags”: {} }, { “label”: “1”, “points”: [ [ 22.689075630252102, 118.9075630252101 ], [ 53.78151260504201, 158.40336134453784 ] ], “group_id”: null, “description”: “”, “shape_type”: “rectangle”, “flags”: {} }, { “label”: “2”, “points”: [ [ 23.52941176470588, 74.36974789915968 ], [ 57.14285714285714, 111.34453781512607 ] ], “group_id”: null, “description”: “”, “shape_type”: “rectangle”, “flags”: {} }, { “label”: “3”, “points”: [ [ 24.369747899159666, 29.83193277310925 ], [ 59.66386554621849, 67.64705882352942 ] ], “group_id”: null, “description”: “”, “shape_type”: “rectangle”, “flags”: {} }, { “label”: “4”, “points”: [ [ 67.22689075630252, 7.983193277310924 ], [ 96.63865546218487, 34.87394957983194 ] ], “group_id”: null, “description”: “”, “shape_type”: “rectangle”, “flags”: {} }, { “label”: “5”, “points”: [ [ 110.92436974789916, 11.344537815126053 ], [ 140.3361344537815, 36.554621848739494 ] ], “group_id”: null, “description”: “”, “shape_type”: “rectangle”,

labelme format

labels:

  • + - point, others rectangles

point:

{
  "shapes": [
    "label": "+",
    "points": [
      [
        517.4107142857143,
        99.10714285714286
      ]
    ]
  ]
}

ractangle:

{
  "shapes": [
    "label": "1",
    "points": [
      [
        67.22689075630252,
        7.983193277310924
      ],
      [
        96.63865546218487,
        34.87394957983194
      ]
    ]
  ]
}

parse json

import json

def parse_file(json_file:str):
    with open(json_file, "r", encoding="utf-8") as infile:
        myfile = json.load(infile)
    plus_point = None
    digits_rectangles = {}
    for i, shape in enumerate(myfile["shapes"]):
        if shape["label"] == "+":
            plus_point = shape['points'][0]
            # - convert to int:
            plus_point = (round(plus_point[0]), round(plus_point[1]))
        else:
            # - convert to int:
            dr = shape['points']
            dr = ((round(dr[0][0]), round(dr[0][1])), (round(dr[1][0]), round(dr[1][1])))
            digits_rectangles[shape["label"]] = dr

    return plus_point, digits_rectangles

json_file = "train_to_the_coordinates_dataset/2626.json"
plus_point, digits_rectangles = parse_file(json_file)

print("plus_point", plus_point)
[print(k,v) for k,v in digits_rectangles.items()]
plus_point (517, 99)
1 ((19, 257), (66, 313))
2 ((24, 74), (57, 111))
3 ((24, 30), (60, 68))
4 ((92, 256), (124, 284))
5 ((111, 11), (140, 37))
6 ((154, 12), (187, 42))
3_5 ((103, 37), (134, 67))
2_4 ((259, 81), (286, 111))
1_4 ((451, 125), (482, 153))
1_5 ((697, 136), (730, 153))
2_6 ((955, 84), (971, 119))
3_6 ((1155, 40), (1174, 72))
3_4 ((1258, 37), (1288, 62))

explore label keys

import cv2 as cv
import glob
import os
import numpy as np
# -- get id's of files in dataset
a = glob.glob("train_to_the_coordinates_dataset/*.jpg")
file_ids = [os.path.basename(x).split(".")[0] for x in a]

keys = []
for d in file_ids:
    json_file = f"train_to_the_coordinates_dataset/{d}.json"
    plus_point, digits_rectangles = parse_file(json_file)
    for x in digits_rectangles.keys():
         keys.append(x)
print(sorted(set(keys)))
['1', '1_4', '1_5', '1_6', '2', '2-4', '25', '2_4', '2_5', '2_6', '3', '3)_4', '3-6', '3_1', '3_4', '3_5', '3_6', '4', '5', '5_4', '5ъ', '6', '_4']

draw labels task1.0

import cv2 as cv
import numpy as np
idd = 4421
img = cv.imread(f'train_to_the_coordinates_dataset/{idd}.jpg')

json_file = f"train_to_the_coordinates_dataset/{idd}.json"
plus_point, digits_rectangles = parse_file(json_file)

# -- rectangle labels:
for k,v in digits_rectangles.items():
    ctr = np.array(v).reshape(1, 2, 2).astype(int)
    print(k)
    # print(ctr[0][0])
    cv.drawContours(img, ctr, -1, (0, 255, 0), 3)

    font                   = cv.FONT_HERSHEY_SIMPLEX
    bottomLeftCornerOfText = (10,500)
    fontScale              = 0.5
    fontColor              = (255,255,255)
    thickness              = 1
    lineType               = 2

    cv.putText(img, k,
    ctr[0][0],
    font,
    fontScale,
    fontColor,
    thickness,
    # lineType
                )
# -- DOT for + label
# ctr = np.array(plus_point).reshape(1, 2, 2).astype(int)
print(plus_point)
x = plus_point[0]
y = plus_point[1]
image = cv.circle(img, (int(x),int(y)), radius=10, color=(0, 0, 255), thickness=2)

# - write image
cv.imwrite('autoimgs/labels.png', img)

./autoimgs/labels.png

draw labels task1.1

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

def draw_labels(img, digits_rectangles, plus_point):
    # -- rectangle labels:
    for k,v in digits_rectangles.items():
        ctr = np.array(v).reshape(1, 2, 2).astype(int)
        print(k)
        # print(ctr[0][0])
        cv.drawContours(img, ctr, -1, (0, 255, 0), 3)

        font                   = cv.FONT_HERSHEY_SIMPLEX
        bottomLeftCornerOfText = (10,500)
        fontScale              = 0.5
        fontColor              = (255,255,255)
        thickness              = 1
        lineType               = 2

        cv.putText(img, k,
        ctr[0][0],
        font,
        fontScale,
        fontColor,
        thickness,
        # lineType
                    )
    # -- DOT for + label
    # ctr = np.array(plus_point).reshape(1, 2, 2).astype(int)
    print(plus_point)
    x = plus_point[0]
    y = plus_point[1]
    image = cv.circle(img, (int(x),int(y)), radius=10, color=(0, 0, 255), thickness=2)
    return image

img_files, plus_points, digits_rectangles, hints = get_all()

img1 = cv.imread(img_files[1])
img2 = cv.imread(img_files[2])
img3 = cv.imread(img_files[3])

img1 = draw_labels(img1, digits_rectangles[1], plus_points[1])
img2 = draw_labels(img2, digits_rectangles[2], plus_points[2])
img3 = draw_labels(img3, digits_rectangles[3], plus_points[3])

img = np.vstack([img1, img2,img3])
cv.imwrite('autoimgs/labelstask1.1.png', img)
# plt.imshow()
# plt.show()
# plt.close()

./autoimgs/labelstask1.1.png

draw labels task1.1 for optional task

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

def draw_labels(img, digits_rectangles, plus_point):
    # -- rectangle labels:
    for k,v in digits_rectangles.items():
        ctr = np.array(v).reshape(1, 2, 2).astype(int)
        print(k)
        # print(ctr[0][0])
        cv.drawContours(img, ctr, -1, (0, 255, 0), 3)

        font                   = cv.FONT_HERSHEY_SIMPLEX
        bottomLeftCornerOfText = (10,500)
        fontScale              = 0.5
        fontColor              = (255,255,255)
        thickness              = 1
        lineType               = 2

        cv.putText(img, k,
        ctr[0][0],
        font,
        fontScale,
        fontColor,
        thickness,
        # lineType
                    )
    # -- DOT for + label
    # ctr = np.array(plus_point).reshape(1, 2, 2).astype(int)
    print(plus_point)
    x = plus_point[0]
    y = plus_point[1]
    image = cv.circle(img, (int(x),int(y)), radius=10, color=(0, 0, 255), thickness=2)
    return image

img_files, plus_points, digits_rectangles, hints = get_all(main_path = "task1.1/mixed_train_to_the_coordinates4x4/")

img1 = cv.imread(img_files[1])
img2 = cv.imread(img_files[2])
img3 = cv.imread(img_files[3])

img1 = draw_labels(img1, digits_rectangles[1], plus_points[1])
img2 = draw_labels(img2, digits_rectangles[2], plus_points[2])
img3 = draw_labels(img3, digits_rectangles[3], plus_points[3])

img = np.vstack([img1, img2,img3])
cv.imwrite('autoimgs/labelstask1.1.png', img)
# plt.imshow()
# plt.show()
# plt.close()

./autoimgs/labelstask1.1.png

labels explained

  • + - solution
  • 1,2,3,4,5,6 - hint: figure, number ; figures on first image ; numbers on first image
  • x_x label - show position of dot on 7 images

All digits are random

Accamulated library

import json
import glob
import os
import numpy as np
from matplotlib import pyplot as plt

class MyException(Exception):
    pass

def parse_file(json_file:str):
    with open(json_file, "r", encoding="utf-8") as infile:
        myfile = json.load(infile)
    plus_point = None
    train_rectangles = [None for _ in range(7)] # 7
    digits_rectangles = {}
    for i, shape in enumerate(myfile["shapes"]):
        if shape["label"] == "+":
            plus_point = shape['points'][0]
            # - convert to int:
            plus_point = (round(plus_point[0])//200, round(plus_point[0]), round(plus_point[1]))
        else:
            # - convert to int:
            dr = shape['points']
            dr = ((round(dr[0][0]), round(dr[0][1])), (round(dr[1][0]), round(dr[1][1])))

            if "_" in shape["label"]:
                train_rectangles[dr[0][0]//200] = dr
            else:
                digits_rectangles[shape["label"]] = dr
    if not all(train_rectangles):
        raise MyException("not all train_rectangles!")

    return plus_point, train_rectangles, digits_rectangles

def get_subimage(img, i=0):
    return img[0:VERTIC, HORIZ*i:HORIZ*(i+1)]


def rectangle_parser(rec, left=0, top=0):
    "substract left and top and convert to x,y,w,h"
    rr = list(rec)
    r = sorted(rr, key=lambda x: x[0])
    x1 = r[0][0]
    y1 = r[0][1]
    x2 = r[1][0]
    y2 = r[1][1]

    w = x2-x1
    h = y2-y1
    return ((x1 - left, y1 - top, w, h))
    # return rec


def hint_parser(drs):
    "get hint coordinates on hint subimage"
    hints = []
    for x in drs.values():
        if x[0][0] < HINT_HORIZ and x[0][1] > VERTIC:
            hints.append(x)
    # assert len(hints) == 2
    if len(hints) != 2:
        return None, None
    hints = sorted(hints, key=lambda x: x[0][0])
    hintsn = np.array(hints)
    hintsn[0][0][1] = hintsn[0][0][1] - VERTIC
    hintsn[0][1][1] = hintsn[0][1][1] - VERTIC
    hintsn[1][0][1] = hintsn[1][0][1] - VERTIC
    hintsn[1][1][1] = hintsn[1][1][1] - VERTIC

    return hintsn


def get_all(main_path:str = "task1.1/mixed_train_to_the_coordinates_dataset") -> (list, list, list):
    """get id's of files in dataset
    returns:
    - img_files - pathes
    - plus_points - + label
    - train_rectangles - x_x labels
    - digits_rectangles - x labels
    - hints - sorted corrdinates of xy1, xy2 on subimage"""
    a = glob.glob(main_path + "/*.jpg")
    assert len(a) > 0
    idds = [os.path.basename(x).split(".")[0] for x in a]
    img_files = []
    plus_points = []
    train_rectangles = []
    digits_rectangles = []
    hints = []
    for idd in idds:
        json_file = main_path + f"/{idd}.json"
        try:
            plus_point, train_rectangles2, digits_rectangles2 = parse_file(json_file)
        except MyException as a:
            continue
        img_files.append(main_path + f"/{idd}.jpg")
        plus_points.append(plus_point)
        train_rectangles.append(train_rectangles2)
        digits_rectangles.append(digits_rectangles2)
        hints.append(hint_parser(digits_rectangles2))
    return img_files, plus_points, train_rectangles, digits_rectangles, hints


def diff_two_rectangles(r1, r2):
    x1,y1,w1,h1 = r1
    x2,y2,w2,h2 = r2
    y_diff = abs((y1+h1/2)-(y2+h2/2))
    x_diff = abs((x1+w1/2)-(x2+w2/2))
    return np.mean([x_diff, y_diff])


def diff_two_contours(c1, c2):
    return diff_two_rectangles(cv.boundingRect(c1), cv.boundingRect(c2))


def get_subimage_roi_xywh(img, x, y, w, h):
    "img: BGR"
    return img[y:y+h,x:x+w].copy()

def get_subimage_roi_xy(img, xy1, xy2 ):
    "img: BGR"
    x1, y1 = xy1
    x2, y2 = xy2
    return img[y1:y2,x1:x2].copy()


def hsv_to_gimp(hsv_orig):
    hsv = hsv_orig.copy()
    for i in range(3):
        if i == 0:
            ranges = [0, 180]
        else:
            ranges = [0, 100]
        cv.normalize(hsv[i], hsv[i], alpha=ranges[0], beta=ranges[1],
                     norm_type=cv.NORM_MINMAX)
    return hsv, ([0, 180], [0, 100], [0, 100])

def output_histogram(img, ranges, bins = 10):
    " usage: output_histogram(hsv, [(0,255)]*3)"
    histSize = max(bins, 2)
    for i in range(3):
        hist = cv.calcHist([img[i]], [0], None, [histSize], ranges[i],
                           accumulate=False) # list of bins with values in 0-9999999 range

        # cv.normalize(hist, hist, alpha=0, beta=255, norm_type=cv.NORM_MINMAX)
        print("i", i)
        [print(np.round(k), "\t", np.round(v,2)) for k,v in zip(np.linspace(ranges[i][0],ranges[i][1], bins+1)[1:], hist)]
        print()

def contours_calc_centers(contours):
    " and sort by x"
    centers = [None] *len(contours)
    for j, c in enumerate(contours):
        # print(c)
        x,y,w,h = cv.boundingRect(c)
        centers[j] = ((x+w/2), (y+h/2))
    centers = sorted(centers, key = lambda x: x[0])
    return centers

# ------------------ local ----
HORIZ = 200 # left edge of one in 7 images
VERTIC = 200 # bottom edge of 7 images
HINT_HORIZ = 135 # left edge of hint image

def get_hint_subimage(img):
    return img[VERTIC:400, 0:HINT_HORIZ].copy()

def draw_points(img, pts:list):
    for x,y in pts:
        image = cv.circle(img, (int(x), int(y)), radius=1, color=(0, 0, 255), thickness=-1)
    plt.imshow(image,),plt.show()


def get_centroid(pts:np.array):
    z = np.array(pts)
    # Define criteria = ( type, max_iter = 10 , epsilon = 1.0 )
    criteria = (cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 10, 1.0)
    # Set flags (Just to avoid line break in the code)
    flags = cv.KMEANS_RANDOM_CENTERS
    z = np.float32(z)
    compactness,labels,centers = cv.kmeans(z,2,None,criteria,10,flags)
    big_label = int(np.median(labels))
    return centers[big_label]


def match_images_swift(img_src,img_dst, distance=0.9):
    """return points on img_dst
    bigger distance -> more points"""
    sift = cv.SIFT_create()
    kp1, des1 = sift.detectAndCompute(img_src,None)
    kp2, des2 = sift.detectAndCompute(img_dst,None)
    FLANN_INDEX_KDTREE = 1
    index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
    search_params = dict(checks=50)   # or pass empty dictionary
    flann = cv.FlannBasedMatcher(index_params,search_params)
    # flann = cv.FlannBasedMatcher()
    matches = flann.knnMatch(des1,des2,k=2)
    # Need to draw only good matches, so create a mask
    matchesMask = [[0,0] for i in range(len(matches))]
    # ratio test as per Lowe's paper
    # count = 0
    dst_matches = []
    for j,(m,n) in enumerate(matches):
        if m.distance < distance*n.distance:
            # matchesMask[j]=[1,0]
            # count+=1
            dst_matches.append(kp2[m.trainIdx])
    dst_pts = [i.pt for i in dst_matches]

    # draw_params = dict(matchColor = (0,255,0),
    #                singlePointColor = (255,0,0),
    #                matchesMask = matchesMask,
    #                flags = cv.DrawMatchesFlags_DEFAULT)
    # img3 = cv.drawMatchesKnn(img_src,kp1,img_dst,kp2,matches,None,**draw_params)
    return dst_pts

Tests for accamulated library

test hint_parser, parse_file

# -- get id's of files in dataset
import os
import glob

# -- get id's of files in dataset
a = glob.glob("task1.1/mixed_train_to_the_coordinates_dataset/*.jpg")
assert len(a) > 0
file_ids = [os.path.basename(x).split(".")[0] for x in a]
# -- test hint_parser
keys = []
for idd in file_ids:
    json_file = f"task1.1/mixed_train_to_the_coordinates_dataset/{idd}.json"
    try:
        plus_point, train_rectangles, digits_rectangles = parse_file(json_file)
    except MyException as a:
        continue
    h1, h2 = hint_parser(digits_rectangles)
    if h1 is not None:
        # print("h1", h1, h1[0][0])
        # print("h2", h2)
        assert h1[0][0] < h2[1][0]
    # break

# -- test parse_file
for idd in file_ids:
    try:
        a,b,c = parse_file(f"task1.1/mixed_train_to_the_coordinates_dataset/{idd}.json")
    except MyException as a:
        continue
    assert len(a) == 2
    assert all(a)
    assert len(b) == 7
    assert all(b)

test get_all

# -- test get all
img_files, plus_points, train_rectangles, digits_rectangles, hints = get_all()
assert len(img_files) >0
assert len(plus_points) >0
assert len(train_rectangles) >0
assert len(digits_rectangles) >0
assert len(hints) >0
# print(plus_points[0])
# print(plus_points[1])
(2, 517, 99)
(5, 1121, 96)

DEV LOGS

plan

There is 2 tasks:

  1. compare 2 images from hint
  2. find out where is tran on 7 images

There is two ways to solve it:

  1. find location of tran and location of hint images on small ones, then compare them
  2. find train and match features of images on top and left from it and hint’s images

for 1)

  1. with OpenCV: get rectangle
  2. calc position of blue tran on rectangle

for 2):

  1. extract all 6 images from every task
    • detect rectangle with train
    • detect figures at left and number above
  2. train two neural networks with augmented images

extract rectangles

import cv2 as cv
id = 2628
img = cv.imread(f'train_to_the_coordinates_dataset/{id}.jpg')
json_file = f"train_to_the_coordinates_dataset/{id}.json"
plus_point, digits_rectangles = parse_file(json_file)
def get_rectangle(img, rect):
    "extract rectangle and return rectangle image"
    xy1, xy2 = rect
    return img[xy1[1]:xy2[1],xy1[0]:xy2[0],:]

print(xy1)
print(xy2)
# print()
img2 = get_rectangle(img, digits_rectangles["1"])
cv.imwrite('autoimgs/tmp.png', img2)

./autoimgs/tmp.png

split to subimages 1-7 and hint, at which image the dot is located?

import cv2 as cv
import glob
import os

HORIZ = 200 # left edge of one in 7 images
VERTIC = 200 # bottom edge of 7 images
HINT_HORIZ = 135 # left edge of hint image


# -- get id's of files in dataset
a = glob.glob("train_to_the_coordinates_dataset/*.jpg")
file_ids = [os.path.basename(x).split(".")[0] for x in a]

# -- what is what
def hint_parser(drs):
    hints = []
    for x in drs.values():
        if x[0][0] < HINT_HORIZ and x[0][1] > VERTIC:
            hints.append(x)
    # assert len(hints) == 2
    if len(hints) != 2:
        return None, None
    hints = sorted(hints, key=lambda x: x[0][1])
    return hints[0], hints[1]


# -- get all dots
images_with_hint = 0
for d in file_ids:
    json_file = f"train_to_the_coordinates_dataset/{d}.json"
    plus_point, digits_rectangles = parse_file(json_file)
    # print(d)
    h1, h2 = hint_parser(digits_rectangles)
    # print(h1,h2)
    if h1 is not None:
        images_with_hint += 1

print("images with hints:\t", images_with_hint)
print("all images:\t\t", len(file_ids))


# img2 = img[0:200,200:400,:]


# cv.imwrite('autoimgs/subpart.png', img2)
images with hints:	 845
all images:		 1050

frequencies of hints

import cv2 as cv
import numpy as np
from dataclasses import dataclass
import math
img_files, plus_points, train_rectangles, digits_rectangles, hints = get_all()
# --- location of xy1
@dataclass
class Hints:
    # x_min = None
    # x_max = None
    # y_min = None
    # y_max = None
    circle_center_x_min = None
    circle_center_x_max = None
    circle_center_y_min = None
    circle_center_y_max = None
    circle_radius_min = None
    circle_radius_max = None
    # circle_area_min: float
    # circle_area_max: float

hint1s = Hints()
hint2s = Hints()
# --------- x, y min, max -------------------------------
# hints1 = [h for h in hints if h[0] is not None]
# # -- 1) h1,h2 2) xy1,xy2 3) x,y
# xs = sorted(hints1, key=lambda x: x[0][0][0])
# hint1s.x_min = xs[0][0][0][0]
# hint1s.x_max = xs[-1][0][0][0]

# xs = sorted(hints1, key=lambda x: x[0][0][1])
# hint1s.y_min = xs[0][0][0][1]
# hint1s.y_max = xs[-1][0][0][1]


# hints2 = [h for h in hints if h[1] is not None]
# xs = sorted(hints2, key=lambda x: x[1][0][0])
# hint2s.x_min = xs[0][1][0][0]
# hint2s.x_max = xs[-1][1][0][0]

# xs = sorted(hints2, key=lambda x: x[1][0][1])
# hint2s.y_min = xs[0][1][0][1]
# hint2s.y_max = xs[-1][1][0][1]

# ---------------- area ------
h1_areas = []
# xs = sorted(hints1, key=lambda x: x[1][0][1])
for x in hints:
    if x[0] is not None:
        (x,y),radius = cv.minEnclosingCircle(x[0])
        h1_areas.append(radius*radius*math.pi)
h2_areas = []
for x in hints:
    if x[1] is not None:
        (x,y),radius = cv.minEnclosingCircle(x[1])
        h2_areas.append(radius*radius*math.pi)

h1_areas = sorted(h1_areas)
h2_areas = sorted(h2_areas)
print("h1 area", int(h1_areas[0]), int(h1_areas[-1]))
print("h2 area", int(h2_areas[0]), int(h2_areas[-1]))
print()

h1_circles = [cv.minEnclosingCircle(h[0]) for h in hints if h[0] is not None]
h2_circles = [cv.minEnclosingCircle(h[1]) for h in hints if h[1] is not None]
# - x
xs = sorted(h1_circles, key=lambda x: x[0][0])
hint1s.circle_center_x_min = xs[0][0][0]
hint1s.circle_center_x_max = xs[-1][0][0]
xs = sorted(h2_circles, key=lambda x: x[0][0])
hint2s.circle_center_x_min = xs[0][0][0]
hint2s.circle_center_x_max = xs[-1][0][0]
# - y
xs = sorted(h1_circles, key=lambda x: x[0][1])
hint1s.circle_center_y_min = xs[0][0][1]
hint1s.circle_center_y_max = xs[-1][0][1]
xs = sorted(h2_circles, key=lambda x: x[0][1])
hint2s.circle_center_y_min = xs[0][0][1]
hint2s.circle_center_y_max = xs[-1][0][1]
# - radius
xs = sorted(h1_circles, key=lambda x: x[1])
hint1s.circle_radius_min = xs[0][1]
hint1s.circle_radius_max = xs[-1][1]
xs = sorted(h2_circles, key=lambda x: x[1])
hint2s.circle_radius_min = xs[0][1]
hint2s.circle_radius_max = xs[-1][1]
print(hint1s.__dict__)
print(hint2s.__dict__)
print()
h1 area 2536 6038
h2 area 684 2096

:

{'circle_center_x_min': 38.5, 'circle_center_x_max': 50.5, 'circle_center_y_min': 81.0, 'circle_center_y_max': 93.0, 'circle_radius_min': 28.41224479675293, 'circle_radius_max': 43.840721130371094}
{'circle_center_x_min': 104.0, 'circle_center_x_max': 116.5, 'circle_center_y_min': 56.5, 'circle_center_y_max': 70.5, 'circle_radius_min': 14.764923095703125, 'circle_radius_max': 25.831281661987305}

detect hint figure and number

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

from dataclasses import dataclass

HINT1_AREA_MIN = 2536
HINT1_AREA_MAX = 6038
HINT2_AREA_MIN = 684
HINT2_AREA_MAX = 2096

@dataclass
class ContourStats:
    circle_center_x_min: float
    circle_center_x_max: float
    circle_center_y_min: float
    circle_center_y_max: float
    circle_radius_min: float
    circle_radius_max: float
    circle_area_min: float
    circle_area_max: float

dilatation_type = cv.MORPH_RECT
dilatation_size = 1
element = cv.getStructuringElement(dilatation_type, (2*dilatation_size + 1, 2*dilatation_size+1), (dilatation_size, dilatation_size))

g = False
def find_object(image, circle_stats: ContourStats, conti = None):
    """ loop: 1) channels, 2) threshold 3) contours
    continue: ((i, thrs), cnt)"""
    contour_result = None
    # -- 1)
    r = cv.split(image.copy())
    if conti is not None:
        r = r[conti[0][0]:]

    for i, gray in enumerate(r):
        if contour_result is not None:
            break
        # -- 2)
        ra = range(0, 255, 10)
        if conti is not None:
            ra = range(conti[0][1], 255, 10)
        for thrs in ra:
            if contour_result is not None:
                break
            # -- dilation
            # gray2 = cv.dilate(gray, element)

            gray = cv.erode(gray, element)

            gray = cv.dilate(gray, element)
            gray = cv.dilate(gray, element)

            # gray2 = cv.GaussianBlur(gray2,(5,5),2)
            # gray = cv.Laplacian(image,cv.CV_64F)
            # gray = cv.Laplacian(gray,cv.CV_8UC1)
            # bin = cv.dilate(bin, element)
            # bin = cv.erode(bin, element)
            _retval, bin = cv.threshold(gray, thrs, 255, cv.THRESH_BINARY)
            # gray = cv.dilate(gray, element)
            # gray = cv.erode(gray, element)


            # bin = cv.adaptiveThreshold(gray,thrs,cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY,9,3)
            # bin = cv.adaptiveThreshold(gray,thrs,cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY,9,3)
            if g:
                plt.imshow(bin)
                plt.show()
                plt.close()

            contours, _ = cv.findContours(bin, cv.RETR_LIST,
                                          cv.CHAIN_APPROX_SIMPLE)

            # imgs.append(bin)
            # -- 3)
            for j, cnt in enumerate(contours):
                if contour_result is not None:
                    break
                # if conti is not None:
                    # print(all(cnt[0][0] == conti[1][0][0]))
                if conti is not None and all(cnt[0][0] == conti[1][0][0]):
                    continue # TODO: sort contours and filter by x,y
                # -- features of contour
                # x,y,w,h = cv.boundingRect(cnt)
                (x,y),radius = cv.minEnclosingCircle(cnt)
                # print(radius, cv.contourArea(cnt))
                # cnt_len = cv.arcLength(cnt, True)
                area = cv.contourArea(cnt)
                # x,y,w,h = cv.boundingRect(cnt)


                if circle_stats.circle_center_x_min < x < circle_stats.circle_center_x_max \
                   and circle_stats.circle_center_y_min < y < circle_stats.circle_center_y_max \
                   and circle_stats.circle_area_min < area < circle_stats.circle_area_max \
                   and circle_stats.circle_radius_min < radius < circle_stats.circle_radius_max:

                # if (hint_stats['hint1_y_min']/1.5 < y < hint_stats['hint1_y_max']*1.2) \
                #    and (hint_stats['hint1_x_min']/1.5 < x < hint_stats['hint1_x_max']*1.2) \
                #    and (area_min < area < area_max) \
                #    and (cntlen_min < cnt_len < cntlen_max):
                    contour_result = cnt
                    # print("contour (x,y),radius:", (x,y), radius)
                    break
                    # -- loop for numbers
                    # for thrs in range(0, 255, 20):
                    # -- 4)
                    # for cnt in contours:
                    #     if cnt[0][0][0] == hint1[0][0][0]:
                    #         continue
                    #     cnt_len = cv.arcLength(cnt, True)
                    #     a = cv.contourArea(cnt)
                    #     if (600 < area < 2000) \
                    #        and (90 < cnt_len < 200):
                    #         hint2 = cnt
                    #         print("hint2", "area", area, "cntlen", cnt_len)
                    #         break
    return contour_result, (i, thrs)


HINT1_STATS_s = {'circle_center_x_min': 38.5, 'circle_center_x_max': 50.5, 'circle_center_y_min': 81.0, 'circle_center_y_max': 93.0, 'circle_radius_min': 28.41224479675293, 'circle_radius_max': 43.840721130371094}
HINT2_STATS_s = {'circle_center_x_min': 104.0, 'circle_center_x_max': 116.5, 'circle_center_y_min': 56.5, 'circle_center_y_max': 70.5, 'circle_radius_min': 14.764923095703125, 'circle_radius_max': 25.831281661987305}
# 'circle_center_x_max': 50.5 + 'circle_radius_max': 43.840721130371094 = 94
HINT1_X_MAX = 94

HINT1_STATS_s["circle_area_min"] = HINT1_AREA_MIN
HINT1_STATS_s["circle_area_max"] = HINT1_AREA_MAX
HINT2_STATS_s["circle_area_min"] = HINT2_AREA_MIN
HINT2_STATS_s["circle_area_max"] = HINT2_AREA_MAX

# HINT2_STATS_small = {k:((v - HINT1_X_MAX) if k.startswith("circle_center_x_") else v) for k,v in HINT2_STATS.items()}

MUL = 1.3
HINT1_STATS = {}
for k,v in HINT1_STATS_s.items():
    if k.endswith('min'):
        HINT1_STATS[k] = v/ MUL
    # elif "radius_max" in k: # max
    #     HINT1_STATS[k] = v* 1.8
    else:
        HINT1_STATS[k] = v*MUL
HINT2_STATS = {}
for k,v in HINT2_STATS_s.items():
    if '_x_' in k:
        v = v - HINT1_X_MAX
    if k.endswith('min'):
        HINT2_STATS[k] = v/ MUL
    # elif "radius_max" in k: # max
    #     HINT2_STATS[k] = v* 1.8
    else:
        HINT2_STATS[k] = v *MUL


h1s = ContourStats(**HINT1_STATS)
h2s = ContourStats(**HINT2_STATS)
# ----- single image -- old
# idd = 2626
# img = cv.imread(f'train_to_the_coordinates_dataset/{idd}.jpg')

# image = img[200:400, 0:135]

# cnt = find_object(image, area_min=1100, area_max=2000, cntlen_min=120, cntlen_max=200)
# print(cnt is None)
# x,y,w,h = cv.boundingRect(cnt)
# # print(x,y,w,h)
# ROI = image[y:y+h, x:x+w]
# # cv2.drawContours(dice, squares, -1, (0, 255, 0), 3)
# cv.imwrite('autoimgs/detrectonhint.png', ROI)

img_files, plus_points, train_rectangles, digits_rectangles, hints = get_all()

imgs = []
# ------- all images -----
# -- get id's of files in dataset
# a = glob.glob("train_to_the_coordinates_dataset/*.jpg")
# file_ids = [os.path.basename(x).split(".")[0] for x in a]

for i in range(len(img_files)):
    # if i >19:
    #     g = True
    #     break
    fp = img_files[i]
    print(fp)
    src = cv.imread(fp)
    assert src is not None, "img could not be read"

    # keys = []
    # for idd in file_ids:

    img_hint = get_hint_subimage(src)
    h1, h2 = hint_parser(digits_rectangles[i])
    # print(i, "h1,h2:", h1, h2)
    if h1 is None:
        print(i, "h1 is None, continue")
        continue

    conti = None

    # -- HINT1 find --
    img_hint1 = img_hint[:,:HINT1_X_MAX] # cut hint at right)
    cnt1, conti = find_object(img_hint1, h1s, conti)
    if cnt is None:
        print(i, "find object result is None")
        break
    x,y,w,h = cv.boundingRect(cnt1)
    # print(x,y,w,h)
    y_diff = abs(np.mean(h1[:, 1])- (y+h/2))
    x_diff = abs(np.mean(h1[:, 0])- (x+w/2))
    diff = np.mean([x_diff, y_diff])
    print(i, "diff", diff)

    # -- hint2 find --
    img_hint2 = img_hint[:,HINT1_X_MAX:] # cut hint at left
    if diff > 20:
        imf = get_subimage_roi_xywh(img_hint1, x, y, w, h)
        plt.imshow(imf)
        plt.show()
        plt.close()
        break


    cnt2, _ = find_object(img_hint2, h2s)
    if cnt is None:
        print(i, "find HINT2 is None")
        x,y,w,h = cv.boundingRect(cnt2)
        imf = get_subimage_roi_xywh(img_hint2, x, y, w, h)
        # (x,y),radius = cv.minEnclosingCircle(cnt)
        # print("(x,y),radius", (x,y),radius)
        plt.imshow(img_hint2)
        plt.show()
        plt.close()
        g = True
        # cnt, _ = find_object(img_hint2, h2s)
        # plt.imshow(imf)
        # plt.show()
        # plt.close()

        # plt.imshow(img_hint2)
        # plt.show()
        # plt.close()
        break

    x,y,w,h = cv.boundingRect(cnt2)
    # print(x,y,w,h)
    y_diff = abs(np.mean(h2[:, 1])-(y+h/2))
    x_diff = abs(np.mean(h2[:, 0])- (x+w/2+HINT1_X_MAX))
    diff = np.mean([x_diff, y_diff])
    print(i, "diff", diff)
    if diff > 20:
        imf = get_subimage_roi_xywh(img_hint2, x, y, w, h)
        plt.imshow(imf)
        plt.show()
        plt.close()
        plt.imshow(img_hint)
        plt.show()
        plt.close()
        # (x,y),radius = cv.minEnclosingCircle(cnt)
        # print("(x,y),radius", (x,y),radius)
        break

    # hrects = (cv.boundingRect(cnt1), cv.boundingRect(cnt2))
    # # -- check by diff of x and y --

    # x,y,w,h = hrects[1]
    # y_diff = abs(np.mean(h2[:, 1])-(y+h/2))
    # x_diff = abs(np.mean(h2[:, 0])- (x+w/2))
    # diff2 = np.mean([x_diff, y_diff])
    # x,y,w,h = hrects[0]
    # y_diff = abs(np.mean(h1[:, 1])-(y+h/2))
    # x_diff = abs(np.mean(h1[:, 0])- (x+w/2))
    # diff1 = np.mean([x_diff, y_diff])


    # print(i, "diff", diff1, diff2)

    # ROI = image[y:y+h, x:x+w]
    # cv.imwrite('autoimgs/detrectonhint.png', ROI)

    # if diff1 > 63 : # or diff2 > 50
    #     print("Big diff")
    #     break

    # if idd == "2779":
    #     break

# imgs_stacked  = np.hstack(imgs)
# cv.imwrite('autoimgs/detrectonhint.png', imgs_stacked)

./autoimgs/detrectonhint.png

detect hint figure and number inFunction

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

from dataclasses import dataclass

HINT1_AREA_MIN = 2536
HINT1_AREA_MAX = 6038
HINT2_AREA_MIN = 684
HINT2_AREA_MAX = 2096

@dataclass
class ContourStats:
    circle_center_x_min: float
    circle_center_x_max: float
    circle_center_y_min: float
    circle_center_y_max: float
    circle_radius_min: float
    circle_radius_max: float
    circle_area_min: float
    circle_area_max: float

dilatation_type = cv.MORPH_RECT
dilatation_size = 1
element = cv.getStructuringElement(dilatation_type, (2*dilatation_size + 1, 2*dilatation_size+1), (dilatation_size, dilatation_size))

g = False
def find_object(image, circle_stats: ContourStats, conti = None):
    """ loop: 1) channels, 2) threshold 3) contours
    continue: ((i, thrs), cnt)"""
    contour_result = None
    # -- 1)
    r = cv.split(image.copy())
    if conti is not None:
        r = r[conti[0][0]:]

    for i, gray in enumerate(r):
        if contour_result is not None:
            break
        # -- 2)
        ra = range(0, 255, 10)
        if conti is not None:
            ra = range(conti[0][1], 255, 10)
        for thrs in ra:
            if contour_result is not None:
                break
            # -- dilation
            # gray2 = cv.dilate(gray, element)

            gray = cv.erode(gray, element)

            gray = cv.dilate(gray, element)
            gray = cv.dilate(gray, element)

            # gray2 = cv.GaussianBlur(gray2,(5,5),2)
            # gray = cv.Laplacian(image,cv.CV_64F)
            # gray = cv.Laplacian(gray,cv.CV_8UC1)
            # bin = cv.dilate(bin, element)
            # bin = cv.erode(bin, element)
            _retval, bin = cv.threshold(gray, thrs, 255, cv.THRESH_BINARY)
            # gray = cv.dilate(gray, element)
            # gray = cv.erode(gray, element)


            # bin = cv.adaptiveThreshold(gray,thrs,cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY,9,3)
            # bin = cv.adaptiveThreshold(gray,thrs,cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY,9,3)
            if g:
                plt.imshow(bin)
                plt.show()
                plt.close()

            contours, _ = cv.findContours(bin, cv.RETR_LIST,
                                          cv.CHAIN_APPROX_SIMPLE)

            # imgs.append(bin)
            # -- 3)
            for j, cnt in enumerate(contours):
                if contour_result is not None:
                    break
                # if conti is not None:
                    # print(all(cnt[0][0] == conti[1][0][0]))
                if conti is not None and all(cnt[0][0] == conti[1][0][0]):
                    continue # TODO: sort contours and filter by x,y
                # -- features of contour
                # x,y,w,h = cv.boundingRect(cnt)
                (x,y),radius = cv.minEnclosingCircle(cnt)
                # print(radius, cv.contourArea(cnt))
                # cnt_len = cv.arcLength(cnt, True)
                area = cv.contourArea(cnt)
                # x,y,w,h = cv.boundingRect(cnt)


                if circle_stats.circle_center_x_min < x < circle_stats.circle_center_x_max \
                   and circle_stats.circle_center_y_min < y < circle_stats.circle_center_y_max \
                   and circle_stats.circle_area_min < area < circle_stats.circle_area_max \
                   and circle_stats.circle_radius_min < radius < circle_stats.circle_radius_max:

                # if (hint_stats['hint1_y_min']/1.5 < y < hint_stats['hint1_y_max']*1.2) \
                #    and (hint_stats['hint1_x_min']/1.5 < x < hint_stats['hint1_x_max']*1.2) \
                #    and (area_min < area < area_max) \
                #    and (cntlen_min < cnt_len < cntlen_max):
                    contour_result = cnt
                    # print("contour (x,y),radius:", (x,y), radius)
                    break
                    # -- loop for numbers
                    # for thrs in range(0, 255, 20):
                    # -- 4)
                    # for cnt in contours:
                    #     if cnt[0][0][0] == hint1[0][0][0]:
                    #         continue
                    #     cnt_len = cv.arcLength(cnt, True)
                    #     a = cv.contourArea(cnt)
                    #     if (600 < area < 2000) \
                    #        and (90 < cnt_len < 200):
                    #         hint2 = cnt
                    #         print("hint2", "area", area, "cntlen", cnt_len)
                    #         break
    return contour_result, (i, thrs)


HINT1_STATS_s = {'circle_center_x_min': 38.5, 'circle_center_x_max': 50.5, 'circle_center_y_min': 81.0, 'circle_center_y_max': 93.0, 'circle_radius_min': 28.41224479675293, 'circle_radius_max': 43.840721130371094}
HINT2_STATS_s = {'circle_center_x_min': 104.0, 'circle_center_x_max': 116.5, 'circle_center_y_min': 56.5, 'circle_center_y_max': 70.5, 'circle_radius_min': 14.764923095703125, 'circle_radius_max': 25.831281661987305}
# 'circle_center_x_max': 50.5 + 'circle_radius_max': 43.840721130371094 = 94
HINT1_X_MAX = 94

HINT1_STATS_s["circle_area_min"] = HINT1_AREA_MIN
HINT1_STATS_s["circle_area_max"] = HINT1_AREA_MAX
HINT2_STATS_s["circle_area_min"] = HINT2_AREA_MIN
HINT2_STATS_s["circle_area_max"] = HINT2_AREA_MAX

# HINT2_STATS_small = {k:((v - HINT1_X_MAX) if k.startswith("circle_center_x_") else v) for k,v in HINT2_STATS.items()}

MUL = 1.3
HINT1_STATS = {}
for k,v in HINT1_STATS_s.items():
    if k.endswith('min'):
        HINT1_STATS[k] = v/ MUL
    # elif "radius_max" in k: # max
    #     HINT1_STATS[k] = v* 1.8
    else:
        HINT1_STATS[k] = v*MUL
HINT2_STATS = {}
for k,v in HINT2_STATS_s.items():
    if '_x_' in k:
        v = v - HINT1_X_MAX
    if k.endswith('min'):
        HINT2_STATS[k] = v/ MUL
    # elif "radius_max" in k: # max
    #     HINT2_STATS[k] = v* 1.8
    else:
        HINT2_STATS[k] = v *MUL


h1s = ContourStats(**HINT1_STATS)
h2s = ContourStats(**HINT2_STATS)
# ----- single image -- old
# idd = 2626
# img = cv.imread(f'train_to_the_coordinates_dataset/{idd}.jpg')

# image = img[200:400, 0:135]

# cnt = find_object(image, area_min=1100, area_max=2000, cntlen_min=120, cntlen_max=200)
# print(cnt is None)
# x,y,w,h = cv.boundingRect(cnt)
# # print(x,y,w,h)
# ROI = image[y:y+h, x:x+w]
# # cv2.drawContours(dice, squares, -1, (0, 255, 0), 3)
# cv.imwrite('autoimgs/detrectonhint.png', ROI)

img_files, plus_points, train_rectangles, digits_rectangles, hints = get_all()

imgs = []
# ------- all images -----
# -- get id's of files in dataset
# a = glob.glob("train_to_the_coordinates_dataset/*.jpg")
# file_ids = [os.path.basename(x).split(".")[0] for x in a]

def find_hint_images(hint_img):
    global HINT1_X_MAX, h1s, h2s
    img_hint1 = hint_img[:,:HINT1_X_MAX] # cut hint at right)
    cnt1, conti = find_object(img_hint1, h1s)
    if cnt1 is None:
        print(i, "find object result is None")
        return None
    # -- hint2 find --
    img_hint2 = hint_img[:,HINT1_X_MAX:] # cut hint at left

    cnt2, _ = find_object(img_hint2, h2s)
    if cnt2 is None:
        print(i, "find HINT2 is None")
        return None
    r1 = cv.boundingRect(cnt1)
    x,y,w,h = cv.boundingRect(cnt2)
    x += HINT1_X_MAX
    return r1, (x,y,w,h)

for i in range(len(img_files)):
    if i >19:
        break
    fp = img_files[i]
    print(i, fp)
    src = cv.imread(fp)
    assert src is not None, "img could not be read"

    # keys = []
    # for idd in file_ids:

    img_hint = get_hint_subimage(src)
    h1, h2 = hint_parser(digits_rectangles[i])
    # print(i, "h1,h2:", h1, h2)
    if h1 is None:
        print(i, "h1 is None, continue")
        continue

    hrec1, hrec2 = find_hint_images(img_hint)
    print(hrec1, hrec2)
    # ------- test hrec1
    x,y,w,h = hrec1
    y_diff = abs(np.mean(h1[:, 1])- (y+h/2))
    x_diff = abs(np.mean(h1[:, 0])- (x+w/2))
    diff = np.mean([x_diff, y_diff])
    print(i, "diff", diff)
    # ------- test hrec1
    x,y,w,h = hrec2
    y_diff = abs(np.mean(h2[:, 1])-(y+h/2))
    # x_diff = abs(np.mean(h2[:, 0])- (x+w/2+HINT1_X_MAX))
    x_diff = abs(np.mean(h2[:, 0])- (x+w/2))
    diff = np.mean([x_diff, y_diff])
    print(i, "diff", diff)
0 task1.1/mixed_train_to_the_coordinates_dataset/2626.jpg
(18, 54, 53, 55) (94, 49, 38, 42)
0 diff 2.75
0 diff 2.5
1 task1.1/mixed_train_to_the_coordinates_dataset/2627.jpg
(0, 65, 69, 83) (94, 49, 32, 32)
1 diff 12.5
1 diff 1.25
2 task1.1/mixed_train_to_the_coordinates_dataset/2628.jpg
(12, 53, 65, 59) (94, 46, 36, 48)
2 diff 1.5
2 diff 2.0
3 task1.1/mixed_train_to_the_coordinates_dataset/2629.jpg
(18, 61, 52, 56) (94, 36, 35, 58)
3 diff 2.5
3 diff 2.5
4 task1.1/mixed_train_to_the_coordinates_dataset/2630.jpg
4 h1 is None, continue
5 task1.1/mixed_train_to_the_coordinates_dataset/2632.jpg
(11, 58, 62, 57) (94, 41, 31, 41)
5 diff 1.0
5 diff 2.5
6 task1.1/mixed_train_to_the_coordinates_dataset/2633.jpg
(11, 49, 67, 64) (94, 42, 38, 47)
6 diff 2.25
6 diff 1.5
7 task1.1/mixed_train_to_the_coordinates_dataset/2634.jpg
(13, 56, 60, 65) (94, 50, 29, 37)
7 diff 1.0
7 diff 2.25
8 task1.1/mixed_train_to_the_coordinates_dataset/2635.jpg
(14, 50, 51, 68) (94, 39, 34, 44)
8 diff 1.5
8 diff 3.75
9 task1.1/mixed_train_to_the_coordinates_dataset/2637.jpg
(22, 52, 50, 72) (94, 39, 35, 47)
9 diff 0.25
9 diff 0.75
10 task1.1/mixed_train_to_the_coordinates_dataset/2638.jpg
(19, 54, 57, 65) (94, 40, 36, 49)
10 diff 2.0
10 diff 1.25
11 task1.1/mixed_train_to_the_coordinates_dataset/2639.jpg
(18, 54, 66, 66) (95, 36, 37, 48)
11 diff 1.75
11 diff 0.75
12 task1.1/mixed_train_to_the_coordinates_dataset/2642.jpg
(14, 54, 65, 65) (100, 32, 32, 50)
12 diff 1.0
12 diff 2.25
13 task1.1/mixed_train_to_the_coordinates_dataset/2643.jpg
(8, 52, 66, 72) (94, 48, 30, 38)
13 diff 0.25
13 diff 2.0
14 task1.1/mixed_train_to_the_coordinates_dataset/2644.jpg
(16, 60, 52, 55) (94, 48, 31, 37)
14 diff 1.5
14 diff 1.25
15 task1.1/mixed_train_to_the_coordinates_dataset/2645.jpg
(0, 35, 89, 102) (98, 51, 32, 39)
15 diff 1.25
15 diff 0.5
16 task1.1/mixed_train_to_the_coordinates_dataset/2646.jpg
(11, 52, 60, 66) (94, 44, 37, 43)
16 diff 1.0
16 diff 4.25
17 task1.1/mixed_train_to_the_coordinates_dataset/2647.jpg
(19, 52, 54, 62) (94, 35, 35, 53)
17 diff 3.5
17 diff 3.5
18 task1.1/mixed_train_to_the_coordinates_dataset/2649.jpg
(5, 46, 63, 63) (94, 46, 35, 46)
18 diff 7.0
18 diff 2.0
19 task1.1/mixed_train_to_the_coordinates_dataset/2650.jpg
(8, 52, 64, 65) (94, 47, 32, 39)
19 diff 0.5
19 diff 1.75

match images SIFT

import cv2 as cv
from matplotlib import pyplot as plt

img_files, plus_points, train_rectangles, digits_rectangles, hints = get_all()

def compare_two_images_swift(img1, img2):
    # bf = cv.BFMatcher(cv.NORM_L2, crossCheck=True)
    # img_jg = cv.cvtColor(img_j, cv.COLOR_BGR2GRAY)
    img1 = cv.cvtColor(img1, cv.COLOR_BGR2GRAY)
    img2 = cv.cvtColor(img2, cv.COLOR_BGR2GRAY)
    sift = cv.SIFT_create()
    kp1, des1 = sift.detectAndCompute(img1,None)
    kp2, des2 = sift.detectAndCompute(img2,None)

    FLANN_INDEX_KDTREE = 1
    index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
    search_params = dict(checks=50)   # or pass empty dictionary
    flann = cv.FlannBasedMatcher(index_params,search_params)
    # flann = cv.FlannBasedMatcher()
    matches = flann.knnMatch(des1,des2,k=2)
    # Need to draw only good matches, so create a mask
    matchesMask = [[0,0] for i in range(len(matches))]
    # ratio test as per Lowe's paper
    count = 0
    for i,(m,n) in enumerate(matches):
        if m.distance < 0.7*n.distance:
            matchesMask[i]=[1,0]
            count+=1
    return count

# create BFMatcher object


for i in range(len(img_files)):
    if i != 0:
        break
    fp = img_files[i]
    print(fp)
    src = cv.imread(fp)

    assert src is not None, "img could not be read"


    # keys = []
    # for idd in file_ids:
    #
    img_hint = get_hint_subimage(src)
    h1, h2 = hint_parser(digits_rectangles[i])
    # print(i, "h1,h2:", h1, "\n", h2)
    if h1 is None:
        print(i, "h1 is None, continue")
        continue
    x1, y1 = h1[0]
    x2, y2 = h1[1]
    a = 10
    # img_h = get_subimage_roi_xy(img_hint, h1[0], h1[1]) # simple
    img_h1 = get_subimage_roi_xywh(img_hint, x1-a, y1-a, x2-x1+a*2, y2-y1+a*2) # 24
    x1, y1 = h2[0]
    x2, y2 = h2[1]
    # img_h2 = get_subimage_roi_xy(img_hint, h2[0], h2[1]) # simple
    img_h2 = get_subimage_roi_xywh(img_hint, x1-a, y1-a, x2-x1+a*2, y2-y1+a*2) # 24


    # img1 = img[0:200, 0:200].copy()
    j=0
    img_j = src[0:200, 200*j:(1+j)*200].copy()


    xy1, xy2 = digits_rectangles[i]['5'] # 1- 24 2-23 3-cubic 4-romb 5-prizrak
    # subimg = get_subimage_roi_xy(src, xy1, xy2)
    img_jg = cv.cvtColor(img_j, cv.COLOR_BGR2GRAY)
    img_h1g = cv.cvtColor(img_h1, cv.COLOR_BGR2GRAY)
    img_h2g = cv.cvtColor(img_h2, cv.COLOR_BGR2GRAY)
    img1 = img_jg
    img2 = img_h1g
    r = compare_two_images_swift(img_j, img_h1)
    print("r", r)

    # find the keypoints and descriptors with ORB

    # img_h1g = cv.Laplacian(img_h1g,cv.CV_8UC1)
    # img_jg = cv.Laplacian(img_jg,cv.CV_8UC1)
    # img_h1g = cv.Canny(img_h1g,50,200)
    # img_jg = cv.Canny(img_jg,50,200)
    # plt.imshow(img_jg),plt.show()

    # Initiate ORB detector
    # orb = cv.ORB_create()
    # kp1, des1 = orb.detectAndCompute(img1,None)
    # kp2, des2 = orb.detectAndCompute(img2,None)


    # # Match descriptors.
    # print(des1)
    # print(des2)

    sift = cv.SIFT_create()
    kp1, des1 = sift.detectAndCompute(img1,None)
    kp2, des2 = sift.detectAndCompute(img2,None)

    FLANN_INDEX_KDTREE = 1
    index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
    search_params = dict(checks=50)   # or pass empty dictionary
    flann = cv.FlannBasedMatcher(index_params,search_params)
    # flann = cv.FlannBasedMatcher()
    matches = flann.knnMatch(des1,des2,k=2)
    # Need to draw only good matches, so create a mask
    matchesMask = [[0,0] for i in range(len(matches))]
    # ratio test as per Lowe's paper
    a = 0
    for i,(m,n) in enumerate(matches):
        if m.distance < 0.7*n.distance:
            matchesMask[i]=[1,0]
            a+=1
    print(a, matchesMask)

    draw_params = dict(matchColor = (0,255,0),
                   singlePointColor = (255,0,0),
                   matchesMask = matchesMask,
                   flags = cv.DrawMatchesFlags_DEFAULT)
    img3 = cv.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_params)
    plt.imshow(img3,),plt.show()
    # akaze = cv.AKAZE_create(diffusivity =0.0001)
    # kp1, des1 = akaze.detectAndCompute(img_jg, None)
    # kp2, des2 = akaze.detectAndCompute(img_h1g, None)

    # print(des1)
    # print(des2)

    # matcher = cv.DescriptorMatcher_create(cv.DescriptorMatcher_BRUTEFORCE_HAMMING)
    # nn_matches = matcher.knnMatch(desc1, desc2, 2)


    # matches = bf.match(des1,des2)
    # # Sort them in the order of their distance.
    # matches = sorted(matches, key = lambda x:x.distance)
    # # Draw first 10 matches.
    # img3 = cv.drawMatches(img_j,kp1,img_h1,kp2,matches[:10],None,flags=cv.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

    # plt.imshow(img3)
    # plt.show()
    # plt.close()
task1.1/mixed_train_to_the_coordinates_dataset/2626.jpg
r 26
26 [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 0], [1, 0], [0, 0], [0, 0], [0, 0], [1, 0], [1, 0], [0, 0], [1, 0], [1, 0], [1, 0], [0, 0], [1, 0], [1, 0], [1, 0], [1, 0], [0, 0], [1, 0], [0, 0], [0, 0], [1, 0], [0, 0], [0, 0], [1, 0], [1, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 0], [0, 0], [0, 0], [0, 0], [1, 0], [0, 0], [0, 0], [0, 0], [1, 0], [1, 0], [1, 0], [1, 0], [0, 0], [1, 0], [1, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]

rotate small images - many

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
import os
# own
from shared_image_functions import fix_angle, get_lines_c, crop

img_files, plus_points, train_rectangles, digits_rectangles, hints = get_all()

for i in range(len(img_files)):
    if i <5:
        continue
    if i > 20:
        break
    fp = img_files[i]
    img = cv.imread(fp)
    assert img is not None, "img could not be read"
    img = img[0:200, 0:200]
    # img2, _ = crop(img.copy(), rotate=False, rate=1.6)
    # img2 = cv.resize(img, (900, 900))
    # plt.imshow(img)
    # plt.show()
    img2 = fix_angle(img, get_lines_c)
    # a = img
    # b = img2
    # larger = a if a.size > b.size else b
    # smaller =  a if a.size < b.size else b
    # smaller = np.resize(smaller, larger.shape)
    _, axs = plt.subplots(1, 2, figsize=(10, 4))
    axs[0].imshow(img)
    axs[1].imshow(img2)
    plt.title(fp)
    # plt.savefig('autoimgs/rotatesingle.png')
    plt.show()
    plt.close()
    # break

./autoimgs/rotatesingle.png

train detection - histogram/back_projection

https://docs.opencv.org/4.8.0/da/d7f/tutorial_back_projection.html

  1. src to HSV format

2)

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
import os
from scipy.spatial.distance import pdist
from scipy.spatial.distance import squareform
# own
from shared_image_functions import find_angle, fix_angle, get_lines_c

# -------------- ANALYSE TEMPLATE ---------------------
template = cv.imread('train.png') # , cv.IMREAD_GRAYSCALE # , cv.IMREAD_GRAYSCALE

# -- exctract HUE from source
src = template
hsv = cv.cvtColor(src, cv.COLOR_BGR2HSV)
# hue = np.empty(hsv.shape, hsv.dtype)
# ch = (0, 0)
# cv.mixChannels([hsv], [hue], ch) #(400, 1400, 3) copy 0 channel

# -- get histogram for template --
# hsv, ranges = hsv_to_gimp(hsv)
output_histogram(hsv, [(0,255)]*3)

# ---------------------- TEST ON ALL ---------------
# template = template[:,:,0] # BGR
img_files, plus_points, train_rectangles, digits_rectangles, hints = get_all()

dilatation_type = cv.MORPH_RECT
dilatation_size = 5
element = cv.getStructuringElement(dilatation_type, (2*dilatation_size + 1, 2*dilatation_size+1), (dilatation_size, dilatation_size))

for i in range(len(img_files)):
    if i != 49:
        continue
    fp = img_files[i]
    print(fp)
    src = cv.imread(fp)
    assert src is not None, "img could not be read"
    # --------------- 1) BGR to HSV -------------
    hsv = cv.cvtColor(src.copy(), cv.COLOR_BGR2HSV)
    # --------------- 2) split and rotate
    imgs = [hsv[0:200, 200*j:(1+j)*200].copy() for j in range(7)]
    # [print(x.shape) for x in imgs]
    # --------------- 3) fix orientation
    a = find_angle(imgs[0], get_lines_c)
    imgs = [fix_angle(img, angle=a) for img in imgs]
    hsv = np.hstack(imgs)
    # --------------- 4) find train contours
    low_H, high_H = 102, 128
    low_S, high_S = 102, 153
    low_V, high_V = 102, 204
    mask = cv.inRange(hsv, (low_H, low_S, low_V), (high_H, high_S, high_V))
    # hsv = cv.cvtColor(src, cv.COLOR_HSV2GRAY)
    print("mask.shape", mask.shape)
    # _retval, th = cv.threshold(mask, 80, 255, cv.THRESH_BINARY)
    # print("th.shape", th.shape)
    # hsv_filtered = cv.bitwise_and(hsv, hsv, mask = mask)
    img = mask
    img = cv.dilate(img, element)
    img = cv.erode(img, element)
    plt.imshow(img)
    plt.show()
    contours, hierarchy = cv.findContours(img, cv.RETR_TREE,
                                          cv.CHAIN_APPROX_SIMPLE)
    # [print(cv.contourArea(c)) for c in contours]
    contours = [contours for c in contours if cv.contourArea(c) > 70]
    # print(len(contours))
    assert len(contours) == 7
    # ------------- 5) calc contour centers --------------
    centers = contours_calc_centers(contours) # and sort
    # ------------- 6) calc distance on grid - vertical and horizontal
    centers_single = [(c[0] - 200*j,c[1]) for j, c in enumerate(centers)]
    print(centers_single)
    # -- x
    distvec = pdist(centers_single, metric = lambda x, y: abs(abs(x[0] - y[0])/1.5 + abs(x[1] - y[1])))
    sqf = squareform(distvec)
    np.fill_diagonal(sqf, np.inf)
    i, j = np.where(sqf==sqf.min())
    i, j = i[0], j[0]
    xdist = abs(centers_single[i][0] -  centers_single[j][0])
    print("x", centers_single[i], centers_single[j])
    print("closest by x", xdist)
    # -- y
    distvec = pdist(centers_single, metric = lambda x, y: abs(abs(x[0] - y[0]) + abs(x[1] - y[1])/1.5))
    sqf = squareform(distvec)
    np.fill_diagonal(sqf, np.inf)
    i, j = np.where(sqf==sqf.min())
    i, j = i[0], j[0]
    print("y", centers_single[i], centers_single[j])
    ydist = abs(centers_single[i][1] - centers_single[j][1])
    print("closest by y", ydist)
    # ------------- 7) get vertical and horizontal figures-numbers
    for c in centers_single:
        print("c", c)
        # (|  |)
        xr = (round(c[0]-xdist/2), round(c[0]+xdist/2))
        print("xr", xr)
        # (=)
        yr = (round(c[1]-ydist/2), round(c[1]+ydist/2))
        print("yr", yr)
        # 1-----------\.
        # -----------2/
        cx = round(c[0])
        cy = round(c[1])
        ractx = ((0, yr[0]), (cx, yr[1])) # (1, 2)
        # |1 |
        # \./2
        racty = ((xr[0], 0), (xr[1], cy)) # (1, 2)
        print("ractx", ractx)
        print("racty", racty)
        # src = cv.drawContours(src, [ractx], 0, (0), -1)
        # cv.rectangle(src, ractx[0], ractx[1], (255,0,0), 10)
        cv.rectangle(src, racty[0], racty[1], (255,0,0), 10)
        # ------------ 8) cut rectangle per x and y
        # -- x
        print("subimg", ractx[0][1],(ractx[1][1] - ractx[0][1]),
                     ractx[0][0],(ractx[1][0] - ractx[0][0]))
        subimgx = src[ractx[0][1]:ractx[1][1],
                     ractx[0][0]:ractx[1][0]].copy()
        # -- y
        subimgy = src[racty[0][1]:racty[1][1],
                     racty[0][0]:racty[1][0]].copy()
        # plt.imshow(src)
        # plt.show()
        plt.imshow(subimgx)
        plt.show()
        plt.imshow(subimgy)
        plt.show()

        break

    # for c in centers:
    #     print(c)
    #     break

    # output = cv.cvtColor(hsv_filtered, cv.COLOR_HSV2BGR)
    # _retval, bin = cv.threshold(gray, 80, 255, cv.THRESH_BINARY)
    # cv.normalize(hist, hist, alpha=0, beta=255, norm_type=cv.NORM_MINMAX)
    # print(np.max(frame_threshold))
    break

# plt.imshow(output)
i 0
26.0 	 [2.]
51.0 	 [6.]
76.0 	 [7.]
102.0 	 [2.]
128.0 	 [16.]
153.0 	 [3.]
178.0 	 [1.]
204.0 	 [1.]
230.0 	 [2.]
255.0 	 [1.]

i 1
26.0 	 [0.]
51.0 	 [1.]
76.0 	 [3.]
102.0 	 [3.]
128.0 	 [26.]
153.0 	 [7.]
178.0 	 [2.]
204.0 	 [0.]
230.0 	 [0.]
255.0 	 [0.]

i 2
26.0 	 [0.]
51.0 	 [1.]
76.0 	 [0.]
102.0 	 [3.]
128.0 	 [23.]
153.0 	 [3.]
178.0 	 [5.]
204.0 	 [7.]
230.0 	 [0.]
255.0 	 [0.]

task1.1/mixed_train_to_the_coordinates_dataset/2683.jpg
mask.shape (200, 1400)

final3

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
from dataclasses import dataclass
from shared_image_functions import find_angle, fix_angle, get_lines_c
from scipy.spatial.distance import pdist
from scipy.spatial.distance import squareform

def find_train(src)->list:
    """ src - big image"""
    MIN_TRAIN_AREA = 100
    # --------------- 1) BGR to HSV -------------
    hsv = cv.cvtColor(src.copy(), cv.COLOR_BGR2HSV)
    # --------------- 2) split and rotate
    imgs = [hsv[0:200, 200*j:(1+j)*200].copy() for j in range(7)]
    imgs_src = [src[0:200, 200*j:(1+j)*200].copy() for j in range(7)]

    # --------------- 3) fix orientation
    # ss = imgs_src[0]
    # # ss = ss[30:, 40:]
    # a = find_angle(imgs[0], get_lines_c)
    # print("aaaaaaaaaaaaaaaaaaaaa", a)
    # ss = fix_angle(imgs_src[0], angle=a)
    # imgs = [fix_angle(img, angle=a) for img in imgs]
    # imgs_src0 = fix_angle(imgs_src[0], angle=a)
    imgs_src0 = imgs_src[0]
    hsv = np.hstack(imgs)
    # --------------- 4) find train contours
    low_H, high_H = 112, 128
    low_S, high_S = 102, 153
    low_V, high_V = 102, 204
    mask = cv.inRange(hsv, (low_H, low_S, low_V), (high_H, high_S, high_V))
    # print("mask.shape", mask.shape)

    dilatation_type = cv.MORPH_RECT
    dilatation_size = 5
    element = cv.getStructuringElement(dilatation_type, (2*dilatation_size + 1, 2*dilatation_size+1), (dilatation_size, dilatation_size))

    img = mask
    img = cv.dilate(img, element)
    img = cv.erode(img, element)
    contours, hierarchy = cv.findContours(img, cv.RETR_TREE,
                                          cv.CHAIN_APPROX_SIMPLE)
    contours = [c for c in contours if cv.contourArea(c) > MIN_TRAIN_AREA]
    # print(len(contours))
    assert len(contours) == 7

    # ------------- 5) calc contour centers --------------
    centers = contours_calc_centers(contours) # and sort
    # ------------- 6) calc distance on grid - vertical and horizontal
    centers_single = [(c[0] - 200*j,c[1]) for j, c in enumerate(centers)]
    # print(centers_single)
    # -- x
    distvec = pdist(centers_single, metric = lambda x, y: abs(abs(x[0] - y[0])/1.5 + abs(x[1] - y[1])))
    sqf = squareform(distvec)
    np.fill_diagonal(sqf, np.inf)
    i, j = np.where(sqf==sqf.min())
    i, j = i[0], j[0]
    xdist = abs(centers_single[i][0] -  centers_single[j][0])
    # print("x", centers_single[i], centers_single[j])
    # print("closest by x", xdist)
    # -- y
    distvec = pdist(centers_single, metric = lambda x, y: abs(abs(x[0] - y[0]) + abs(x[1] - y[1])/1.5))
    sqf = squareform(distvec)
    np.fill_diagonal(sqf, np.inf)

    i, j = np.where(sqf==sqf.min())
    i, j = i[0], j[0]
    # print("y", centers_single[i], centers_single[j])
    ydist = abs(centers_single[i][1] - centers_single[j][1])
    # print("closest by y", ydist)
    # ------------- 7) get vertical and horizontal figures-numbers
    rects = []
    for c in centers_single:
        # print("c", c)
        # (|  |)
        xr = (round(c[0]-xdist/2), round(c[0]+xdist/2))
        # print("xr", xr)
        # (=)
        yr = (round(c[1]-ydist/2), round(c[1]+ydist/2))
        # print("yr", yr)
        # 1-----------\.
        # -----------2/
        cx = round(c[0])
        cy = round(c[1])
        ractx = ((0, yr[0]), (cx, yr[1])) # (1, 2)
        # |1 |
        # \./2
        racty = ((xr[0], 0), (xr[1], cy)) # (1, 2)
        # ------------ 8) cut rectangle per x and y
        # -- x
        # print("subimg", ractx[0][1],(ractx[1][1] - ractx[0][1]),
        #              ractx[0][0],(ractx[1][0] - ractx[0][0]))

        subimgx = imgs_src0[ractx[0][1]:ractx[1][1],
                     ractx[0][0]:ractx[1][0]].copy()
        # -- y
        subimgy = imgs_src0[racty[0][1]:racty[1][1],
                     racty[0][0]:racty[1][0]].copy()
        rects.append({"subimgx": subimgx, "subimgy": subimgy,
        "ractx": ractx, "racty": racty, "center": c})
        # plt.imshow(src)
        # plt.show()
        # plt.imshow(subimgx)
        # plt.show()
        # plt.imshow(subimgy)
        # plt.show()
        # break

    return rects





HINT1_AREA_MIN = 2536
HINT1_AREA_MAX = 6038
HINT2_AREA_MIN = 684
HINT2_AREA_MAX = 2096

@dataclass
class ContourStats:
    circle_center_x_min: float
    circle_center_x_max: float
    circle_center_y_min: float
    circle_center_y_max: float
    circle_radius_min: float
    circle_radius_max: float
    circle_area_min: float
    circle_area_max: float


def find_object(image, circle_stats: ContourStats, conti = None):
    """ image - BGR
    loop: 1) channels, 2) threshold 3) contours
    continue: ((i, thrs), cnt)
    used in def find_hint_images """
    dilatation_type = cv.MORPH_RECT



    contour_result = None
    # -- 1)
    r = cv.split(image.copy())
    if conti is not None:
        r = r[conti[0][0]:]

    for i, gray in enumerate(r):
        if contour_result is not None:
            break
        # -- 2)
        ra = range(0, 255, 10)
        if conti is not None:
            ra = range(conti[0][1], 255, 10)
        for zz, thrs in enumerate(ra):
            # print(zz, thrs)
            if contour_result is not None:
                break
            # -- dilation
            dilatation_size = 1 + zz%2 #* zz%3
            # print(dilatation_size, thrs)
            element = cv.getStructuringElement(dilatation_type, (2*dilatation_size + 1, 2*dilatation_size+1), (dilatation_size, dilatation_size))
            if zz%10 ==0:
                gray2 = cv.erode(gray.copy(), element)
            else:
                gray2 = cv.erode(gray2, element)
            # gray2 = cv.erode(gray.copy(), element)

            gray2 = cv.dilate(gray2, element)
            gray2 = cv.dilate(gray2, element)

            _retval, bin = cv.threshold(gray2, thrs, 255, cv.THRESH_BINARY)
            contours, _ = cv.findContours(bin, cv.RETR_LIST,
                                          cv.CHAIN_APPROX_SIMPLE)
            # -- 3)
            for j, cnt in enumerate(contours):
                if contour_result is not None:
                    break
                if conti is not None and all(cnt[0][0] == conti[1][0][0]):
                    continue # TODO: sort contours and filter by x,y
                # -- features of contour
                (x,y),radius = cv.minEnclosingCircle(cnt)
                area = cv.contourArea(cnt)

                if circle_stats.circle_center_x_min < x < circle_stats.circle_center_x_max \
                   and circle_stats.circle_center_y_min < y < circle_stats.circle_center_y_max \
                   and circle_stats.circle_area_min < area < circle_stats.circle_area_max \
                   and circle_stats.circle_radius_min < radius < circle_stats.circle_radius_max:

                    contour_result = cnt
                    break
    return contour_result, (i, thrs)


def find_hint_images(img_hint):
    global HINT1_X_MAX, h1s, h2s
    img_hint1 = img_hint[:,:HINT1_X_MAX] # cut hint at right)
    cnt1, conti = find_object(img_hint1, h1s)
    if cnt1 is None:
        print(i, "find object result is None")
        return None
    # -- hint2 find --
    img_hint2 = img_hint[:,HINT1_X_MAX:] # cut hint at left

    cnt2, _ = find_object(img_hint2, h2s)
    if cnt2 is None:
        print(i, "find HINT2 is None")
        return None
    r1 = cv.boundingRect(cnt1)
    x,y,w,h = cv.boundingRect(cnt2)
    x += HINT1_X_MAX
    return r1, (x,y,w,h)

# ------------------- PREPARE HINT STATISITCS
HINT1_STATS_s = {'circle_center_x_min': 38.5, 'circle_center_x_max': 50.5, 'circle_center_y_min': 81.0, 'circle_center_y_max': 93.0, 'circle_radius_min': 28.41224479675293, 'circle_radius_max': 43.840721130371094}
HINT2_STATS_s = {'circle_center_x_min': 104.0, 'circle_center_x_max': 116.5, 'circle_center_y_min': 56.5, 'circle_center_y_max': 70.5, 'circle_radius_min': 14.764923095703125, 'circle_radius_max': 25.831281661987305}
# 'circle_center_x_max': 50.5 + 'circle_radius_max': 43.840721130371094 = 94
HINT1_X_MAX = 94

HINT1_STATS_s["circle_area_min"] = HINT1_AREA_MIN
HINT1_STATS_s["circle_area_max"] = HINT1_AREA_MAX
HINT2_STATS_s["circle_area_min"] = HINT2_AREA_MIN
HINT2_STATS_s["circle_area_max"] = HINT2_AREA_MAX

# HINT2_STATS_small = {k:((v - HINT1_X_MAX) if k.startswith("circle_center_x_") else v) for k,v in HINT2_STATS.items()}

MUL = 1.3
HINT1_STATS = {}
for k,v in HINT1_STATS_s.items():
    if k.endswith('min'):
        HINT1_STATS[k] = v/ MUL
    # elif "radius_max" in k: # max
    #     HINT1_STATS[k] = v* 1.8
    else:
        HINT1_STATS[k] = v*MUL
HINT2_STATS = {}
for k,v in HINT2_STATS_s.items():
    if '_x_' in k:
        v = v - HINT1_X_MAX
    if k.endswith('min'):
        HINT2_STATS[k] = v/ MUL
    # elif "radius_max" in k: # max
    #     HINT2_STATS[k] = v* 1.8
    else:
        HINT2_STATS[k] = v *MUL


h1s = ContourStats(**HINT1_STATS)
h2s = ContourStats(**HINT2_STATS)


def get_hint_sub(img, xywh, padding):
    x,y,w,h = xywh

    x1, y1 = (x,y)
    x2, y2 = (x+w, y+h)
    # with padding approach
    HINT_PADDING = 5

    # print("wtf", hrec1, x1, y1, x2, y2)
    yh = y+h + padding
    xw = x+w + padding
    y = y - padding
    x = x - padding
    y = y if y>=0 else 0
    x =x if x>=0 else 0
    yh = yh if yh<=200 else 200
    xw = xw if xw<=HINT_HORIZ else HINT_HORIZ
    img_h1 = img[y:yh,x:xw].copy()
    img_h1 = cv.cvtColor(img_h1, cv.COLOR_BGR2GRAY)
    return img_h1


def solve_captcha(image_path):
    src = cv.imread(image_path)
    assert src is not None, "img could not be read"
    # ------- 2) prepare hint images
    img_hint = get_hint_subimage(src)
    # ------- find hint subimages
    hrec1, hrec2 = find_hint_images(img_hint)

    # print(hrec1, hrec2)
    # ------- extract hint subimages
    # plt.imshow(img_hint),plt.show()

    # ------- 3) prepare main image - fix orientation
    imgs = [src[0:200, 200*j:(1+j)*200].copy() for j in range(7)]
    a = find_angle(imgs[0], get_lines_c)

    imgs = [fix_angle(img, angle=a) for img in imgs]
    # plt.imshow(imgs[0]),plt.show()
    # ------- 4) find train

    ftrains = find_train(np.hstack(imgs))
    # break


    # print("train keys", ftrains[0].keys())
    # --------- 4) compare hint images with ones near train
    SIGNIFICANT_DIFFERENCE_BETWEEN_TRAINS = 10
    trains = []

    for j, ft in enumerate(ftrains):
        trains.append(ft['center'])
        # print(j, ft['center'])

    # ------- 5) find hint images on main image
    img_dst = imgs[0]


    for d, p in [(0.8, 5), (0.9,20), (0.8,1),  (0.7, -1)]:
        img_h1 = get_hint_sub(img_hint, hrec1, p)
        img_src1 = img_h1
        dst_pts1 = match_images_swift(img_src1,img_dst, distance=d)
        dst_pts1 = [x for x in dst_pts1 if x[0] < 70]
        if len(dst_pts1) > 9 or len(dst_pts1) == 1:
            break

    for d, p in [(0.7, 5), (0.7,20), (0.7, 3), (0.9,15), (0.8, 5)]:
        img_h2 = get_hint_sub(img_hint, hrec2, p)
        img_src2 = img_h2
        dst_pts2 = match_images_swift(img_src2,img_dst, distance=d)
        dst_pts2 = [x for x in dst_pts2 if x[1] < 70]
        if len(dst_pts2) > 9 or len(dst_pts2) == 1:
            break
    # plt.imshow(img_dst),plt.show()
    # print("dst_pts1", len(dst_pts1))
    # TODO: may be null

    # TODO: may be null
    # print(dst_pts1)
    # print(dst_pts2)

    # print("dst_pts1", dst_pts1)
    # print("dst_pts2", dst_pts2)
    # center1 = get_centroid(dst_pts1)
    if len(dst_pts1) == 1:
        center1 = dst_pts1[0]
    elif len(dst_pts1)> 1:
        center1 = get_centroid(dst_pts1)
    else:
        print("error1")
        return 0

    if len(dst_pts2) == 1:
        center2 = dst_pts2[0]
    elif len(dst_pts2)> 1:
        center2 = get_centroid(dst_pts2)
    else:
        print("error2")
        return 0

    # print("len(dst_pts1), len(dst_pts2)", len(dst_pts1), len(dst_pts2))
    # print(center1)
    # print(center2)
    # # trains = [[x[0], x[1]] for x in trains]
    # # trains = sum(trains,[])
    # print("trains", trains)
    # v = [plus_points[i][0]] + list(center1) + list(center2) + trains
    # np.train
    # assert len(v) == 19
    # table.append(v)
    # print("wtf", i,plus_points[i][0], center1, center2, trains)
    # draw_points(img_dst, [center1])
    # plt.imshow(img_h2),plt.show()
    # draw_points(img_dst.copy(), dst_pts2)
    # draw_points(img_dst, [center2])
    r = []
    for t in trains:
        # print(t, center1, center2)
        # print(abs(center1[1] - t[1]), abs(center2[0] - t[0]))
        sub = abs(center1[1] - t[1]) + abs(center2[0] - t[0])
        r.append(sub)
    return np.argmin(r) #, center1, center2


# ---------------------- TEST ON ALL ---------------
img_files, plus_points, train_rectangles, digits_rectangles, hints = \
  get_all(main_path = "/home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset")


res = []
for i in range(len(img_files)):
    # if i != 717:
    #     continue
    # pts1, pts2 = hints[i]
    # if pts2 is None:
    #     continue
    # center1 = get_centroid(pts1)
    # center2 = get_centroid(pts2)
    # print(center1)
    # break
    # if i < 700 or i > 800:
    #     continue
    r = solve_captcha(img_files[i])
    # if r is None:
    #     continue
    # resu, hc1, hc2 = r
    # print("hc1", np.linalg.norm(hc1-center1))
    # print("hc2", np.linalg.norm(hc2-center2))

    # r = solve_captcha(img_files[i])
    resu = r
    print(i, resu, plus_points[i][0], img_files[i])
    # assert r == plus_points[i][0]

    res.append(r)
print(len(res))
print(len(plus_points))
# v = [int(x1 == x2[0]) for x1, x2 in zip(res, plus_points[:20+1])]
if len(plus_points) == len(res):
    v = [int(x1 == x2[0]) for x1, x2 in zip(res, plus_points)]
    print("accuracy", len([x for x in v if x ==1])/len(v) )
0 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2626.jpg
1 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2627.jpg
2 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2628.jpg
3 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2629.jpg
4 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2630.jpg
5 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2632.jpg
6 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2633.jpg
7 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2634.jpg
8 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2635.jpg
9 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2637.jpg
10 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2638.jpg
11 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2639.jpg
12 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2642.jpg
13 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2643.jpg
14 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2644.jpg
15 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2645.jpg
16 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2646.jpg
17 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2647.jpg
18 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2649.jpg
19 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2650.jpg
20 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2651.jpg
21 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2652.jpg
22 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2653.jpg
23 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2654.jpg
24 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2655.jpg
error1
25 0 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2656.jpg
26 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2657.jpg
27 1 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2658.jpg
28 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2660.jpg
29 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2661.jpg
30 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2663.jpg
31 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2664.jpg
32 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2665.jpg
33 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2666.jpg
34 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2667.jpg
35 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2668.jpg
36 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2669.jpg
37 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2670.jpg
38 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2671.jpg
39 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2672.jpg
40 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2673.jpg
41 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2674.jpg
42 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2675.jpg
43 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2676.jpg
44 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2677.jpg
45 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2678.jpg
46 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2679.jpg
47 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2680.jpg
48 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2682.jpg
49 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2683.jpg
50 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2684.jpg
51 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2685.jpg
52 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2686.jpg
53 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2687.jpg
54 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2689.jpg
55 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2690.jpg
56 1 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2691.jpg
57 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2695.jpg
58 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2696.jpg
59 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2702.jpg
60 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2713.jpg
61 3 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2717.jpg
62 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2719.jpg
63 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2720.jpg
64 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2725.jpg
65 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2729.jpg
66 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2731.jpg
67 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2735.jpg
68 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2737.jpg
69 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2740.jpg
error2
70 0 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2742.jpg
71 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2743.jpg
72 6 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2747.jpg
73 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2748.jpg
74 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2752.jpg
75 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2753.jpg
76 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2754.jpg
77 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2755.jpg
78 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2756.jpg
79 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2757.jpg
80 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2759.jpg
81 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2760.jpg
82 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2767.jpg
83 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2768.jpg
84 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2769.jpg
85 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2771.jpg
86 2 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2772.jpg
87 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2774.jpg
88 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2775.jpg
89 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2776.jpg
90 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2778.jpg
91 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2779.jpg
92 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2780.jpg
93 3 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2781.jpg
94 0 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2782.jpg
95 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2787.jpg
96 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2788.jpg
97 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2789.jpg
98 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2790.jpg
99 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2791.jpg
100 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2792.jpg
101 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2793.jpg
102 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2795.jpg
103 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2796.jpg
104 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2797.jpg
105 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2799.jpg
106 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2800.jpg
107 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2801.jpg
108 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2802.jpg
109 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2804.jpg
110 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2805.jpg
111 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2807.jpg
112 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2808.jpg
113 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2809.jpg
114 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2810.jpg
115 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2811.jpg
116 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2812.jpg
117 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2815.jpg
118 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2817.jpg
119 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2819.jpg
120 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2820.jpg
121 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2821.jpg
122 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2822.jpg
123 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2823.jpg
124 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2824.jpg
125 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2825.jpg
126 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2826.jpg
127 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2827.jpg
128 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2828.jpg
129 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2829.jpg
130 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2830.jpg
131 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2833.jpg
132 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2835.jpg
133 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2836.jpg
134 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2837.jpg
135 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2838.jpg
136 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2839.jpg
137 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2840.jpg
138 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2841.jpg
error2
139 0 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2842.jpg
140 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2843.jpg
141 5 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2844.jpg
142 2 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2845.jpg
143 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2846.jpg
144 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2850.jpg
145 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2851.jpg
146 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2853.jpg
147 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2854.jpg
148 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2855.jpg
149 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2858.jpg
error1
150 0 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2859.jpg
151 0 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2861.jpg
152 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2864.jpg
153 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2865.jpg
154 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2866.jpg
155 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2869.jpg
156 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2870.jpg
157 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2871.jpg
158 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2872.jpg
159 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2873.jpg
160 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2874.jpg
161 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2876.jpg
162 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2878.jpg
163 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2879.jpg
164 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2880.jpg
165 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2881.jpg
166 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2882.jpg
167 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2883.jpg
168 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2884.jpg
169 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2885.jpg
170 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2886.jpg
171 4 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2888.jpg
172 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2889.jpg
173 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2890.jpg
174 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2891.jpg
175 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2893.jpg
176 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2895.jpg
177 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2896.jpg
178 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2898.jpg
179 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2901.jpg
180 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2903.jpg
181 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2904.jpg
182 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2905.jpg
183 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2906.jpg
error2
184 0 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2911.jpg
185 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2912.jpg
186 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2914.jpg
187 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2916.jpg
188 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2918.jpg
189 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2920.jpg
190 5 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2922.jpg
191 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2923.jpg
192 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2925.jpg
193 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2927.jpg
194 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2928.jpg
195 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2929.jpg
196 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2930.jpg
197 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2931.jpg
198 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2932.jpg
199 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2934.jpg
200 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2937.jpg
201 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2939.jpg
202 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2940.jpg
203 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2944.jpg
204 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2946.jpg
205 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2947.jpg
206 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2948.jpg
207 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2951.jpg
208 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2952.jpg
209 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2953.jpg
210 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2956.jpg
211 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2957.jpg
212 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2958.jpg
213 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2959.jpg
214 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2960.jpg
215 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2964.jpg
216 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2965.jpg
217 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2971.jpg
218 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2977.jpg
219 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2978.jpg
220 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2980.jpg
221 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2985.jpg
222 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2986.jpg
223 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2987.jpg
224 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2988.jpg
225 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2989.jpg
226 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2992.jpg
227 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2993.jpg
228 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2994.jpg
229 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2995.jpg
230 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/2998.jpg
231 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3001.jpg
232 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3002.jpg
233 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3004.jpg
234 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3011.jpg
235 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3012.jpg
236 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3013.jpg
237 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3014.jpg
238 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3019.jpg
239 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3021.jpg
240 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3022.jpg
241 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3024.jpg
242 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3026.jpg
243 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3028.jpg
244 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3033.jpg
245 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3036.jpg
246 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3037.jpg
247 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3039.jpg
248 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3040.jpg
249 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3044.jpg
250 6 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3045.jpg
251 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3046.jpg
252 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3047.jpg
253 3 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3049.jpg
254 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3050.jpg
255 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3051.jpg
256 0 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3052.jpg
257 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3053.jpg
258 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3054.jpg
259 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3055.jpg
260 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3057.jpg
261 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3058.jpg
262 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3060.jpg
263 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3061.jpg
264 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3063.jpg
265 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3064.jpg
266 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3065.jpg
267 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3067.jpg
268 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3069.jpg
269 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3071.jpg
270 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3072.jpg
271 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3073.jpg
272 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3077.jpg
error1
273 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3081.jpg
274 0 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3082.jpg
275 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3083.jpg
276 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3084.jpg
277 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3085.jpg
278 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3086.jpg
279 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3087.jpg
280 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3089.jpg
281 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3100.jpg
282 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3101.jpg
283 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3103.jpg
284 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3104.jpg
285 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3108.jpg
286 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3112.jpg
287 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3113.jpg
288 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3115.jpg
289 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3117.jpg
290 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3118.jpg
291 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3119.jpg
292 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3121.jpg
293 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3122.jpg
294 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3126.jpg
295 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3129.jpg
296 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3130.jpg
297 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3133.jpg
298 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3135.jpg
299 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3136.jpg
300 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3137.jpg
301 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3139.jpg
302 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3142.jpg
303 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3143.jpg
304 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3144.jpg
305 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3146.jpg
306 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3148.jpg
307 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3149.jpg
308 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3155.jpg
309 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3156.jpg
310 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3157.jpg
311 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3158.jpg
312 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3159.jpg
313 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3161.jpg
314 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3164.jpg
315 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3165.jpg
316 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3166.jpg
317 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3167.jpg
318 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3168.jpg
319 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3171.jpg
320 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3173.jpg
321 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3176.jpg
322 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3179.jpg
error2
323 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3181.jpg
324 5 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3182.jpg
325 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3183.jpg
326 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3184.jpg
327 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3186.jpg
328 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3187.jpg
329 6 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3188.jpg
330 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3192.jpg
331 1 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3193.jpg
332 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3194.jpg
333 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3195.jpg
334 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3196.jpg
335 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3198.jpg
error2
336 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3200.jpg
337 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3201.jpg
338 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3202.jpg
339 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3206.jpg
340 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3208.jpg
341 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3209.jpg
342 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3210.jpg
343 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3211.jpg
344 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3212.jpg
345 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3214.jpg
346 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3218.jpg
347 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3220.jpg
348 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3221.jpg
349 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3225.jpg
350 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3227.jpg
351 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3230.jpg
352 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3231.jpg
353 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3233.jpg
354 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3237.jpg
355 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3238.jpg
356 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3239.jpg
357 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3240.jpg
358 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3241.jpg
359 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3243.jpg
360 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3246.jpg
361 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3247.jpg
362 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3248.jpg
363 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3250.jpg
364 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3251.jpg
365 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3256.jpg
366 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3257.jpg
367 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3259.jpg
368 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3268.jpg
369 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3270.jpg
370 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3271.jpg
371 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3272.jpg
372 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3275.jpg
373 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3276.jpg
374 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3277.jpg
375 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3278.jpg
376 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3284.jpg
377 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3287.jpg
error1
378 0 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3290.jpg
379 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3293.jpg
380 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3294.jpg
381 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3295.jpg
382 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3297.jpg
383 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3298.jpg
384 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3301.jpg
385 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3303.jpg
386 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3306.jpg
387 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3308.jpg
388 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3310.jpg
389 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3312.jpg
390 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3313.jpg
391 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3318.jpg
error2
392 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3320.jpg
393 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3321.jpg
394 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3322.jpg
395 4 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3325.jpg
396 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3328.jpg
397 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3330.jpg
398 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3332.jpg
399 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3333.jpg
400 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3334.jpg
401 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3336.jpg
402 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3338.jpg
error1
403 0 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3339.jpg
404 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3346.jpg
405 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3350.jpg
406 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3351.jpg
407 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3352.jpg
408 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3353.jpg
409 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3355.jpg
410 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3356.jpg
411 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3358.jpg
412 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3362.jpg
413 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3363.jpg
414 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3364.jpg
415 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3368.jpg
416 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3369.jpg
417 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3372.jpg
error2
418 0 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3373.jpg
419 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3375.jpg
420 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3376.jpg
error2
421 0 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3377.jpg
422 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3379.jpg
423 1 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3382.jpg
424 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3383.jpg
425 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3384.jpg
426 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3387.jpg
427 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3388.jpg
428 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3389.jpg
429 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3390.jpg
430 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3394.jpg
431 0 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3397.jpg
432 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3398.jpg
433 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3400.jpg
434 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3401.jpg
435 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3402.jpg
436 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3403.jpg
437 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3404.jpg
438 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3406.jpg
439 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3408.jpg
440 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3409.jpg
441 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3412.jpg
442 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3416.jpg
error2
443 0 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3419.jpg
444 3 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3421.jpg
445 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3422.jpg
446 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3423.jpg
447 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3424.jpg
448 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3425.jpg
449 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3426.jpg
450 2 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3431.jpg
451 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3432.jpg
452 6 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3434.jpg
453 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3435.jpg
454 3 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3437.jpg
455 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3438.jpg
456 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3440.jpg
457 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3441.jpg
458 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3445.jpg
459 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3447.jpg
460 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3448.jpg
461 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3450.jpg
462 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3451.jpg
463 4 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3453.jpg
464 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3454.jpg
465 1 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3455.jpg
466 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3456.jpg
467 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3461.jpg
error2
468 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3463.jpg
469 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3468.jpg
470 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3470.jpg
error2
471 0 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3472.jpg
472 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3473.jpg
473 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3476.jpg
474 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3477.jpg
475 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3478.jpg
476 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3482.jpg
error2
477 0 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3484.jpg
478 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3487.jpg
479 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3488.jpg
480 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3493.jpg
481 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3494.jpg
482 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3495.jpg
483 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3499.jpg
484 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3502.jpg
485 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3503.jpg
error2
486 0 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3504.jpg
487 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3505.jpg
488 2 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3510.jpg
489 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3511.jpg
490 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3512.jpg
491 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3513.jpg
492 4 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3514.jpg
493 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3519.jpg
494 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3522.jpg
error2
495 0 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3523.jpg
496 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3524.jpg
497 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3525.jpg
498 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3526.jpg
499 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3527.jpg
500 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3529.jpg
501 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3536.jpg
502 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3538.jpg
503 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3541.jpg
504 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3542.jpg
505 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3543.jpg
506 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3546.jpg
507 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3547.jpg
508 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3548.jpg
509 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3549.jpg
510 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3550.jpg
511 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3553.jpg
512 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3558.jpg
513 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3559.jpg
514 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3560.jpg
error2
515 0 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3565.jpg
516 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3567.jpg
517 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3569.jpg
518 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3570.jpg
519 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3571.jpg
520 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3572.jpg
521 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3573.jpg
522 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3574.jpg
523 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3577.jpg
524 3 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3580.jpg
525 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3581.jpg
526 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3585.jpg
527 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3586.jpg
528 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3591.jpg
529 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3592.jpg
530 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3593.jpg
531 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3594.jpg
532 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3595.jpg
533 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3596.jpg
534 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3598.jpg
535 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3599.jpg
536 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3601.jpg
537 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3603.jpg
538 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3606.jpg
539 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3607.jpg
540 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3608.jpg
541 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3610.jpg
error2
542 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3612.jpg
543 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3614.jpg
544 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3615.jpg
545 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3616.jpg
546 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3618.jpg
547 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3619.jpg
548 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3621.jpg
549 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3623.jpg
550 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3625.jpg
551 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3626.jpg
552 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3629.jpg
553 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3632.jpg
error2
554 0 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3633.jpg
555 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3634.jpg
556 5 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3637.jpg
557 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3639.jpg
558 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3640.jpg
559 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3642.jpg
560 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3644.jpg
561 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3645.jpg
562 3 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3646.jpg
563 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3648.jpg
564 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3651.jpg
565 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3652.jpg
566 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3655.jpg
567 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3656.jpg
568 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3657.jpg
569 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3659.jpg
570 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3661.jpg
571 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3668.jpg
572 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3670.jpg
573 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3671.jpg
574 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3674.jpg
575 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3675.jpg
576 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3677.jpg
577 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3678.jpg
578 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3679.jpg
579 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3681.jpg
580 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3682.jpg
581 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3683.jpg
582 3 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3686.jpg
583 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3687.jpg
584 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3688.jpg
585 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3691.jpg
586 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3692.jpg
587 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3693.jpg
588 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3696.jpg
589 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3698.jpg
590 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3700.jpg
error1
591 0 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3701.jpg
592 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3706.jpg
593 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3710.jpg
594 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3711.jpg
595 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3713.jpg
596 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3714.jpg
597 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3718.jpg
598 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3719.jpg
error2
599 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3720.jpg
600 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3725.jpg
601 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3729.jpg
602 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3731.jpg
603 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3732.jpg
604 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3733.jpg
605 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3736.jpg
606 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3737.jpg
607 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3741.jpg
608 4 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3742.jpg
609 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3743.jpg
610 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3746.jpg
611 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3747.jpg
612 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3748.jpg
613 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3750.jpg
614 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3752.jpg
615 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3754.jpg
616 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3755.jpg
617 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3756.jpg
618 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3758.jpg
619 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3762.jpg
620 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3763.jpg
621 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3768.jpg
622 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3771.jpg
623 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3776.jpg
624 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3778.jpg
625 2 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3779.jpg
626 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3781.jpg
627 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3782.jpg
628 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3787.jpg
629 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3788.jpg
630 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3792.jpg
631 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3793.jpg
632 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3794.jpg
633 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3796.jpg
634 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3797.jpg
635 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3799.jpg
636 2 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3800.jpg
637 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3801.jpg
638 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3803.jpg
639 5 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3804.jpg
640 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3806.jpg
641 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3807.jpg
642 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3808.jpg
643 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3810.jpg
644 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3811.jpg
645 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3812.jpg
646 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3814.jpg
647 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3815.jpg
648 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3816.jpg
649 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3818.jpg
650 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3820.jpg
651 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3822.jpg
652 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3823.jpg
653 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3824.jpg
654 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3825.jpg
655 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3826.jpg
656 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3829.jpg
657 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3831.jpg
error2
658 0 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3834.jpg
659 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3835.jpg
660 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3836.jpg
661 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3838.jpg
662 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3839.jpg
663 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3840.jpg
664 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3841.jpg
665 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3844.jpg
666 0 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3847.jpg
667 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3848.jpg
668 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3849.jpg
669 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3851.jpg
670 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3852.jpg
671 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3854.jpg
672 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3856.jpg
673 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3858.jpg
674 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3860.jpg
error2
675 0 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3861.jpg
676 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3863.jpg
677 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3864.jpg
678 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3870.jpg
679 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3871.jpg
680 2 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3872.jpg
681 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3873.jpg
error2
682 0 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3874.jpg
683 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3875.jpg
684 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3878.jpg
685 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3879.jpg
686 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3885.jpg
687 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3887.jpg
688 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3888.jpg
689 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3890.jpg
690 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3891.jpg
691 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3893.jpg
692 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3896.jpg
693 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3897.jpg
error2
694 0 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3899.jpg
695 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3900.jpg
696 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3904.jpg
697 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3907.jpg
698 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3910.jpg
699 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3911.jpg
700 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3915.jpg
701 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3916.jpg
error1
702 0 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3918.jpg
703 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3919.jpg
704 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3921.jpg
705 2 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3922.jpg
706 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3925.jpg
707 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3926.jpg
708 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3928.jpg
709 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3929.jpg
710 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3935.jpg
711 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3937.jpg
712 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3938.jpg
713 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3940.jpg
error2
714 0 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3941.jpg
715 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3943.jpg
716 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3945.jpg
717 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3949.jpg
error2
718 0 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3950.jpg
719 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3955.jpg
720 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3956.jpg
721 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3957.jpg
722 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3959.jpg
723 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3962.jpg
724 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3965.jpg
725 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3971.jpg
726 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3972.jpg
727 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3977.jpg
728 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3978.jpg
729 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3979.jpg
730 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3981.jpg
731 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3984.jpg
732 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3985.jpg
733 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3986.jpg
734 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3987.jpg
735 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3991.jpg
736 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3992.jpg
737 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3993.jpg
738 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3994.jpg
739 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3997.jpg
740 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/3998.jpg
741 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4001.jpg
742 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4002.jpg
743 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4003.jpg
744 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4004.jpg
745 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4006.jpg
746 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4008.jpg
747 5 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4009.jpg
748 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4010.jpg
749 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4011.jpg
750 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4012.jpg
751 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4013.jpg
752 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4014.jpg
753 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4015.jpg
754 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4018.jpg
755 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4020.jpg
756 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4021.jpg
757 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4022.jpg
758 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4023.jpg
759 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4024.jpg
760 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4025.jpg
761 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4026.jpg
762 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4027.jpg
763 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4028.jpg
764 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4031.jpg
765 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4032.jpg
766 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4034.jpg
767 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4036.jpg
768 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4037.jpg
769 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4038.jpg
error1
770 0 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4039.jpg
771 4 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4041.jpg
772 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4043.jpg
773 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4044.jpg
774 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4046.jpg
775 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4049.jpg
776 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4051.jpg
777 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4052.jpg
778 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4053.jpg
779 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4055.jpg
780 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4056.jpg
781 0 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4060.jpg
782 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4061.jpg
783 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4062.jpg
784 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4063.jpg
785 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4065.jpg
786 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4068.jpg
787 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4069.jpg
788 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4070.jpg
789 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4071.jpg
790 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4072.jpg
791 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4079.jpg
792 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4081.jpg
793 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4082.jpg
794 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4083.jpg
795 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4085.jpg
796 2 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4086.jpg
797 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4089.jpg
798 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4091.jpg
799 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4092.jpg
800 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4093.jpg
801 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4097.jpg
802 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4099.jpg
803 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4100.jpg
error2
804 0 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4101.jpg
805 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4104.jpg
806 0 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4106.jpg
807 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4111.jpg
808 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4112.jpg
809 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4114.jpg
810 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4117.jpg
811 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4118.jpg
812 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4121.jpg
813 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4122.jpg
814 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4124.jpg
815 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4125.jpg
816 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4126.jpg
817 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4131.jpg
818 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4133.jpg
819 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4135.jpg
820 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4136.jpg
821 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4137.jpg
822 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4139.jpg
error1
823 0 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4141.jpg
824 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4145.jpg
825 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4147.jpg
826 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4148.jpg
error2
827 0 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4149.jpg
828 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4154.jpg
829 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4157.jpg
830 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4158.jpg
831 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4159.jpg
832 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4161.jpg
833 3 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4166.jpg
834 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4167.jpg
835 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4169.jpg
836 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4172.jpg
837 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4179.jpg
838 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4182.jpg
839 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4187.jpg
840 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4190.jpg
841 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4192.jpg
842 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4194.jpg
843 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4197.jpg
844 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4198.jpg
845 3 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4202.jpg
846 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4203.jpg
847 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4204.jpg
848 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4208.jpg
849 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4211.jpg
850 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4212.jpg
851 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4214.jpg
852 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4215.jpg
853 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4216.jpg
854 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4217.jpg
855 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4218.jpg
856 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4219.jpg
857 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4223.jpg
858 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4224.jpg
859 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4225.jpg
860 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4226.jpg
error2
861 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4227.jpg
862 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4228.jpg
863 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4230.jpg
864 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4234.jpg
865 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4235.jpg
866 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4236.jpg
867 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4237.jpg
error2
868 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4239.jpg
869 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4240.jpg
870 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4242.jpg
871 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4243.jpg
872 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4245.jpg
873 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4246.jpg
874 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4247.jpg
875 1 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4249.jpg
876 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4250.jpg
877 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4251.jpg
878 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4252.jpg
error1
879 0 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4254.jpg
880 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4255.jpg
881 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4257.jpg
882 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4258.jpg
883 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4259.jpg
884 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4260.jpg
885 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4261.jpg
886 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4263.jpg
887 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4265.jpg
888 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4266.jpg
889 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4268.jpg
890 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4270.jpg
891 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4271.jpg
892 3 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4272.jpg
893 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4273.jpg
894 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4274.jpg
895 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4275.jpg
896 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4276.jpg
error2
897 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4277.jpg
898 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4280.jpg
899 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4282.jpg
900 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4286.jpg
901 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4287.jpg
902 1 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4290.jpg
903 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4293.jpg
904 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4294.jpg
905 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4296.jpg
906 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4299.jpg
907 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4300.jpg
908 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4302.jpg
909 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4304.jpg
910 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4306.jpg
911 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4311.jpg
912 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4313.jpg
913 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4316.jpg
914 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4319.jpg
915 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4320.jpg
916 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4322.jpg
917 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4323.jpg
918 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4326.jpg
919 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4329.jpg
error2
920 0 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4331.jpg
921 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4332.jpg
922 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4333.jpg
923 0 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4338.jpg
924 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4340.jpg
925 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4342.jpg
926 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4344.jpg
927 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4347.jpg
928 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4350.jpg
929 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4351.jpg
930 1 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4356.jpg
931 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4361.jpg
932 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4366.jpg
933 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4367.jpg
934 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4368.jpg
935 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4370.jpg
936 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4372.jpg
937 5 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4376.jpg
938 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4378.jpg
939 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4382.jpg
940 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4383.jpg
941 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4386.jpg
942 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4389.jpg
943 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4391.jpg
944 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4393.jpg
945 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4395.jpg
946 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4396.jpg
947 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4397.jpg
948 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4401.jpg
949 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4408.jpg
950 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4409.jpg
951 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4411.jpg
952 1 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4413.jpg
953 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4415.jpg
954 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4418.jpg
955 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4419.jpg
956 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4420.jpg
957 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4421.jpg
958 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4422.jpg
959 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4423.jpg
960 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4424.jpg
961 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4425.jpg
962 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4426.jpg
963 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4427.jpg
964 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4429.jpg
965 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4431.jpg
966 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4432.jpg
967 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4434.jpg
968 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4435.jpg
969 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4437.jpg
970 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4440.jpg
971 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4441.jpg
972 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4442.jpg
973 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4443.jpg
974 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4444.jpg
975 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4446.jpg
976 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4447.jpg
977 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4448.jpg
978 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4449.jpg
979 1 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4451.jpg
980 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4452.jpg
981 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4453.jpg
982 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4455.jpg
983 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4456.jpg
984 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4457.jpg
985 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4458.jpg
986 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4459.jpg
987 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4460.jpg
988 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4461.jpg
989 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4462.jpg
990 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4463.jpg
991 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4464.jpg
992 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4465.jpg
993 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4467.jpg
994 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4468.jpg
995 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4472.jpg
996 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4473.jpg
997 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4474.jpg
998 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4475.jpg
999 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4476.jpg
1000 2 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4477.jpg
1001 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4481.jpg
1002 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4482.jpg
error2
1003 0 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4483.jpg
1004 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4484.jpg
1005 6 6 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4485.jpg
1006 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4490.jpg
1007 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4492.jpg
1008 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4493.jpg
1009 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4494.jpg
1010 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4495.jpg
1011 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4498.jpg
1012 3 3 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4499.jpg
1013 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4505.jpg
1014 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4506.jpg
1015 2 2 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4508.jpg
1016 4 4 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4509.jpg
1017 5 5 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4511.jpg
1018 1 1 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4516.jpg
1019 0 0 /home/u/DataSets/task1.1/mixed_train_to_the_coordinates_dataset/4518.jpg
1020
1020
accuracy 0.9137254901960784