├── .gitignore ├── 01_get_elements.py ├── 02_get_stats.py ├── 03_build_ways_data.py ├── 04_download_satellite.py ├── 05_build_samplesfile.py ├── 05_draw_bbox.py ├── 06_get_negatives.py ├── 07_fit_min_neighbors.py ├── 08_plot_fit.py ├── 09_draw_results.py ├── LICENSE ├── Makefile ├── README.md ├── baseball.xml ├── basketball.xml ├── data └── .gitignore ├── detector.py ├── empty_satellite.png ├── fit ├── cascade-2000.png ├── cascade-4000-2000_negative.csv ├── cascade-4000-2000_positive.csv ├── cascade-4000.png ├── cascade-6000-3000_negative.csv ├── cascade-6000-3000_positive.csv ├── cascade-6000.png ├── cascade-8000-4000_negative.csv ├── cascade-8000-4000_positive.csv ├── cascade-8000.png ├── cascade-default_negative.csv └── cascade-default_positive.csv ├── info_baseball.dat ├── info_baseball.vec ├── info_basketball.dat ├── info_basketball.vec ├── info_tennis.dat ├── info_tennis.vec ├── negative.txt ├── output ├── cascade-4000-2000.xml ├── cascade-4000-2000_negative.csv ├── cascade-4000-2000_positive.csv ├── cascade-6000-3000.xml ├── cascade-6000-3000_negative.csv ├── cascade-6000-3000_positive.csv ├── cascade-8000-4000.xml ├── cascade-8000-4000_negative.csv ├── cascade-8000-4000_positive.csv ├── cascade-default.xml ├── cascade-default_negative.csv └── cascade-default_positive.csv ├── readme_images ├── image00.jpg ├── image01.png ├── image02.png ├── image03.png ├── image04.png ├── image05.jpg ├── image06.png ├── image07.png ├── image08.jpg ├── image09.png ├── image10.png ├── image11.png └── image12.png ├── restwice ├── samples-4000 └── log.txt ├── satellite └── .gitignore ├── tennis.xml └── utils ├── __init__.py ├── geo.py ├── mapbox_static.py └── overpass_client.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | 47 | # Translations 48 | *.mo 49 | *.pot 50 | 51 | # Django stuff: 52 | *.log 53 | 54 | # Sphinx documentation 55 | docs/_build/ 56 | 57 | # PyBuilder 58 | target/ 59 | 60 | #sample satellite images 61 | samples-4000/*.png 62 | -------------------------------------------------------------------------------- /01_get_elements.py: -------------------------------------------------------------------------------- 1 | ''' 2 | We're gonna download every pitch in the US (leisure=pitch) that is defined 3 | as a way (we want to be able to compute a bounding box and centroid to 4 | improve the CV analysis). 5 | ''' 6 | 7 | from utils.geo import ELEMENTS_FILENAME 8 | from utils.overpass_client import OverpassClient 9 | import json 10 | 11 | # The operator (._;>;); asks for the nodes and ways that are referred by 12 | # the relations and ways in the result. 13 | ql_pitch = '''\ 14 | way 15 | [leisure=pitch] 16 | ({query_bb_s},{query_bb_w},{query_bb_n},{query_bb_e}); 17 | (._;>;); 18 | out; 19 | ''' 20 | 21 | # For the continental US bbox we use the one provided by: 22 | # https://www.flickr.com/places/info/24875662 23 | us_s = 24.9493 24 | us_w = -125.0011 25 | us_n = 49.5904 26 | us_e = -66.9326 27 | 28 | # Overpass requires a bbox in the SWNE format. Because the continental US is 29 | # too big for a single query (it timeouts), we're gonna split in a smaller 30 | # queries. This means (samples-1)^2 boxes. 31 | samples = 11 # 100 boxes 32 | 33 | # Total = 1,435,427 34 | overpass_client = OverpassClient(endpoint='fr') 35 | elements = overpass_client.get_bbox_elements( 36 | ql_template=ql_pitch, 37 | bb_s=us_s, bb_w=us_w, bb_n=us_n, bb_e=us_e, 38 | samples=samples) 39 | print 'Total elements found: %d' % len(elements) 40 | 41 | # Cache the result 42 | with open(ELEMENTS_FILENAME, 'w') as f: 43 | json.dump(elements, f) 44 | -------------------------------------------------------------------------------- /02_get_stats.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Print some stats on all the elements we've found 3 | ''' 4 | 5 | from utils.geo import ELEMENTS_FILENAME 6 | import json 7 | import operator 8 | 9 | # Load the file 10 | print 'Loading %s...' % ELEMENTS_FILENAME 11 | with open(ELEMENTS_FILENAME, 'r') as f: 12 | elements = json.load(f) 13 | 14 | #Total elements found: 15 | 16 | # Total = 1,435,427 17 | print 'Total elements found: %d' % len(elements) 18 | 19 | # Stats 20 | sport_stats = {} 21 | elements_stats = {} 22 | for element in elements: 23 | element_type = element.get('type') 24 | 25 | # Find the most popular sport pitches 26 | if element_type == 'way': 27 | sport = element.get('tags', {}).get('sport', 'unknown').lower() 28 | sport_stats[sport] = (sport_stats[sport] + 1) \ 29 | if sport in sport_stats else 1 30 | 31 | # Build type stats (nodes and ways) 32 | elements_stats[element_type] = (elements_stats[element_type] + 1) \ 33 | if element_type in elements_stats else 1 34 | 35 | # Elements stats: {u'node': 1,265,357, u'way': 170,070} 36 | # Percentages, node: 88%, way: 12% 37 | # About 7.5 nodes per way 38 | print elements_stats 39 | 40 | # Sort the sports by value, and reverse (descending values) 41 | sport_stats = sorted(sport_stats.items(), key=operator.itemgetter(1)) 42 | sport_stats = list(reversed(sport_stats)) 43 | 44 | # Top 10: 45 | # 1. baseball = 61,573 ways 46 | # 2. tennis = 38,482 ways 47 | # 3. soccer = 19,129 ways 48 | # 4. basketball = 15,797 ways 49 | # 5. unknown = 11,914 ways 50 | # 6. golf = 6,826 ways 51 | # 7. american_football = 6,266 ways 52 | # 8. volleyball = 2,127 ways 53 | # 9. multi = 1,423 ways 54 | # 10. softball = 695 ways 55 | for sport_stat in sport_stats[:10]: 56 | print sport_stat 57 | -------------------------------------------------------------------------------- /03_build_ways_data.py: -------------------------------------------------------------------------------- 1 | from utils.geo import ELEMENTS_FILENAME, WAYS_DATA_FILENAME 2 | from utils.geo import get_ways_data 3 | import json 4 | import operator 5 | 6 | # We need the elements 7 | print 'Loading %s...' % ELEMENTS_FILENAME 8 | with open(ELEMENTS_FILENAME, 'r') as f: 9 | elements = json.load(f) 10 | 11 | # And we need the coordinates for all the nodes 12 | coords = {} 13 | for element in elements: 14 | if element.get('type') == 'node': 15 | element_id = element.get('id') 16 | coords[element_id] = { 17 | 'lat': element.get('lat'), 18 | 'lon': element.get('lon')} 19 | 20 | # Now we can get the dict 21 | print 'Building %s...' % WAYS_DATA_FILENAME 22 | ways_data = get_ways_data(elements=elements, coords=coords) 23 | 24 | # Finally, cache the file 25 | with open(WAYS_DATA_FILENAME, 'w') as f: 26 | json.dump(ways_data, f) 27 | -------------------------------------------------------------------------------- /04_download_satellite.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Usage: 3 | 4 | 04_download_satellite.py [-h] [--sport SPORT] [--count COUNT] 5 | 6 | optional arguments: 7 | -h, --help show this help message and exit 8 | --sport SPORT Sport tag, for example: baseball, tennis, or soccer. 9 | --count COUNT The total number of images to download. 10 | 11 | For example: 12 | 13 | $ python 04_download_satellite.py --sport soccer --count 5 14 | ''' 15 | 16 | from random import shuffle 17 | from utils.geo import ELEMENTS_FILENAME, WAYS_DATA_FILENAME 18 | from utils.mapbox_static import MapboxStatic 19 | import argparse 20 | import json 21 | 22 | parser = argparse.ArgumentParser(add_help=True) 23 | 24 | parser.add_argument('--sport', 25 | type=str, default='baseball', 26 | help='Sport tag, for example: baseball, tennis, or soccer.') 27 | parser.add_argument('--count', 28 | type=int, default=5, 29 | help='The total number of images to download.') 30 | 31 | args = vars(parser.parse_args()) 32 | count = args.get('count') 33 | target_sport = args.get('sport') 34 | print 'We are gonna download %d random pics of %s pitches.' \ 35 | % (count, target_sport) 36 | 37 | # We need the elements 38 | print 'Loading %s...' % ELEMENTS_FILENAME 39 | with open(ELEMENTS_FILENAME, 'r') as f: 40 | elements = json.load(f) 41 | 42 | # We need the elements 43 | print 'Loading %s...' % WAYS_DATA_FILENAME 44 | with open(WAYS_DATA_FILENAME, 'r') as f: 45 | ways_data = json.load(f) 46 | 47 | # Randomize elements list to make sure we don't download all pics from the 48 | # same sample 49 | shuffle(elements) 50 | 51 | # Now we're gonna download the satellite images for these locations 52 | mapbox_static = MapboxStatic( 53 | namespace='pitch', 54 | root_folder='satellite') 55 | 56 | total_downloaded = 0 57 | for element in elements: 58 | # They're strings in the dict now 59 | element_id_str = unicode(element.get('id')) 60 | sport = element.get('tags', {}).get('sport', 'unknown').lower() 61 | if element_id_str in ways_data and sport == target_sport: 62 | if total_downloaded >= count: 63 | break 64 | print '> Element: %s (%s)' % (element.get('id'), sport) 65 | url = mapbox_static.get_url( 66 | latitude=ways_data[element_id_str].get('lat'), 67 | longitude=ways_data[element_id_str].get('lon')) 68 | print url 69 | element_id_sport = '%s_%s' % (sport, element_id_str) 70 | success = mapbox_static.download_tile( 71 | element_id=element_id_sport, 72 | url=url) 73 | if success: 74 | total_downloaded += 1 75 | -------------------------------------------------------------------------------- /05_build_samplesfile.py: -------------------------------------------------------------------------------- 1 | from utils.geo import get_rectangle 2 | from utils.geo import WAYS_DATA_FILENAME 3 | import json 4 | import os 5 | 6 | # We need the elements 7 | print 'Loading %s...' % WAYS_DATA_FILENAME 8 | with open(WAYS_DATA_FILENAME, 'r') as f: 9 | ways_data = json.load(f) 10 | 11 | samples_data = {} 12 | 13 | image_files = [f for f in os.listdir('satellite/gray') if f.endswith('.png')] 14 | for image_file in image_files: 15 | print 'Processing %s...' % image_file 16 | 17 | # Find the category 18 | sport = image_file[image_file.find('_')+1:image_file.rfind('_')] 19 | if sport not in samples_data: 20 | samples_data[sport] = [] 21 | 22 | # The ID is between the last underscore and the extension dot 23 | # For example: pitch_volleyball_268478401.png -> 268478401 24 | way_id = image_file[image_file.rfind('_') + 1:image_file.find('.')] 25 | bounds = ways_data[way_id]['bounds'] 26 | 27 | # Add a rectangle with the feature 28 | x, y, w, h = get_rectangle(bounds=bounds) 29 | if w <= 25 or h <= 25: 30 | print 'Pic not added' 31 | continue 32 | if x <= 0 or y <= 0 or w <= 0 or h <= 0: 33 | print 'Pic not added' 34 | continue 35 | entry = 'satellite/gray/%s\t1\t%d\t%d\t%d\t%d\n' % (image_file, x, y, w, h) 36 | samples_data[sport].append(entry) 37 | 38 | for sport in samples_data.keys(): 39 | datafile = 'info_%s.dat' % sport 40 | print 'Saving data file: %s' % datafile 41 | with open(datafile, 'w') as f: 42 | print len(samples_data[sport]) 43 | for entry in samples_data[sport]: 44 | f.write(entry) 45 | -------------------------------------------------------------------------------- /05_draw_bbox.py: -------------------------------------------------------------------------------- 1 | ''' 2 | We're gonna use the bbox info from OSM to draw a box around the pitch, we 3 | will use this box to better train our ML algo. 4 | ''' 5 | 6 | from utils.geo import get_rectangle 7 | from utils.geo import WAYS_DATA_FILENAME 8 | import cv2 9 | import json 10 | import os 11 | 12 | # We need the elements 13 | # print 'Loading %s...' % WAYS_DATA_FILENAME 14 | # with open(WAYS_DATA_FILENAME, 'r') as f: 15 | # ways_data = json.load(f) 16 | 17 | image_files = [f for f in os.listdir('satellite') if f.endswith('.png')] 18 | print len(image_files) 19 | 20 | for image_file in image_files: 21 | print 'Processing %s...' % image_file 22 | # The ID is between the last underscore and the extension dot 23 | # For example: pitch_volleyball_268478401.png -> 268478401 24 | # way_id = image_file[image_file.rfind('_') + 1:image_file.find('.')] 25 | # bounds = ways_data[way_id]['bounds'] 26 | 27 | # Add a rectangle with the feature 28 | # x, y, w, h = get_rectangle(bounds=bounds) 29 | # img = cv2.imread(os.path.join('satellite', image_file)) 30 | # cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) 31 | # cv2.imwrite(os.path.join('satellite/rectangle', image_file), img) 32 | 33 | # To show the image 34 | # cv2.imshow('img',img) 35 | # cv2.waitKey(0) 36 | # cv2.destroyAllWindows() 37 | 38 | # Generate a grayscale version 39 | img_gray = cv2.imread(os.path.join('satellite', image_file), 0) 40 | cv2.imwrite(os.path.join('satellite/gray', image_file), img_gray) 41 | -------------------------------------------------------------------------------- /06_get_negatives.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Let's download a few negative images to train the algo. 3 | 4 | Usage: 5 | python 06_get_negatives.py [-h] [--count COUNT] 6 | 7 | optional arguments: 8 | -h, --help show this help message and exit 9 | --count COUNT The total number of negative images to download. 10 | ''' 11 | 12 | from random import shuffle 13 | from utils.geo import ELEMENTS_FILENAME 14 | from utils.mapbox_static import MapboxStatic 15 | import argparse 16 | import json 17 | import random 18 | 19 | parser = argparse.ArgumentParser(add_help=True) 20 | 21 | parser.add_argument('--count', 22 | type=int, default=5, 23 | help='The total number of negative images to download.') 24 | 25 | args = vars(parser.parse_args()) 26 | count = args.get('count') 27 | print 'We are gonna download %d negative images' % count 28 | 29 | # We need the elements 30 | print 'Loading %s...' % ELEMENTS_FILENAME 31 | with open(ELEMENTS_FILENAME, 'r') as f: 32 | elements = json.load(f) 33 | 34 | # Randomize elements list to make sure we don't download all pics from the 35 | # same sample. Then cut it. 36 | shuffle(elements) 37 | 38 | # Now we're gonna download the satellite images for these locations 39 | mapbox_static = MapboxStatic( 40 | namespace='negative', 41 | root_folder='satellite/negative') 42 | 43 | total_downloaded = 0 44 | for element in elements: 45 | if total_downloaded >= count: 46 | break 47 | if element.get('type') != 'node': 48 | continue 49 | # Move the latlon a random amount, random() is in the range [0.0, 1.0) 50 | target_lat = element.get('lat') + (random.random() - 0.5) 51 | target_lon = element.get('lon') + (random.random() - 0.5) 52 | url = mapbox_static.get_url(latitude=target_lat, longitude=target_lon) 53 | print url 54 | success = mapbox_static.download_tile( 55 | element_id=element.get('id'), 56 | url=url) 57 | if success: 58 | total_downloaded += 1 59 | -------------------------------------------------------------------------------- /07_fit_min_neighbors.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | import csv 3 | import cv2 4 | import numpy as np 5 | import os 6 | 7 | tennis_cascade_files = [ 8 | 'output/cascade-default.xml', 9 | 'output/cascade-4000-2000.xml', 10 | 'output/cascade-6000-3000.xml', 11 | 'output/cascade-8000-4000.xml'] 12 | 13 | positive_files = [os.path.join('satellite/fit', f) \ 14 | for f in os.listdir('satellite/fit') if f.endswith('.png')] 15 | 16 | negative_files = [os.path.join('satellite/fit/negative', f) \ 17 | for f in os.listdir('satellite/fit/negative') if f.endswith('.png')] 18 | 19 | def get_total_pitches(tennis_cascade, filename, min_neighbors): 20 | img = cv2.imread(filename, 0) 21 | pitches = tennis_cascade.detectMultiScale( 22 | img, minNeighbors=min_neighbors) 23 | return len(pitches) 24 | 25 | for tennis_cascade_file in tennis_cascade_files: 26 | print tennis_cascade_file 27 | tennis_cascade = cv2.CascadeClassifier(tennis_cascade_file) 28 | 29 | # Open 30 | positive_f = open(tennis_cascade_file[:-4] + '_positive.csv', 'w') 31 | negative_f = open(tennis_cascade_file[:-4] + '_negative.csv', 'w') 32 | positive_writer = csv.writer(positive_f) 33 | negative_writer = csv.writer(negative_f) 34 | 35 | for min_neighbors in range(0, 501, 10): 36 | print min_neighbors 37 | 38 | # Pos 39 | total_set = 0 40 | for positive_file in positive_files: 41 | total_pitches = get_total_pitches( 42 | tennis_cascade=tennis_cascade, 43 | filename=positive_file, 44 | min_neighbors=min_neighbors) 45 | total_set += total_pitches 46 | total_average = total_set / len(positive_files) 47 | positive_writer.writerow([total_average, min_neighbors]) 48 | 49 | # Neg 50 | total_set = 0 51 | for negative_file in negative_files: 52 | total_pitches = get_total_pitches( 53 | tennis_cascade=tennis_cascade, 54 | filename=negative_file, 55 | min_neighbors=min_neighbors) 56 | total_set += total_pitches 57 | total_average = total_set / len(negative_files) 58 | negative_writer.writerow([total_average, min_neighbors]) 59 | 60 | # Close 61 | positive_f.close() 62 | negative_f.close() 63 | -------------------------------------------------------------------------------- /08_plot_fit.py: -------------------------------------------------------------------------------- 1 | import csv 2 | import matplotlib.pyplot as plt 3 | 4 | csv_files = { 5 | '4000_negative': 'fit/cascade-4000-2000_negative.csv', 6 | '4000_positive': 'fit/cascade-4000-2000_positive.csv', 7 | '6000_negative': 'fit/cascade-6000-3000_negative.csv', 8 | '6000_positive': 'fit/cascade-6000-3000_positive.csv', 9 | '8000_negative': 'fit/cascade-8000-4000_negative.csv', 10 | '8000_positive': 'fit/cascade-8000-4000_positive.csv', 11 | '2000_negative': 'fit/cascade-default_negative.csv', 12 | '2000_positive': 'fit/cascade-default_positive.csv'} 13 | 14 | cases = ['2000', '4000', '6000', '8000'] 15 | 16 | for case in cases: 17 | with open(csv_files[case + '_positive'], 'r') as csv_file: 18 | csv_reader = csv.reader(csv_file) 19 | values = [row for row in csv_reader] 20 | y_pos_values = [entry[0] for entry in values] 21 | x_pos_values = [entry[1] for entry in values] 22 | 23 | with open(csv_files[case + '_negative'], 'r') as csv_file: 24 | csv_reader = csv.reader(csv_file) 25 | values = [row for row in csv_reader] 26 | y_neg_values = [entry[0] for entry in values] 27 | x_neg_values = [entry[1] for entry in values] 28 | 29 | plt.clf() 30 | plt.plot(x_pos_values, y_pos_values, color='b', label='positives') 31 | plt.plot(x_neg_values, y_neg_values, color='r', label='negatives') 32 | plt.plot([0, 500], [1, 1], color='g', linestyle='--') 33 | plt.axis([0, 500, 0, 10]) # [xmin, xmax, ymin, ymax] 34 | plt.xlabel('min neighbors') 35 | plt.ylabel('pitches') 36 | plt.title('Finding the optimum min neighbors value') 37 | plt.legend() 38 | plt.grid(True) 39 | plt.savefig('fit/cascade-%s.png' % case) 40 | -------------------------------------------------------------------------------- /09_draw_results.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | import cv2 3 | import os 4 | 5 | # Threshold 6 | min_neighbors = 1750 7 | print min_neighbors 8 | 9 | tennis_cascade_files = [ 10 | 'output/cascade-default.xml', 11 | 'output/cascade-4000-2000.xml', 12 | 'output/cascade-6000-3000.xml', 13 | 'output/cascade-8000-4000.xml'] 14 | 15 | positive_files = [os.path.join('satellite/fit', f) \ 16 | for f in os.listdir('satellite/fit') if f.endswith('.png')] 17 | 18 | negative_files = [os.path.join('satellite/fit/negative', f) \ 19 | for f in os.listdir('satellite/fit/negative') if f.endswith('.png')] 20 | 21 | def get_total_pitches(tennis_cascade, filename, min_neighbors): 22 | img = cv2.imread(filename) 23 | gray = cv2.imread(filename, 0) 24 | if 'negative' in filename: 25 | target = filename.replace( 26 | 'satellite/fit/negative', 27 | 'satellite/fit/negative/bbox') 28 | else: 29 | target = filename.replace( 30 | 'satellite/fit', 31 | 'satellite/fit/bbox') 32 | pitches = tennis_cascade.detectMultiScale( 33 | gray, minNeighbors=min_neighbors) 34 | for (x,y,w,h) in pitches: 35 | if 'negative' in filename: 36 | cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),5) 37 | else: 38 | cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),5) 39 | cv2.imwrite(target, img) 40 | return len(pitches) 41 | 42 | tennis_cascade_file = tennis_cascade_files[3] 43 | tennis_cascade = cv2.CascadeClassifier(tennis_cascade_file) 44 | print tennis_cascade_file 45 | 46 | total_files = 100 47 | 48 | # Pos 49 | pos_success = 0 50 | for positive_file in positive_files[:total_files]: 51 | print positive_file 52 | total_pitches = get_total_pitches( 53 | tennis_cascade=tennis_cascade, 54 | filename=positive_file, 55 | min_neighbors=min_neighbors) 56 | if total_pitches >= 1: 57 | pos_success += 1 58 | 59 | # Neg 60 | neg_success = 0 61 | for negative_file in negative_files[:total_files]: 62 | print negative_file 63 | total_pitches = get_total_pitches( 64 | tennis_cascade=tennis_cascade, 65 | filename=negative_file, 66 | min_neighbors=min_neighbors) 67 | if total_pitches < 1: 68 | neg_success += 1 69 | else: 70 | print '** negative file %s has %s pitches **' % ( 71 | negative_file, total_pitches) 72 | 73 | pos_percentage = 100 * pos_success / total_files 74 | neg_percentage = 100 * neg_success / total_files 75 | print 'pos_percentage = %s' % pos_percentage 76 | print 'neg_percentage = %s' % neg_percentage 77 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 World Bank Group 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | @echo See Makefile for options 3 | 4 | step1: 5 | # Builds the data/elements.json file 6 | python 01_get_elements.py 7 | 8 | step2: 9 | # Print some stats 10 | python 02_get_stats.py 11 | 12 | step3: 13 | # Builds the data/ways.json file 14 | python 03_build_ways_data.py 15 | 16 | step4: 17 | # Downloads 10 sample photos of the top 10 sports 18 | python 04_download_satellite.py --sport baseball --count 10 19 | python 04_download_satellite.py --sport tennis --count 10 20 | python 04_download_satellite.py --sport soccer --count 10 21 | python 04_download_satellite.py --sport basketball --count 10 22 | python 04_download_satellite.py --sport unknown --count 10 23 | python 04_download_satellite.py --sport golf --count 10 24 | python 04_download_satellite.py --sport american_football --count 10 25 | python 04_download_satellite.py --sport volleyball --count 10 26 | python 04_download_satellite.py --sport multi --count 10 27 | python 04_download_satellite.py --sport softball --count 10 28 | # mv satellite/*png satellite/training/ 29 | # mv satellite/*png satellite/testing/ 30 | 31 | step5: 32 | # Draw the bbox on the test files 33 | python 05_draw_bbox.py 34 | 35 | step6: 36 | # Get some random images 37 | python 06_get_negatives.py --count 25 38 | find satellite/negative -type f > negative.txt 39 | 40 | createsamples: 41 | opencv_createsamples -info info_baseball.dat -num 99 -vec info_baseball.vec 42 | opencv_createsamples -info info_basketball.dat -num 100 -vec info_basketball.vec 43 | opencv_createsamples -info info_tennis.dat -num 9998 -vec info_tennis.vec 44 | opencv_traincascade -data output -vec info_baseball.vec -bg negative.txt -numPos 99 -numNeg 100 45 | opencv_traincascade -data output -vec info_basketball.vec -bg negative.txt -numPos 100 -numNeg 100 46 | opencv_traincascade -data output -vec info_tennis.vec -bg negative.txt -numPos 9998 -numNeg 5000 47 | 48 | -------------------------------------------------------------------------------- /baseball.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BOOST 5 | HAAR 6 | 24 7 | 24 8 | 9 | GAB 10 | 9.9500000476837158e-01 11 | 5.0000000000000000e-01 12 | 9.4999999999999996e-01 13 | 1 14 | 100 15 | 16 | 0 17 | 1 18 | BASIC 19 | 20 20 | 21 | 22 | <_> 23 | 5 24 | -6.3604068756103516e-01 25 | 26 | <_> 27 | 28 | 0 -1 54 3.6189504899084568e-03 29 | 30 | 3.0555555224418640e-01 -8.1818181276321411e-01 31 | <_> 32 | 33 | 0 -1 94 4.4270888902246952e-03 34 | 35 | 2.6856291294097900e-01 -8.2471865415573120e-01 36 | <_> 37 | 38 | 0 -1 96 6.6340056946501136e-04 39 | 40 | 2.6301088929176331e-01 -8.5882681608200073e-01 41 | <_> 42 | 43 | 0 -1 8 -2.5026169605553150e-03 44 | 45 | -6.5318608283996582e-01 4.1457188129425049e-01 46 | <_> 47 | 48 | 0 -1 38 -1.5839729458093643e-03 49 | 50 | -7.6400458812713623e-01 4.0742766857147217e-01 51 | 52 | <_> 53 | 3 54 | -2.3400855064392090e-01 55 | 56 | <_> 57 | 58 | 0 -1 5 7.8575555235147476e-03 59 | 60 | 3.9849624037742615e-01 -8.1818181276321411e-01 61 | <_> 62 | 63 | 0 -1 93 -5.4683196358382702e-03 64 | 65 | -9.1144174337387085e-01 2.6954546570777893e-01 66 | <_> 67 | 68 | 0 -1 69 -6.4477673731744289e-04 69 | 70 | -7.4499976634979248e-01 3.1462779641151428e-01 71 | 72 | <_> 73 | 3 74 | -5.2666819095611572e-01 75 | 76 | <_> 77 | 78 | 0 -1 7 -2.2421196103096008e-02 79 | 80 | -1. 2.6923078298568726e-01 81 | <_> 82 | 83 | 0 -1 23 4.6711652539670467e-03 84 | 85 | 1.9427742063999176e-01 -9.6244287490844727e-01 86 | <_> 87 | 88 | 0 -1 12 4.7801379114389420e-03 89 | 90 | 1.6654391586780548e-01 -1. 91 | 92 | <_> 93 | 3 94 | -3.1461432576179504e-01 95 | 96 | <_> 97 | 98 | 0 -1 29 -8.7874494493007660e-03 99 | 100 | -9.6296298503875732e-01 3.5172414779663086e-01 101 | <_> 102 | 103 | 0 -1 24 4.6931738033890724e-03 104 | 105 | 2.7264618873596191e-01 -8.8870871067047119e-01 106 | <_> 107 | 108 | 0 -1 97 -2.3153130896389484e-03 109 | 110 | -7.7279490232467651e-01 3.7570244073867798e-01 111 | 112 | <_> 113 | 3 114 | 3.3827330917119980e-02 115 | 116 | <_> 117 | 118 | 0 -1 48 -1.3884595595300198e-02 119 | 120 | -9.6296298503875732e-01 3.5172414779663086e-01 121 | <_> 122 | 123 | 0 -1 85 1.2195473536849022e-03 124 | 125 | 1.7897287011146545e-01 -1. 126 | <_> 127 | 128 | 0 -1 52 3.0046328902244568e-02 129 | 130 | -3.6612820625305176e-01 8.1781744956970215e-01 131 | 132 | <_> 133 | 4 134 | -4.3325673788785934e-02 135 | 136 | <_> 137 | 138 | 0 -1 76 4.3933773413300514e-03 139 | 140 | 3.1914892792701721e-01 -7.9310345649719238e-01 141 | <_> 142 | 143 | 0 -1 88 1.9170431187376380e-03 144 | 145 | 2.2898155450820923e-01 -8.3764249086380005e-01 146 | <_> 147 | 148 | 0 -1 47 3.3035492524504662e-03 149 | 150 | 3.0476438999176025e-01 -7.8931552171707153e-01 151 | <_> 152 | 153 | 0 -1 37 -2.2500259801745415e-03 154 | 155 | -8.9622056484222412e-01 2.5401794910430908e-01 156 | 157 | <_> 158 | 5 159 | -1.4771027863025665e-01 160 | 161 | <_> 162 | 163 | 0 -1 14 -1.1669922620058060e-02 164 | 165 | 7.5000000000000000e-01 -2.4503311514854431e-01 166 | <_> 167 | 168 | 0 -1 44 -3.4252158366143703e-03 169 | 170 | -8.3116120100021362e-01 2.7865168452262878e-01 171 | <_> 172 | 173 | 0 -1 49 4.4674746692180634e-02 174 | 175 | -3.0990695953369141e-01 7.1378201246261597e-01 176 | <_> 177 | 178 | 0 -1 41 3.3698044717311859e-02 179 | 180 | -3.3624082803726196e-01 5.9759616851806641e-01 181 | <_> 182 | 183 | 0 -1 101 -2.7662748470902443e-04 184 | 185 | 5.7959872484207153e-01 -3.4860873222351074e-01 186 | 187 | <_> 188 | 6 189 | -8.5684454441070557e-01 190 | 191 | <_> 192 | 193 | 0 -1 86 2.0238712895661592e-03 194 | 195 | 3.1884059309959412e-01 -7.3770493268966675e-01 196 | <_> 197 | 198 | 0 -1 92 -5.7792784646153450e-03 199 | 200 | -7.0631277561187744e-01 2.6477372646331787e-01 201 | <_> 202 | 203 | 0 -1 51 -4.4972975738346577e-03 204 | 205 | -8.7326443195343018e-01 2.8956824541091919e-01 206 | <_> 207 | 208 | 0 -1 46 6.7562147974967957e-02 209 | 210 | -2.9889929294586182e-01 9.7080510854721069e-01 211 | <_> 212 | 213 | 0 -1 50 -9.4466289738193154e-04 214 | 215 | -6.5998601913452148e-01 3.6035156250000000e-01 216 | <_> 217 | 218 | 0 -1 60 -2.3549818433821201e-03 219 | 220 | -7.1649110317230225e-01 2.8540372848510742e-01 221 | 222 | <_> 223 | 6 224 | -3.5518622398376465e-01 225 | 226 | <_> 227 | 228 | 0 -1 73 -2.1491611842066050e-03 229 | 230 | -6.7272728681564331e-01 2.5000000000000000e-01 231 | <_> 232 | 233 | 0 -1 103 -1.3927842956036329e-03 234 | 235 | 4.6724259853363037e-01 -3.7989661097526550e-01 236 | <_> 237 | 238 | 0 -1 81 6.1295200139284134e-03 239 | 240 | 2.6969149708747864e-01 -6.5715968608856201e-01 241 | <_> 242 | 243 | 0 -1 15 -1.3479174231179059e-04 244 | 245 | 5.0098317861557007e-01 -3.6102029681205750e-01 246 | <_> 247 | 248 | 0 -1 17 -7.3818152304738760e-04 249 | 250 | 7.4765533208847046e-01 -2.9966327548027039e-01 251 | <_> 252 | 253 | 0 -1 27 1.5453578904271126e-02 254 | 255 | 3.5117822885513306e-01 -6.8143677711486816e-01 256 | 257 | <_> 258 | 5 259 | -6.0551446676254272e-01 260 | 261 | <_> 262 | 263 | 0 -1 71 -1.4686654321849346e-03 264 | 265 | -9.1489362716674805e-01 2.7631577849388123e-01 266 | <_> 267 | 268 | 0 -1 1 -8.7735019624233246e-03 269 | 270 | -8.0729770660400391e-01 2.1482656896114349e-01 271 | <_> 272 | 273 | 0 -1 39 -3.9561837911605835e-03 274 | 275 | -9.0132576227188110e-01 2.6892369985580444e-01 276 | <_> 277 | 278 | 0 -1 99 9.7257707966491580e-04 279 | 280 | 2.8991922736167908e-01 -7.0496159791946411e-01 281 | <_> 282 | 283 | 0 -1 26 -7.0180499460548162e-04 284 | 285 | -6.3337546586990356e-01 3.9741706848144531e-01 286 | 287 | <_> 288 | 5 289 | -8.3740592002868652e-01 290 | 291 | <_> 292 | 293 | 0 -1 80 2.5223952252417803e-04 294 | 295 | 3.8888889551162720e-01 -4.7252747416496277e-01 296 | <_> 297 | 298 | 0 -1 67 9.0657118707895279e-03 299 | 300 | 2.5331446528434753e-01 -8.4104710817337036e-01 301 | <_> 302 | 303 | 0 -1 63 1.5723677352070808e-03 304 | 305 | 3.5839036107063293e-01 -6.2987589836120605e-01 306 | <_> 307 | 308 | 0 -1 66 4.6024072915315628e-02 309 | 310 | -2.5302127003669739e-01 8.7146615982055664e-01 311 | <_> 312 | 313 | 0 -1 55 1.4265929348766804e-03 314 | 315 | 2.6470425724983215e-01 -7.9083943367004395e-01 316 | 317 | <_> 318 | 5 319 | -6.3837289810180664e-01 320 | 321 | <_> 322 | 323 | 0 -1 87 4.1554905474185944e-03 324 | 325 | 2.2292993962764740e-01 -8.5714286565780640e-01 326 | <_> 327 | 328 | 0 -1 77 -1.5662882942706347e-03 329 | 330 | -6.8315720558166504e-01 2.3992703855037689e-01 331 | <_> 332 | 333 | 0 -1 53 6.2472501304000616e-04 334 | 335 | 2.9342862963676453e-01 -6.6436868906021118e-01 336 | <_> 337 | 338 | 0 -1 90 1.1392151936888695e-03 339 | 340 | 2.6167923212051392e-01 -8.5826611518859863e-01 341 | <_> 342 | 343 | 0 -1 25 3.2524254638701677e-03 344 | 345 | 2.8158137202262878e-01 -7.3325347900390625e-01 346 | 347 | <_> 348 | 7 349 | -5.5235737562179565e-01 350 | 351 | <_> 352 | 353 | 0 -1 72 -7.5930180028080940e-03 354 | 355 | -8.4210526943206787e-01 1.9254659116268158e-01 356 | <_> 357 | 358 | 0 -1 65 -8.0020502209663391e-03 359 | 360 | -6.2501406669616699e-01 2.2807431221008301e-01 361 | <_> 362 | 363 | 0 -1 22 -2.0070372149348259e-02 364 | 365 | 8.4054899215698242e-01 -2.0888084173202515e-01 366 | <_> 367 | 368 | 0 -1 32 -5.1144650205969810e-03 369 | 370 | 8.4225267171859741e-01 -1.8106052279472351e-01 371 | <_> 372 | 373 | 0 -1 31 -1.6453832387924194e-02 374 | 375 | -6.7113345861434937e-01 2.8983289003372192e-01 376 | <_> 377 | 378 | 0 -1 3 -9.0157754719257355e-02 379 | 380 | 5.4730337858200073e-01 -3.9392501115798950e-01 381 | <_> 382 | 383 | 0 -1 13 -2.1618367172777653e-03 384 | 385 | 5.5750137567520142e-01 -3.8552135229110718e-01 386 | 387 | <_> 388 | 5 389 | -3.3820408582687378e-01 390 | 391 | <_> 392 | 393 | 0 -1 84 -8.4076365455985069e-03 394 | 395 | -8.5365855693817139e-01 2.1518987417221069e-01 396 | <_> 397 | 398 | 0 -1 19 -7.0654749870300293e-03 399 | 400 | 9.3765091896057129e-01 -2.2787246108055115e-01 401 | <_> 402 | 403 | 0 -1 33 -1.3024022802710533e-02 404 | 405 | -6.8196260929107666e-01 2.8843322396278381e-01 406 | <_> 407 | 408 | 0 -1 42 -2.6671905070543289e-02 409 | 410 | -8.1571304798126221e-01 1.9660328328609467e-01 411 | <_> 412 | 413 | 0 -1 56 -1.6444643260911107e-03 414 | 415 | -7.6599645614624023e-01 2.5829043984413147e-01 416 | 417 | <_> 418 | 7 419 | -5.9797173738479614e-01 420 | 421 | <_> 422 | 423 | 0 -1 43 -9.1984691098332405e-03 424 | 425 | 1. -1.6959063708782196e-01 426 | <_> 427 | 428 | 0 -1 61 1.9063577055931091e-03 429 | 430 | -2.1028988063335419e-01 7.3263967037200928e-01 431 | <_> 432 | 433 | 0 -1 83 -1.4674148987978697e-03 434 | 435 | -6.5895175933837891e-01 2.6856675744056702e-01 436 | <_> 437 | 438 | 0 -1 82 -7.5612859800457954e-03 439 | 440 | -7.1141386032104492e-01 2.2921475768089294e-01 441 | <_> 442 | 443 | 0 -1 68 -7.7614411711692810e-03 444 | 445 | -8.2904589176177979e-01 2.6022711396217346e-01 446 | <_> 447 | 448 | 0 -1 98 -1.0680342093110085e-03 449 | 450 | 8.2713603973388672e-01 -2.7918177843093872e-01 451 | <_> 452 | 453 | 0 -1 78 -1.8412770004943013e-03 454 | 455 | -5.2506893873214722e-01 3.9235493540763855e-01 456 | 457 | <_> 458 | 7 459 | -7.7474081516265869e-01 460 | 461 | <_> 462 | 463 | 0 -1 0 5.4187383502721786e-03 464 | 465 | -2.1518987417221069e-01 8.0487805604934692e-01 466 | <_> 467 | 468 | 0 -1 16 2.1942052990198135e-03 469 | 470 | -2.7046325802803040e-01 5.9775817394256592e-01 471 | <_> 472 | 473 | 0 -1 70 -2.2977215703576803e-03 474 | 475 | -7.1530699729919434e-01 2.4818022549152374e-01 476 | <_> 477 | 478 | 0 -1 18 -9.3552432954311371e-03 479 | 480 | 1. -2.0942753553390503e-01 481 | <_> 482 | 483 | 0 -1 95 5.9671653434634209e-04 484 | 485 | -1.9917269051074982e-01 8.2277739048004150e-01 486 | <_> 487 | 488 | 0 -1 79 4.3764729052782059e-03 489 | 490 | 3.7138998508453369e-01 -7.2497868537902832e-01 491 | <_> 492 | 493 | 0 -1 58 -2.8535192832350731e-03 494 | 495 | 9.1078090667724609e-01 -3.3037328720092773e-01 496 | 497 | <_> 498 | 7 499 | -1.0320498943328857e+00 500 | 501 | <_> 502 | 503 | 0 -1 20 1.3709938153624535e-02 504 | 505 | -3.9655172824859619e-01 5.4216867685317993e-01 506 | <_> 507 | 508 | 0 -1 100 -1.1670717503875494e-03 509 | 510 | 6.9387942552566528e-01 -2.4925677478313446e-01 511 | <_> 512 | 513 | 0 -1 34 3.6660120822489262e-03 514 | 515 | -2.5071409344673157e-01 7.5922888517379761e-01 516 | <_> 517 | 518 | 0 -1 6 1.7964579164981842e-02 519 | 520 | -2.4067564308643341e-01 6.8334460258483887e-01 521 | <_> 522 | 523 | 0 -1 64 -3.5893814638257027e-03 524 | 525 | 6.0088574886322021e-01 -3.0677574872970581e-01 526 | <_> 527 | 528 | 0 -1 9 5.3939589997753501e-04 529 | 530 | -3.2673665881156921e-01 5.7504040002822876e-01 531 | <_> 532 | 533 | 0 -1 10 -2.3759929463267326e-02 534 | 535 | 9.5232027769088745e-01 -2.0005965232849121e-01 536 | 537 | <_> 538 | 6 539 | -5.3817921876907349e-01 540 | 541 | <_> 542 | 543 | 0 -1 102 -6.5275956876575947e-03 544 | 545 | 7.5609755516052246e-01 -2.0253165066242218e-01 546 | <_> 547 | 548 | 0 -1 30 8.9238880900666118e-04 549 | 550 | 3.5406857728958130e-01 -4.7926509380340576e-01 551 | <_> 552 | 553 | 0 -1 28 -8.2401558756828308e-03 554 | 555 | 8.2461619377136230e-01 -2.6304385066032410e-01 556 | <_> 557 | 558 | 0 -1 74 -1.3060313358437270e-04 559 | 560 | 5.7518470287322998e-01 -3.2282403111457825e-01 561 | <_> 562 | 563 | 0 -1 89 7.1172793395817280e-03 564 | 565 | 2.8129318356513977e-01 -8.0004805326461792e-01 566 | <_> 567 | 568 | 0 -1 75 1.2860705610364676e-03 569 | 570 | -2.6242944598197937e-01 5.9923452138900757e-01 571 | 572 | <_> 573 | 6 574 | -5.0237333774566650e-01 575 | 576 | <_> 577 | 578 | 0 -1 91 -3.1791046261787415e-02 579 | 580 | 8.8571429252624512e-01 -1.9512194395065308e-01 581 | <_> 582 | 583 | 0 -1 62 -2.0227319328114390e-04 584 | 585 | 5.5899459123611450e-01 -2.6028454303741455e-01 586 | <_> 587 | 588 | 0 -1 45 3.4311695490032434e-03 589 | 590 | -2.3542959988117218e-01 6.8777346611022949e-01 591 | <_> 592 | 593 | 0 -1 40 4.5481383800506592e-02 594 | 595 | -2.1707123517990112e-01 7.5849521160125732e-01 596 | <_> 597 | 598 | 0 -1 59 -1.0143149644136429e-02 599 | 600 | 7.6919478178024292e-01 -2.4218258261680603e-01 601 | <_> 602 | 603 | 0 -1 11 1.5518108010292053e-01 604 | 605 | -1.7156255245208740e-01 8.3546113967895508e-01 606 | 607 | <_> 608 | 6 609 | -6.4802247285842896e-01 610 | 611 | <_> 612 | 613 | 0 -1 2 -1.8567752838134766e-01 614 | 615 | 9.1836732625961304e-01 -3.0666667222976685e-01 616 | <_> 617 | 618 | 0 -1 35 1.2122542411088943e-01 619 | 620 | -3.4806641936302185e-01 9.4579738378524780e-01 621 | <_> 622 | 623 | 0 -1 36 -1.3680353760719299e-01 624 | 625 | 9.6842563152313232e-01 -1.7889560759067535e-01 626 | <_> 627 | 628 | 0 -1 21 4.9220122396945953e-02 629 | 630 | -3.1284290552139282e-01 8.2727807760238647e-01 631 | <_> 632 | 633 | 0 -1 57 2.0690128207206726e-02 634 | 635 | -2.3883603513240814e-01 8.1306642293930054e-01 636 | <_> 637 | 638 | 0 -1 4 1.3047927618026733e-01 639 | 640 | -3.1461736559867859e-01 8.8718694448471069e-01 641 | 642 | <_> 643 | 644 | <_> 645 | 0 0 15 3 -1. 646 | <_> 647 | 0 1 15 1 3. 648 | 0 649 | <_> 650 | 651 | <_> 652 | 0 3 21 2 -1. 653 | <_> 654 | 0 4 21 1 2. 655 | 0 656 | <_> 657 | 658 | <_> 659 | 0 5 24 18 -1. 660 | <_> 661 | 0 14 24 9 2. 662 | 0 663 | <_> 664 | 665 | <_> 666 | 0 6 22 18 -1. 667 | <_> 668 | 0 15 22 9 2. 669 | 0 670 | <_> 671 | 672 | <_> 673 | 0 8 23 16 -1. 674 | <_> 675 | 0 16 23 8 2. 676 | 0 677 | <_> 678 | 679 | <_> 680 | 0 9 9 3 -1. 681 | <_> 682 | 0 10 9 1 3. 683 | 0 684 | <_> 685 | 686 | <_> 687 | 0 9 22 6 -1. 688 | <_> 689 | 0 11 22 2 3. 690 | 0 691 | <_> 692 | 693 | <_> 694 | 0 12 23 3 -1. 695 | <_> 696 | 0 13 23 1 3. 697 | 0 698 | <_> 699 | 700 | <_> 701 | 0 13 7 3 -1. 702 | <_> 703 | 0 14 7 1 3. 704 | 0 705 | <_> 706 | 707 | <_> 708 | 0 17 3 3 -1. 709 | <_> 710 | 1 17 1 3 3. 711 | 0 712 | <_> 713 | 714 | <_> 715 | 0 18 20 4 -1. 716 | <_> 717 | 0 20 20 2 2. 718 | 0 719 | <_> 720 | 721 | <_> 722 | 1 2 15 22 -1. 723 | <_> 724 | 6 2 5 22 3. 725 | 0 726 | <_> 727 | 728 | <_> 729 | 1 6 7 2 -1. 730 | <_> 731 | 1 7 7 1 2. 732 | 0 733 | <_> 734 | 735 | <_> 736 | 1 7 2 12 -1. 737 | <_> 738 | 2 7 1 12 2. 739 | 0 740 | <_> 741 | 742 | <_> 743 | 1 16 10 6 -1. 744 | <_> 745 | 1 16 5 3 2. 746 | <_> 747 | 6 19 5 3 2. 748 | 0 749 | <_> 750 | 751 | <_> 752 | 1 17 5 2 -1. 753 | <_> 754 | 1 18 5 1 2. 755 | 0 756 | <_> 757 | 758 | <_> 759 | 1 19 16 3 -1. 760 | <_> 761 | 1 20 16 1 3. 762 | 0 763 | <_> 764 | 765 | <_> 766 | 1 20 2 2 -1. 767 | <_> 768 | 1 20 1 1 2. 769 | <_> 770 | 2 21 1 1 2. 771 | 0 772 | <_> 773 | 774 | <_> 775 | 2 0 12 3 -1. 776 | <_> 777 | 2 1 12 1 3. 778 | 0 779 | <_> 780 | 781 | <_> 782 | 2 1 12 3 -1. 783 | <_> 784 | 2 2 12 1 3. 785 | 0 786 | <_> 787 | 788 | <_> 789 | 2 7 12 13 -1. 790 | <_> 791 | 6 7 4 13 3. 792 | 0 793 | <_> 794 | 795 | <_> 796 | 2 9 14 13 -1. 797 | <_> 798 | 9 9 7 13 2. 799 | 0 800 | <_> 801 | 802 | <_> 803 | 2 17 15 6 -1. 804 | <_> 805 | 2 19 15 2 3. 806 | 0 807 | <_> 808 | 809 | <_> 810 | 3 5 4 3 -1. 811 | <_> 812 | 3 6 4 1 3. 813 | 0 814 | <_> 815 | 816 | <_> 817 | 3 5 9 3 -1. 818 | <_> 819 | 3 6 9 1 3. 820 | 0 821 | <_> 822 | 823 | <_> 824 | 3 5 12 3 -1. 825 | <_> 826 | 3 6 12 1 3. 827 | 0 828 | <_> 829 | 830 | <_> 831 | 3 6 2 2 -1. 832 | <_> 833 | 3 7 2 1 2. 834 | 0 835 | <_> 836 | 837 | <_> 838 | 4 0 8 5 -1. 839 | <_> 840 | 8 0 4 5 2. 841 | 0 842 | <_> 843 | 844 | <_> 845 | 4 1 15 3 -1. 846 | <_> 847 | 4 2 15 1 3. 848 | 0 849 | <_> 850 | 851 | <_> 852 | 4 15 12 3 -1. 853 | <_> 854 | 4 16 12 1 3. 855 | 0 856 | <_> 857 | 858 | <_> 859 | 4 17 4 1 -1. 860 | <_> 861 | 6 17 2 1 2. 862 | 0 863 | <_> 864 | 865 | <_> 866 | 4 19 12 4 -1. 867 | <_> 868 | 8 19 4 4 3. 869 | 0 870 | <_> 871 | 872 | <_> 873 | 4 22 12 2 -1. 874 | <_> 875 | 4 22 6 1 2. 876 | <_> 877 | 10 23 6 1 2. 878 | 0 879 | <_> 880 | 881 | <_> 882 | 5 0 6 7 -1. 883 | <_> 884 | 8 0 3 7 2. 885 | 0 886 | <_> 887 | 888 | <_> 889 | 5 0 6 3 -1. 890 | <_> 891 | 5 1 6 1 3. 892 | 0 893 | <_> 894 | 895 | <_> 896 | 5 0 18 22 -1. 897 | <_> 898 | 5 11 18 11 2. 899 | 0 900 | <_> 901 | 902 | <_> 903 | 5 3 18 20 -1. 904 | <_> 905 | 14 3 9 20 2. 906 | 0 907 | <_> 908 | 909 | <_> 910 | 5 5 3 3 -1. 911 | <_> 912 | 6 5 1 3 3. 913 | 0 914 | <_> 915 | 916 | <_> 917 | 5 7 3 5 -1. 918 | <_> 919 | 6 7 1 5 3. 920 | 0 921 | <_> 922 | 923 | <_> 924 | 5 8 7 2 -1. 925 | <_> 926 | 5 9 7 1 2. 927 | 0 928 | <_> 929 | 930 | <_> 931 | 5 9 14 6 -1. 932 | <_> 933 | 5 12 14 3 2. 934 | 0 935 | <_> 936 | 937 | <_> 938 | 5 10 10 12 -1. 939 | <_> 940 | 5 14 10 4 3. 941 | 0 942 | <_> 943 | 944 | <_> 945 | 5 14 8 10 -1. 946 | <_> 947 | 9 14 4 10 2. 948 | 0 949 | <_> 950 | 951 | <_> 952 | 5 21 14 3 -1. 953 | <_> 954 | 5 22 14 1 3. 955 | 0 956 | <_> 957 | 958 | <_> 959 | 6 0 2 10 -1. 960 | <_> 961 | 7 0 1 10 2. 962 | 0 963 | <_> 964 | 965 | <_> 966 | 6 0 16 3 -1. 967 | <_> 968 | 6 1 16 1 3. 969 | 0 970 | <_> 971 | 972 | <_> 973 | 6 3 18 6 -1. 974 | <_> 975 | 12 3 6 6 3. 976 | 0 977 | <_> 978 | 979 | <_> 980 | 6 4 4 3 -1. 981 | <_> 982 | 6 5 4 1 3. 983 | 0 984 | <_> 985 | 986 | <_> 987 | 6 14 18 3 -1. 988 | <_> 989 | 6 15 18 1 3. 990 | 0 991 | <_> 992 | 993 | <_> 994 | 7 3 15 12 -1. 995 | <_> 996 | 7 7 15 4 3. 997 | 0 998 | <_> 999 | 1000 | <_> 1001 | 7 18 2 2 -1. 1002 | <_> 1003 | 8 18 1 2 2. 1004 | 0 1005 | <_> 1006 | 1007 | <_> 1008 | 8 7 8 3 -1. 1009 | <_> 1010 | 8 8 8 1 3. 1011 | 0 1012 | <_> 1013 | 1014 | <_> 1015 | 8 16 16 8 -1. 1016 | <_> 1017 | 8 16 8 4 2. 1018 | <_> 1019 | 16 20 8 4 2. 1020 | 0 1021 | <_> 1022 | 1023 | <_> 1024 | 8 18 2 1 -1. 1025 | <_> 1026 | 9 18 1 1 2. 1027 | 0 1028 | <_> 1029 | 1030 | <_> 1031 | 9 14 7 2 -1. 1032 | <_> 1033 | 9 15 7 1 2. 1034 | 0 1035 | <_> 1036 | 1037 | <_> 1038 | 9 16 4 2 -1. 1039 | <_> 1040 | 9 16 2 1 2. 1041 | <_> 1042 | 11 17 2 1 2. 1043 | 0 1044 | <_> 1045 | 1046 | <_> 1047 | 9 16 6 2 -1. 1048 | <_> 1049 | 9 16 3 1 2. 1050 | <_> 1051 | 12 17 3 1 2. 1052 | 0 1053 | <_> 1054 | 1055 | <_> 1056 | 10 0 11 12 -1. 1057 | <_> 1058 | 10 4 11 4 3. 1059 | 0 1060 | <_> 1061 | 1062 | <_> 1063 | 10 20 2 3 -1. 1064 | <_> 1065 | 10 21 2 1 3. 1066 | 0 1067 | <_> 1068 | 1069 | <_> 1070 | 11 7 3 10 -1. 1071 | <_> 1072 | 11 12 3 5 2. 1073 | 0 1074 | <_> 1075 | 1076 | <_> 1077 | 11 9 3 6 -1. 1078 | <_> 1079 | 12 9 1 6 3. 1080 | 0 1081 | <_> 1082 | 1083 | <_> 1084 | 11 21 3 3 -1. 1085 | <_> 1086 | 11 22 3 1 3. 1087 | 0 1088 | <_> 1089 | 1090 | <_> 1091 | 12 2 2 2 -1. 1092 | <_> 1093 | 12 2 1 1 2. 1094 | <_> 1095 | 13 3 1 1 2. 1096 | 0 1097 | <_> 1098 | 1099 | <_> 1100 | 12 7 3 3 -1. 1101 | <_> 1102 | 12 8 3 1 3. 1103 | 0 1104 | <_> 1105 | 1106 | <_> 1107 | 12 7 3 9 -1. 1108 | <_> 1109 | 12 10 3 3 3. 1110 | 0 1111 | <_> 1112 | 1113 | <_> 1114 | 12 8 8 3 -1. 1115 | <_> 1116 | 16 8 4 3 2. 1117 | 0 1118 | <_> 1119 | 1120 | <_> 1121 | 12 13 12 10 -1. 1122 | <_> 1123 | 12 13 6 5 2. 1124 | <_> 1125 | 18 18 6 5 2. 1126 | 0 1127 | <_> 1128 | 1129 | <_> 1130 | 13 1 4 12 -1. 1131 | <_> 1132 | 13 1 2 6 2. 1133 | <_> 1134 | 15 7 2 6 2. 1135 | 0 1136 | <_> 1137 | 1138 | <_> 1139 | 13 8 6 4 -1. 1140 | <_> 1141 | 15 8 2 4 3. 1142 | 0 1143 | <_> 1144 | 1145 | <_> 1146 | 13 18 2 2 -1. 1147 | <_> 1148 | 13 18 1 1 2. 1149 | <_> 1150 | 14 19 1 1 2. 1151 | 0 1152 | <_> 1153 | 1154 | <_> 1155 | 14 1 2 12 -1. 1156 | <_> 1157 | 14 1 1 6 2. 1158 | <_> 1159 | 15 7 1 6 2. 1160 | 0 1161 | <_> 1162 | 1163 | <_> 1164 | 14 5 2 2 -1. 1165 | <_> 1166 | 14 6 2 1 2. 1167 | 0 1168 | <_> 1169 | 1170 | <_> 1171 | 14 6 4 8 -1. 1172 | <_> 1173 | 14 6 2 4 2. 1174 | <_> 1175 | 16 10 2 4 2. 1176 | 0 1177 | <_> 1178 | 1179 | <_> 1180 | 14 9 4 2 -1. 1181 | <_> 1182 | 16 9 2 2 2. 1183 | 0 1184 | <_> 1185 | 1186 | <_> 1187 | 15 0 1 3 -1. 1188 | <_> 1189 | 15 1 1 1 3. 1190 | 0 1191 | <_> 1192 | 1193 | <_> 1194 | 15 1 2 3 -1. 1195 | <_> 1196 | 15 2 2 1 3. 1197 | 0 1198 | <_> 1199 | 1200 | <_> 1201 | 15 4 3 10 -1. 1202 | <_> 1203 | 16 4 1 10 3. 1204 | 0 1205 | <_> 1206 | 1207 | <_> 1208 | 15 6 2 3 -1. 1209 | <_> 1210 | 16 6 1 3 2. 1211 | 0 1212 | <_> 1213 | 1214 | <_> 1215 | 15 6 2 18 -1. 1216 | <_> 1217 | 15 6 1 9 2. 1218 | <_> 1219 | 16 15 1 9 2. 1220 | 0 1221 | <_> 1222 | 1223 | <_> 1224 | 15 7 4 4 -1. 1225 | <_> 1226 | 17 7 2 4 2. 1227 | 0 1228 | <_> 1229 | 1230 | <_> 1231 | 15 15 4 2 -1. 1232 | <_> 1233 | 15 15 2 1 2. 1234 | <_> 1235 | 17 16 2 1 2. 1236 | 0 1237 | <_> 1238 | 1239 | <_> 1240 | 16 1 4 15 -1. 1241 | <_> 1242 | 18 1 2 15 2. 1243 | 0 1244 | <_> 1245 | 1246 | <_> 1247 | 16 3 6 9 -1. 1248 | <_> 1249 | 18 3 2 9 3. 1250 | 0 1251 | <_> 1252 | 1253 | <_> 1254 | 16 5 2 8 -1. 1255 | <_> 1256 | 16 5 1 4 2. 1257 | <_> 1258 | 17 9 1 4 2. 1259 | 0 1260 | <_> 1261 | 1262 | <_> 1263 | 16 9 4 5 -1. 1264 | <_> 1265 | 18 9 2 5 2. 1266 | 0 1267 | <_> 1268 | 1269 | <_> 1270 | 16 10 3 1 -1. 1271 | <_> 1272 | 17 10 1 1 3. 1273 | 0 1274 | <_> 1275 | 1276 | <_> 1277 | 16 12 4 2 -1. 1278 | <_> 1279 | 16 13 4 1 2. 1280 | 0 1281 | <_> 1282 | 1283 | <_> 1284 | 17 4 2 13 -1. 1285 | <_> 1286 | 18 4 1 13 2. 1287 | 0 1288 | <_> 1289 | 1290 | <_> 1291 | 17 6 2 8 -1. 1292 | <_> 1293 | 17 6 1 4 2. 1294 | <_> 1295 | 18 10 1 4 2. 1296 | 0 1297 | <_> 1298 | 1299 | <_> 1300 | 17 7 4 5 -1. 1301 | <_> 1302 | 19 7 2 5 2. 1303 | 0 1304 | <_> 1305 | 1306 | <_> 1307 | 17 8 3 1 -1. 1308 | <_> 1309 | 18 8 1 1 3. 1310 | 0 1311 | <_> 1312 | 1313 | <_> 1314 | 18 7 2 16 -1. 1315 | <_> 1316 | 18 15 2 8 2. 1317 | 0 1318 | <_> 1319 | 1320 | <_> 1321 | 18 8 4 4 -1. 1322 | <_> 1323 | 18 10 4 2 2. 1324 | 0 1325 | <_> 1326 | 1327 | <_> 1328 | 18 10 6 3 -1. 1329 | <_> 1330 | 18 11 6 1 3. 1331 | 0 1332 | <_> 1333 | 1334 | <_> 1335 | 18 15 5 3 -1. 1336 | <_> 1337 | 18 16 5 1 3. 1338 | 0 1339 | <_> 1340 | 1341 | <_> 1342 | 18 21 2 2 -1. 1343 | <_> 1344 | 18 21 1 1 2. 1345 | <_> 1346 | 19 22 1 1 2. 1347 | 0 1348 | <_> 1349 | 1350 | <_> 1351 | 19 10 1 2 -1. 1352 | <_> 1353 | 19 11 1 1 2. 1354 | 0 1355 | <_> 1356 | 1357 | <_> 1358 | 19 11 3 3 -1. 1359 | <_> 1360 | 19 12 3 1 3. 1361 | 0 1362 | <_> 1363 | 1364 | <_> 1365 | 20 7 3 1 -1. 1366 | <_> 1367 | 21 7 1 1 3. 1368 | 0 1369 | <_> 1370 | 1371 | <_> 1372 | 20 12 2 2 -1. 1373 | <_> 1374 | 20 13 2 1 2. 1375 | 0 1376 | <_> 1377 | 1378 | <_> 1379 | 20 18 3 2 -1. 1380 | <_> 1381 | 21 18 1 2 3. 1382 | 0 1383 | <_> 1384 | 1385 | <_> 1386 | 21 0 2 3 -1. 1387 | <_> 1388 | 21 1 2 1 3. 1389 | 0 1390 | <_> 1391 | 1392 | <_> 1393 | 21 7 3 9 -1. 1394 | <_> 1395 | 22 7 1 9 3. 1396 | 0 1397 | <_> 1398 | 1399 | <_> 1400 | 21 10 3 5 -1. 1401 | <_> 1402 | 22 10 1 5 3. 1403 | 0 1404 | 1405 | -------------------------------------------------------------------------------- /basketball.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BOOST 5 | HAAR 6 | 24 7 | 24 8 | 9 | GAB 10 | 9.9500000476837158e-01 11 | 5.0000000000000000e-01 12 | 9.4999999999999996e-01 13 | 1 14 | 100 15 | 16 | 0 17 | 1 18 | BASIC 19 | 20 20 | 21 | 22 | <_> 23 | 6 24 | -4.7597497701644897e-01 25 | 26 | <_> 27 | 28 | 0 -1 108 -1.0823157615959644e-02 29 | 30 | 1. -2.4223601818084717e-01 31 | <_> 32 | 33 | 0 -1 38 5.4417038336396217e-03 34 | 35 | 3.6022597551345825e-01 -7.5359100103378296e-01 36 | <_> 37 | 38 | 0 -1 52 -6.8400977179408073e-03 39 | 40 | -7.4481379985809326e-01 2.6115188002586365e-01 41 | <_> 42 | 43 | 0 -1 93 -7.0984559133648872e-03 44 | 45 | -5.7210916280746460e-01 3.5207945108413696e-01 46 | <_> 47 | 48 | 0 -1 25 1.2103762477636337e-02 49 | 50 | -4.2472201585769653e-01 5.9060972929000854e-01 51 | <_> 52 | 53 | 0 -1 87 1.3340183068066835e-03 54 | 55 | 3.7710744142532349e-01 -7.8247421979904175e-01 56 | 57 | <_> 58 | 4 59 | -8.6342954635620117e-01 60 | 61 | <_> 62 | 63 | 0 -1 68 2.5386670604348183e-02 64 | 65 | 3.6296296119689941e-01 -7.5384616851806641e-01 66 | <_> 67 | 68 | 0 -1 7 2.7300720103085041e-03 69 | 70 | 2.6845660805702209e-01 -8.2790905237197876e-01 71 | <_> 72 | 73 | 0 -1 5 9.7525734454393387e-03 74 | 75 | 3.8971549272537231e-01 -7.6692593097686768e-01 76 | <_> 77 | 78 | 0 -1 53 4.9450173974037170e-03 79 | 80 | 3.2101461291313171e-01 -7.6775550842285156e-01 81 | 82 | <_> 83 | 5 84 | -7.9703176021575928e-01 85 | 86 | <_> 87 | 88 | 0 -1 91 5.8140754699707031e-03 89 | 90 | 3.5714286565780640e-01 -8.3333331346511841e-01 91 | <_> 92 | 93 | 0 -1 58 1.2077574618160725e-02 94 | 95 | -3.4666132926940918e-01 8.8087177276611328e-01 96 | <_> 97 | 98 | 0 -1 105 -1.8798094242811203e-03 99 | 100 | -8.0115097761154175e-01 4.0014418959617615e-01 101 | <_> 102 | 103 | 0 -1 28 6.7325509153306484e-03 104 | 105 | 2.7014407515525818e-01 -8.3123600482940674e-01 106 | <_> 107 | 108 | 0 -1 8 -3.6689940840005875e-02 109 | 110 | 9.5899039506912231e-01 -3.7642151117324829e-01 111 | 112 | <_> 113 | 5 114 | -8.5749357938766479e-01 115 | 116 | <_> 117 | 118 | 0 -1 48 -9.8623596131801605e-03 119 | 120 | 9.5121949911117554e-01 -2.4528302252292633e-01 121 | <_> 122 | 123 | 0 -1 31 1.8658849876374006e-03 124 | 125 | 3.8806939125061035e-01 -6.6500157117843628e-01 126 | <_> 127 | 128 | 0 -1 82 8.0802403390407562e-03 129 | 130 | 2.7582770586013794e-01 -8.3085596561431885e-01 131 | <_> 132 | 133 | 0 -1 1 -1.0223798453807831e-02 134 | 135 | -8.1811839342117310e-01 2.7540746331214905e-01 136 | <_> 137 | 138 | 0 -1 35 2.8328891843557358e-02 139 | 140 | -4.5798924565315247e-01 5.3942173719406128e-01 141 | 142 | <_> 143 | 4 144 | -4.2888607829809189e-02 145 | 146 | <_> 147 | 148 | 0 -1 55 -1.6441892832517624e-02 149 | 150 | 8.8235294818878174e-01 -3.0201342701911926e-01 151 | <_> 152 | 153 | 0 -1 40 -2.8612779453396797e-02 154 | 155 | -1. 2.7568709850311279e-01 156 | <_> 157 | 158 | 0 -1 2 9.3124276027083397e-03 159 | 160 | -2.7158308029174805e-01 8.6632996797561646e-01 161 | <_> 162 | 163 | 0 -1 42 -7.7709113247692585e-03 164 | 165 | -8.4451156854629517e-01 2.5502079725265503e-01 166 | 167 | <_> 168 | 4 169 | -3.4740304946899414e-01 170 | 171 | <_> 172 | 173 | 0 -1 86 -1.1325627565383911e-02 174 | 175 | -1. 3.1578946113586426e-01 176 | <_> 177 | 178 | 0 -1 3 5.0757713615894318e-02 179 | 180 | -3.1893905997276306e-01 1. 181 | <_> 182 | 183 | 0 -1 17 5.7469774037599564e-03 184 | 185 | 3.6201265454292297e-01 -7.4303013086318970e-01 186 | <_> 187 | 188 | 0 -1 39 -1.8098382279276848e-03 189 | 190 | -4.9960258603096008e-01 3.9877671003341675e-01 191 | 192 | <_> 193 | 5 194 | -8.8800150156021118e-01 195 | 196 | <_> 197 | 198 | 0 -1 18 -8.0157496035099030e-02 199 | 200 | 9.0476191043853760e-01 -2.4050633609294891e-01 201 | <_> 202 | 203 | 0 -1 100 -1.3517031446099281e-02 204 | 205 | -8.6742866039276123e-01 2.6374411582946777e-01 206 | <_> 207 | 208 | 0 -1 67 3.6167728248983622e-03 209 | 210 | -3.9062148332595825e-01 4.9983975291252136e-01 211 | <_> 212 | 213 | 0 -1 96 -3.9216675795614719e-03 214 | 215 | -7.8098487854003906e-01 2.3834140598773956e-01 216 | <_> 217 | 218 | 0 -1 62 8.6375838145613670e-03 219 | 220 | 2.4546359479427338e-01 -7.5895923376083374e-01 221 | 222 | <_> 223 | 5 224 | -6.4275991916656494e-01 225 | 226 | <_> 227 | 228 | 0 -1 27 -2.8219817206263542e-02 229 | 230 | -8.7999999523162842e-01 2.9333332180976868e-01 231 | <_> 232 | 233 | 0 -1 83 -2.8147697448730469e-03 234 | 235 | -7.6636958122253418e-01 2.3645147681236267e-01 236 | <_> 237 | 238 | 0 -1 92 7.9591143876314163e-03 239 | 240 | 3.2747977972030640e-01 -7.3815172910690308e-01 241 | <_> 242 | 243 | 0 -1 102 1.8773726187646389e-03 244 | 245 | 3.3865311741828918e-01 -7.6629698276519775e-01 246 | <_> 247 | 248 | 0 -1 71 -2.5004325434565544e-03 249 | 250 | -6.7691355943679810e-01 3.3190402388572693e-01 251 | 252 | <_> 253 | 8 254 | -8.2868993282318115e-01 255 | 256 | <_> 257 | 258 | 0 -1 45 -2.5992784649133682e-03 259 | 260 | 1. -2.1951219439506531e-01 261 | <_> 262 | 263 | 0 -1 49 1.0873684659600258e-03 264 | 265 | -1.8421480059623718e-01 8.5085248947143555e-01 266 | <_> 267 | 268 | 0 -1 79 -2.0262597128748894e-02 269 | 270 | 7.7049940824508667e-01 -2.5153702497482300e-01 271 | <_> 272 | 273 | 0 -1 51 -1.0913488455116749e-02 274 | 275 | -8.7069219350814819e-01 2.3641471564769745e-01 276 | <_> 277 | 278 | 0 -1 16 -1.6301891300827265e-03 279 | 280 | 6.4886188507080078e-01 -3.7876316905021667e-01 281 | <_> 282 | 283 | 0 -1 0 1.9454451976343989e-03 284 | 285 | -2.7520745992660522e-01 7.6119959354400635e-01 286 | <_> 287 | 288 | 0 -1 101 2.1891784854233265e-03 289 | 290 | -4.3633055686950684e-01 5.1092147827148438e-01 291 | <_> 292 | 293 | 0 -1 57 2.6728515513241291e-03 294 | 295 | -3.5460674762725830e-01 7.5471377372741699e-01 296 | 297 | <_> 298 | 6 299 | -1.1453697681427002e+00 300 | 301 | <_> 302 | 303 | 0 -1 88 -8.5625266656279564e-03 304 | 305 | -7.4545454978942871e-01 2.8275862336158752e-01 306 | <_> 307 | 308 | 0 -1 11 6.8307900801301003e-03 309 | 310 | -2.9436719417572021e-01 8.5919845104217529e-01 311 | <_> 312 | 313 | 0 -1 21 1.4838553033769131e-02 314 | 315 | 3.5180905461311340e-01 -6.3107603788375854e-01 316 | <_> 317 | 318 | 0 -1 24 2.2056849673390388e-02 319 | 320 | -4.2534193396568298e-01 5.9262037277221680e-01 321 | <_> 322 | 323 | 0 -1 107 -6.9118309766054153e-03 324 | 325 | 7.3447579145431519e-01 -3.5615247488021851e-01 326 | <_> 327 | 328 | 0 -1 99 2.6985979638993740e-03 329 | 330 | 2.7880933880805969e-01 -9.3744188547134399e-01 331 | 332 | <_> 333 | 6 334 | -9.4645537436008453e-02 335 | 336 | <_> 337 | 338 | 0 -1 63 1.3328310102224350e-02 339 | 340 | 3.1914892792701721e-01 -7.6271188259124756e-01 341 | <_> 342 | 343 | 0 -1 30 -1.5663281083106995e-02 344 | 345 | -8.0327981710433960e-01 2.1709962189197540e-01 346 | <_> 347 | 348 | 0 -1 46 1.9292540848255157e-02 349 | 350 | 2.6591342687606812e-01 -7.8623926639556885e-01 351 | <_> 352 | 353 | 0 -1 90 -1.5373840928077698e-02 354 | 355 | -8.5558581352233887e-01 2.2937850654125214e-01 356 | <_> 357 | 358 | 0 -1 81 -5.7425573468208313e-03 359 | 360 | -7.7981346845626831e-01 2.9890120029449463e-01 361 | <_> 362 | 363 | 0 -1 13 4.4629164040088654e-03 364 | 365 | -3.4012287855148315e-01 7.4656939506530762e-01 366 | 367 | <_> 368 | 6 369 | -3.7390497326850891e-01 370 | 371 | <_> 372 | 373 | 0 -1 4 -2.5770184397697449e-01 374 | 375 | 7.7049177885055542e-01 -3.3812949061393738e-01 376 | <_> 377 | 378 | 0 -1 70 1.2474964605644345e-03 379 | 380 | 4.2654907703399658e-01 -7.2070342302322388e-01 381 | <_> 382 | 383 | 0 -1 34 -1.7538757994771004e-02 384 | 385 | 7.3396492004394531e-01 -3.5288563370704651e-01 386 | <_> 387 | 388 | 0 -1 15 1.0541453957557678e-03 389 | 390 | 4.3569973111152649e-01 -5.6406933069229126e-01 391 | <_> 392 | 393 | 0 -1 72 1.1915677227079868e-02 394 | 395 | 2.9618388414382935e-01 -9.2421209812164307e-01 396 | <_> 397 | 398 | 0 -1 97 8.5935799870640039e-04 399 | 400 | 3.0592995882034302e-01 -7.9033017158508301e-01 401 | 402 | <_> 403 | 7 404 | -3.2370227575302124e-01 405 | 406 | <_> 407 | 408 | 0 -1 20 5.4709024727344513e-02 409 | 410 | -2.2981366515159607e-01 9.4871795177459717e-01 411 | <_> 412 | 413 | 0 -1 43 9.7257923334836960e-03 414 | 415 | 2.5621762871742249e-01 -8.1782233715057373e-01 416 | <_> 417 | 418 | 0 -1 41 -4.0161274373531342e-02 419 | 420 | -8.9385849237442017e-01 1.6712459921836853e-01 421 | <_> 422 | 423 | 0 -1 80 2.2796192206442356e-03 424 | 425 | 2.2648620605468750e-01 -7.0254182815551758e-01 426 | <_> 427 | 428 | 0 -1 6 -2.9961007833480835e-01 429 | 430 | 9.2527151107788086e-01 -2.8673151135444641e-01 431 | <_> 432 | 433 | 0 -1 94 9.1537600383162498e-04 434 | 435 | 3.9575988054275513e-01 -5.0929832458496094e-01 436 | <_> 437 | 438 | 0 -1 54 -1.2030085781589150e-03 439 | 440 | -8.0848205089569092e-01 2.2129458189010620e-01 441 | 442 | <_> 443 | 6 444 | -4.5046490430831909e-01 445 | 446 | <_> 447 | 448 | 0 -1 75 1.6544839367270470e-02 449 | 450 | -3.1914892792701721e-01 7.6271188259124756e-01 451 | <_> 452 | 453 | 0 -1 32 -4.2299907654523849e-03 454 | 455 | 6.9182586669921875e-01 -2.7047938108444214e-01 456 | <_> 457 | 458 | 0 -1 23 -1.7008729279041290e-02 459 | 460 | -6.6187423467636108e-01 3.2656148076057434e-01 461 | <_> 462 | 463 | 0 -1 47 2.5731239467859268e-02 464 | 465 | 2.2085145115852356e-01 -8.3860749006271362e-01 466 | <_> 467 | 468 | 0 -1 77 -2.9140065889805555e-03 469 | 470 | -5.5369919538497925e-01 3.6615499854087830e-01 471 | <_> 472 | 473 | 0 -1 104 -4.1446747491136193e-04 474 | 475 | -6.2547653913497925e-01 2.8505441546440125e-01 476 | 477 | <_> 478 | 7 479 | -3.8963723182678223e-01 480 | 481 | <_> 482 | 483 | 0 -1 65 1.3974602334201336e-02 484 | 485 | -3.0612245202064514e-01 8.4905660152435303e-01 486 | <_> 487 | 488 | 0 -1 84 1.3324014144018292e-03 489 | 490 | -1.5840251743793488e-01 9.1494053602218628e-01 491 | <_> 492 | 493 | 0 -1 59 5.3529877215623856e-02 494 | 495 | 2.4004304409027100e-01 -8.7604486942291260e-01 496 | <_> 497 | 498 | 0 -1 74 -1.7416093032807112e-03 499 | 500 | 1. -2.2138826549053192e-01 501 | <_> 502 | 503 | 0 -1 12 1.0204706341028214e-03 504 | 505 | -1.6470405459403992e-01 9.6111398935317993e-01 506 | <_> 507 | 508 | 0 -1 50 -1.1157851666212082e-02 509 | 510 | 8.8802105188369751e-01 -1.7165091633796692e-01 511 | <_> 512 | 513 | 0 -1 76 1.6385899856686592e-02 514 | 515 | 3.9258792996406555e-01 -6.7140811681747437e-01 516 | 517 | <_> 518 | 5 519 | -3.0934354662895203e-01 520 | 521 | <_> 522 | 523 | 0 -1 66 2.8078930918127298e-03 524 | 525 | -2.4050633609294891e-01 9.0476191043853760e-01 526 | <_> 527 | 528 | 0 -1 14 -1.4879014343023300e-02 529 | 530 | 1. -1.5434892475605011e-01 531 | <_> 532 | 533 | 0 -1 64 1.9937667530030012e-03 534 | 535 | -1.4509378373622894e-01 9.1099256277084351e-01 536 | <_> 537 | 538 | 0 -1 78 -4.2190374806523323e-03 539 | 540 | 9.5812320709228516e-01 -1.9768768548965454e-01 541 | <_> 542 | 543 | 0 -1 85 -1.6166676068678498e-03 544 | 545 | 4.2829316854476929e-01 -5.1051706075668335e-01 546 | 547 | <_> 548 | 5 549 | -2.5130021572113037e-01 550 | 551 | <_> 552 | 553 | 0 -1 61 3.8916327059268951e-02 554 | 555 | -2.1951219439506531e-01 1. 556 | <_> 557 | 558 | 0 -1 69 1.2666927650570869e-02 559 | 560 | 2.3845413327217102e-01 -7.9395198822021484e-01 561 | <_> 562 | 563 | 0 -1 60 5.9914672747254372e-03 564 | 565 | -2.1239688992500305e-01 8.9606088399887085e-01 566 | <_> 567 | 568 | 0 -1 10 -1.1311018466949463e-01 569 | 570 | -6.3874661922454834e-01 2.7240410447120667e-01 571 | <_> 572 | 573 | 0 -1 89 -3.2653203234076500e-03 574 | 575 | 5.8954650163650513e-01 -3.3024936914443970e-01 576 | 577 | <_> 578 | 6 579 | -2.7167060971260071e-01 580 | 581 | <_> 582 | 583 | 0 -1 19 5.6047476828098297e-02 584 | 585 | -1.9277107715606689e-01 9.4117647409439087e-01 586 | <_> 587 | 588 | 0 -1 33 -6.1136912554502487e-03 589 | 590 | 7.8868430852890015e-01 -2.0548237860202789e-01 591 | <_> 592 | 593 | 0 -1 73 -3.5564132034778595e-02 594 | 595 | 4.7274741530418396e-01 -5.0141942501068115e-01 596 | <_> 597 | 598 | 0 -1 103 -1.3572145253419876e-03 599 | 600 | 6.9473713636398315e-01 -2.9448932409286499e-01 601 | <_> 602 | 603 | 0 -1 44 2.5960044004023075e-03 604 | 605 | 3.8520523905754089e-01 -4.7437289357185364e-01 606 | <_> 607 | 608 | 0 -1 109 -1.4241813914850354e-04 609 | 610 | 5.3728640079498291e-01 -3.6473828554153442e-01 611 | 612 | <_> 613 | 4 614 | -4.6910294890403748e-01 615 | 616 | <_> 617 | 618 | 0 -1 37 -1.4215521514415741e-01 619 | 620 | 9.6610170602798462e-01 -4.0425533056259155e-01 621 | <_> 622 | 623 | 0 -1 9 5.8893203735351562e-02 624 | 625 | -2.8384315967559814e-01 8.2678616046905518e-01 626 | <_> 627 | 628 | 0 -1 26 -1.9078843251918443e-05 629 | 630 | 6.6871613264083862e-01 -4.7787678241729736e-01 631 | <_> 632 | 633 | 0 -1 22 3.3262418583035469e-03 634 | 635 | -3.4441235661506653e-01 6.9687229394912720e-01 636 | 637 | <_> 638 | 6 639 | -2.5020360946655273e-01 640 | 641 | <_> 642 | 643 | 0 -1 36 5.6253485381603241e-02 644 | 645 | -3.1297710537910461e-01 5.9420287609100342e-01 646 | <_> 647 | 648 | 0 -1 98 -4.7048539854586124e-03 649 | 650 | -7.1292710304260254e-01 2.4402815103530884e-01 651 | <_> 652 | 653 | 0 -1 95 2.8117710724473000e-02 654 | 655 | 2.0275187492370605e-01 -7.7736133337020874e-01 656 | <_> 657 | 658 | 0 -1 106 -2.6528859962127171e-05 659 | 660 | 3.7652033567428589e-01 -4.2158430814743042e-01 661 | <_> 662 | 663 | 0 -1 29 6.5848743543028831e-03 664 | 665 | 1.9885590672492981e-01 -8.3662730455398560e-01 666 | <_> 667 | 668 | 0 -1 56 1.4224922284483910e-02 669 | 670 | 1.8357154726982117e-01 -8.3107960224151611e-01 671 | 672 | <_> 673 | 674 | <_> 675 | 0 1 3 6 -1. 676 | <_> 677 | 1 1 1 6 3. 678 | 0 679 | <_> 680 | 681 | <_> 682 | 0 4 24 2 -1. 683 | <_> 684 | 0 5 24 1 2. 685 | 0 686 | <_> 687 | 688 | <_> 689 | 0 6 2 17 -1. 690 | <_> 691 | 1 6 1 17 2. 692 | 0 693 | <_> 694 | 695 | <_> 696 | 0 6 8 11 -1. 697 | <_> 698 | 4 6 4 11 2. 699 | 0 700 | <_> 701 | 702 | <_> 703 | 0 6 24 18 -1. 704 | <_> 705 | 0 15 24 9 2. 706 | 0 707 | <_> 708 | 709 | <_> 710 | 0 8 19 3 -1. 711 | <_> 712 | 0 9 19 1 3. 713 | 0 714 | <_> 715 | 716 | <_> 717 | 0 8 23 16 -1. 718 | <_> 719 | 0 16 23 8 2. 720 | 0 721 | <_> 722 | 723 | <_> 724 | 0 9 4 3 -1. 725 | <_> 726 | 0 10 4 1 3. 727 | 0 728 | <_> 729 | 730 | <_> 731 | 0 11 12 8 -1. 732 | <_> 733 | 4 11 4 8 3. 734 | 0 735 | <_> 736 | 737 | <_> 738 | 0 11 24 10 -1. 739 | <_> 740 | 8 11 8 10 3. 741 | 0 742 | <_> 743 | 744 | <_> 745 | 0 11 24 12 -1. 746 | <_> 747 | 12 11 12 12 2. 748 | 0 749 | <_> 750 | 751 | <_> 752 | 0 13 2 9 -1. 753 | <_> 754 | 1 13 1 9 2. 755 | 0 756 | <_> 757 | 758 | <_> 759 | 0 17 2 2 -1. 760 | <_> 761 | 0 17 1 1 2. 762 | <_> 763 | 1 18 1 1 2. 764 | 0 765 | <_> 766 | 767 | <_> 768 | 0 18 6 1 -1. 769 | <_> 770 | 3 18 3 1 2. 771 | 0 772 | <_> 773 | 774 | <_> 775 | 0 20 18 3 -1. 776 | <_> 777 | 0 21 18 1 3. 778 | 0 779 | <_> 780 | 781 | <_> 782 | 1 0 8 1 -1. 783 | <_> 784 | 5 0 4 1 2. 785 | 0 786 | <_> 787 | 788 | <_> 789 | 1 11 5 2 -1. 790 | <_> 791 | 1 12 5 1 2. 792 | 0 793 | <_> 794 | 795 | <_> 796 | 1 13 18 2 -1. 797 | <_> 798 | 1 14 18 1 2. 799 | 0 800 | <_> 801 | 802 | <_> 803 | 1 15 15 8 -1. 804 | <_> 805 | 1 19 15 4 2. 806 | 0 807 | <_> 808 | 809 | <_> 810 | 2 0 17 4 -1. 811 | <_> 812 | 2 2 17 2 2. 813 | 0 814 | <_> 815 | 816 | <_> 817 | 2 0 22 4 -1. 818 | <_> 819 | 2 2 22 2 2. 820 | 0 821 | <_> 822 | 823 | <_> 824 | 2 5 13 6 -1. 825 | <_> 826 | 2 7 13 2 3. 827 | 0 828 | <_> 829 | 830 | <_> 831 | 3 0 2 6 -1. 832 | <_> 833 | 3 2 2 2 3. 834 | 0 835 | <_> 836 | 837 | <_> 838 | 3 0 4 24 -1. 839 | <_> 840 | 5 0 2 24 2. 841 | 0 842 | <_> 843 | 844 | <_> 845 | 3 3 21 5 -1. 846 | <_> 847 | 10 3 7 5 3. 848 | 0 849 | <_> 850 | 851 | <_> 852 | 3 6 6 9 -1. 853 | <_> 854 | 6 6 3 9 2. 855 | 0 856 | <_> 857 | 858 | <_> 859 | 3 7 2 2 -1. 860 | <_> 861 | 3 7 1 1 2. 862 | <_> 863 | 4 8 1 1 2. 864 | 0 865 | <_> 866 | 867 | <_> 868 | 3 14 16 6 -1. 869 | <_> 870 | 3 16 16 2 3. 871 | 0 872 | <_> 873 | 874 | <_> 875 | 3 17 17 2 -1. 876 | <_> 877 | 3 18 17 1 2. 878 | 0 879 | <_> 880 | 881 | <_> 882 | 3 22 6 2 -1. 883 | <_> 884 | 5 22 2 2 3. 885 | 0 886 | <_> 887 | 888 | <_> 889 | 4 5 7 6 -1. 890 | <_> 891 | 4 7 7 2 3. 892 | 0 893 | <_> 894 | 895 | <_> 896 | 4 7 3 3 -1. 897 | <_> 898 | 4 8 3 1 3. 899 | 0 900 | <_> 901 | 902 | <_> 903 | 4 9 16 3 -1. 904 | <_> 905 | 4 10 16 1 3. 906 | 0 907 | <_> 908 | 909 | <_> 910 | 4 9 18 3 -1. 911 | <_> 912 | 4 10 18 1 3. 913 | 0 914 | <_> 915 | 916 | <_> 917 | 4 18 10 6 -1. 918 | <_> 919 | 4 21 10 3 2. 920 | 0 921 | <_> 922 | 923 | <_> 924 | 5 0 3 21 -1. 925 | <_> 926 | 5 7 3 7 3. 927 | 0 928 | <_> 929 | 930 | <_> 931 | 5 0 17 12 -1. 932 | <_> 933 | 5 6 17 6 2. 934 | 0 935 | <_> 936 | 937 | <_> 938 | 5 6 15 18 -1. 939 | <_> 940 | 5 15 15 9 2. 941 | 0 942 | <_> 943 | 944 | <_> 945 | 5 14 11 2 -1. 946 | <_> 947 | 5 15 11 1 2. 948 | 0 949 | <_> 950 | 951 | <_> 952 | 6 2 2 8 -1. 953 | <_> 954 | 6 6 2 4 2. 955 | 0 956 | <_> 957 | 958 | <_> 959 | 6 2 18 3 -1. 960 | <_> 961 | 6 3 18 1 3. 962 | 0 963 | <_> 964 | 965 | <_> 966 | 6 6 12 5 -1. 967 | <_> 968 | 12 6 6 5 2. 969 | 0 970 | <_> 971 | 972 | <_> 973 | 6 11 14 3 -1. 974 | <_> 975 | 6 12 14 1 3. 976 | 0 977 | <_> 978 | 979 | <_> 980 | 6 12 16 1 -1. 981 | <_> 982 | 14 12 8 1 2. 983 | 0 984 | <_> 985 | 986 | <_> 987 | 6 19 6 5 -1. 988 | <_> 989 | 9 19 3 5 2. 990 | 0 991 | <_> 992 | 993 | <_> 994 | 6 20 2 3 -1. 995 | <_> 996 | 6 21 2 1 3. 997 | 0 998 | <_> 999 | 1000 | <_> 1001 | 7 5 14 6 -1. 1002 | <_> 1003 | 7 7 14 2 3. 1004 | 0 1005 | <_> 1006 | 1007 | <_> 1008 | 7 6 14 4 -1. 1009 | <_> 1010 | 14 6 7 4 2. 1011 | 0 1012 | <_> 1013 | 1014 | <_> 1015 | 7 18 2 6 -1. 1016 | <_> 1017 | 7 21 2 3 2. 1018 | 0 1019 | <_> 1020 | 1021 | <_> 1022 | 7 20 1 3 -1. 1023 | <_> 1024 | 7 21 1 1 3. 1025 | 0 1026 | <_> 1027 | 1028 | <_> 1029 | 7 20 16 3 -1. 1030 | <_> 1031 | 7 21 16 1 3. 1032 | 0 1033 | <_> 1034 | 1035 | <_> 1036 | 8 1 12 2 -1. 1037 | <_> 1038 | 12 1 4 2 3. 1039 | 0 1040 | <_> 1041 | 1042 | <_> 1043 | 8 5 13 3 -1. 1044 | <_> 1045 | 8 6 13 1 3. 1046 | 0 1047 | <_> 1048 | 1049 | <_> 1050 | 8 7 8 3 -1. 1051 | <_> 1052 | 8 8 8 1 3. 1053 | 0 1054 | <_> 1055 | 1056 | <_> 1057 | 8 9 2 2 -1. 1058 | <_> 1059 | 9 9 1 2 2. 1060 | 0 1061 | <_> 1062 | 1063 | <_> 1064 | 8 14 2 10 -1. 1065 | <_> 1066 | 8 19 2 5 2. 1067 | 0 1068 | <_> 1069 | 1070 | <_> 1071 | 8 14 4 10 -1. 1072 | <_> 1073 | 10 14 2 10 2. 1074 | 0 1075 | <_> 1076 | 1077 | <_> 1078 | 8 20 6 3 -1. 1079 | <_> 1080 | 8 21 6 1 3. 1081 | 0 1082 | <_> 1083 | 1084 | <_> 1085 | 9 0 4 4 -1. 1086 | <_> 1087 | 9 2 4 2 2. 1088 | 0 1089 | <_> 1090 | 1091 | <_> 1092 | 9 0 12 6 -1. 1093 | <_> 1094 | 13 0 4 6 3. 1095 | 0 1096 | <_> 1097 | 1098 | <_> 1099 | 9 0 6 3 -1. 1100 | <_> 1101 | 9 1 6 1 3. 1102 | 0 1103 | <_> 1104 | 1105 | <_> 1106 | 9 0 12 4 -1. 1107 | <_> 1108 | 9 2 12 2 2. 1109 | 0 1110 | <_> 1111 | 1112 | <_> 1113 | 9 7 9 2 -1. 1114 | <_> 1115 | 12 7 3 2 3. 1116 | 0 1117 | <_> 1118 | 1119 | <_> 1120 | 9 9 8 8 -1. 1121 | <_> 1122 | 9 13 8 4 2. 1123 | 0 1124 | <_> 1125 | 1126 | <_> 1127 | 9 20 1 3 -1. 1128 | <_> 1129 | 9 21 1 1 3. 1130 | 0 1131 | <_> 1132 | 1133 | <_> 1134 | 10 0 5 4 -1. 1135 | <_> 1136 | 10 2 5 2 2. 1137 | 0 1138 | <_> 1139 | 1140 | <_> 1141 | 10 1 4 3 -1. 1142 | <_> 1143 | 10 2 4 1 3. 1144 | 0 1145 | <_> 1146 | 1147 | <_> 1148 | 10 1 4 4 -1. 1149 | <_> 1150 | 10 3 4 2 2. 1151 | 0 1152 | <_> 1153 | 1154 | <_> 1155 | 10 2 6 22 -1. 1156 | <_> 1157 | 10 13 6 11 2. 1158 | 0 1159 | <_> 1160 | 1161 | <_> 1162 | 10 6 2 12 -1. 1163 | <_> 1164 | 10 12 2 6 2. 1165 | 0 1166 | <_> 1167 | 1168 | <_> 1169 | 10 7 2 3 -1. 1170 | <_> 1171 | 11 7 1 3 2. 1172 | 0 1173 | <_> 1174 | 1175 | <_> 1176 | 10 8 6 2 -1. 1177 | <_> 1178 | 12 8 2 2 3. 1179 | 0 1180 | <_> 1181 | 1182 | <_> 1183 | 10 8 8 6 -1. 1184 | <_> 1185 | 10 8 4 3 2. 1186 | <_> 1187 | 14 11 4 3 2. 1188 | 0 1189 | <_> 1190 | 1191 | <_> 1192 | 10 8 14 16 -1. 1193 | <_> 1194 | 10 16 14 8 2. 1195 | 0 1196 | <_> 1197 | 1198 | <_> 1199 | 10 19 1 3 -1. 1200 | <_> 1201 | 10 20 1 1 3. 1202 | 0 1203 | <_> 1204 | 1205 | <_> 1206 | 11 0 9 4 -1. 1207 | <_> 1208 | 11 2 9 2 2. 1209 | 0 1210 | <_> 1211 | 1212 | <_> 1213 | 11 5 6 14 -1. 1214 | <_> 1215 | 11 5 3 7 2. 1216 | <_> 1217 | 14 12 3 7 2. 1218 | 0 1219 | <_> 1220 | 1221 | <_> 1222 | 11 9 10 1 -1. 1223 | <_> 1224 | 16 9 5 1 2. 1225 | 0 1226 | <_> 1227 | 1228 | <_> 1229 | 12 1 3 3 -1. 1230 | <_> 1231 | 12 2 3 1 3. 1232 | 0 1233 | <_> 1234 | 1235 | <_> 1236 | 12 16 4 8 -1. 1237 | <_> 1238 | 12 20 4 4 2. 1239 | 0 1240 | <_> 1241 | 1242 | <_> 1243 | 13 8 6 1 -1. 1244 | <_> 1245 | 15 8 2 1 3. 1246 | 0 1247 | <_> 1248 | 1249 | <_> 1250 | 13 8 4 10 -1. 1251 | <_> 1252 | 13 8 2 5 2. 1253 | <_> 1254 | 15 13 2 5 2. 1255 | 0 1256 | <_> 1257 | 1258 | <_> 1259 | 13 8 11 3 -1. 1260 | <_> 1261 | 13 9 11 1 3. 1262 | 0 1263 | <_> 1264 | 1265 | <_> 1266 | 13 18 4 3 -1. 1267 | <_> 1268 | 13 19 4 1 3. 1269 | 0 1270 | <_> 1271 | 1272 | <_> 1273 | 14 0 1 3 -1. 1274 | <_> 1275 | 14 1 1 1 3. 1276 | 0 1277 | <_> 1278 | 1279 | <_> 1280 | 14 8 10 10 -1. 1281 | <_> 1282 | 19 8 5 10 2. 1283 | 0 1284 | <_> 1285 | 1286 | <_> 1287 | 14 8 8 3 -1. 1288 | <_> 1289 | 14 9 8 1 3. 1290 | 0 1291 | <_> 1292 | 1293 | <_> 1294 | 14 9 2 3 -1. 1295 | <_> 1296 | 14 10 2 1 3. 1297 | 0 1298 | <_> 1299 | 1300 | <_> 1301 | 14 12 3 6 -1. 1302 | <_> 1303 | 14 14 3 2 3. 1304 | 0 1305 | <_> 1306 | 1307 | <_> 1308 | 14 12 8 12 -1. 1309 | <_> 1310 | 14 12 4 6 2. 1311 | <_> 1312 | 18 18 4 6 2. 1313 | 0 1314 | <_> 1315 | 1316 | <_> 1317 | 15 4 8 4 -1. 1318 | <_> 1319 | 15 6 8 2 2. 1320 | 0 1321 | <_> 1322 | 1323 | <_> 1324 | 15 5 8 3 -1. 1325 | <_> 1326 | 15 6 8 1 3. 1327 | 0 1328 | <_> 1329 | 1330 | <_> 1331 | 15 10 8 4 -1. 1332 | <_> 1333 | 15 12 8 2 2. 1334 | 0 1335 | <_> 1336 | 1337 | <_> 1338 | 15 12 5 6 -1. 1339 | <_> 1340 | 15 14 5 2 3. 1341 | 0 1342 | <_> 1343 | 1344 | <_> 1345 | 16 0 2 3 -1. 1346 | <_> 1347 | 17 0 1 3 2. 1348 | 0 1349 | <_> 1350 | 1351 | <_> 1352 | 16 0 6 16 -1. 1353 | <_> 1354 | 18 0 2 16 3. 1355 | 0 1356 | <_> 1357 | 1358 | <_> 1359 | 16 1 3 12 -1. 1360 | <_> 1361 | 17 1 1 12 3. 1362 | 0 1363 | <_> 1364 | 1365 | <_> 1366 | 16 6 2 2 -1. 1367 | <_> 1368 | 16 7 2 1 2. 1369 | 0 1370 | <_> 1371 | 1372 | <_> 1373 | 16 15 8 3 -1. 1374 | <_> 1375 | 16 16 8 1 3. 1376 | 0 1377 | <_> 1378 | 1379 | <_> 1380 | 16 22 4 1 -1. 1381 | <_> 1382 | 18 22 2 1 2. 1383 | 0 1384 | <_> 1385 | 1386 | <_> 1387 | 17 4 4 20 -1. 1388 | <_> 1389 | 17 4 2 10 2. 1390 | <_> 1391 | 19 14 2 10 2. 1392 | 0 1393 | <_> 1394 | 1395 | <_> 1396 | 18 0 1 21 -1. 1397 | <_> 1398 | 18 7 1 7 3. 1399 | 0 1400 | <_> 1401 | 1402 | <_> 1403 | 18 5 2 3 -1. 1404 | <_> 1405 | 18 6 2 1 3. 1406 | 0 1407 | <_> 1408 | 1409 | <_> 1410 | 19 8 3 2 -1. 1411 | <_> 1412 | 20 8 1 2 3. 1413 | 0 1414 | <_> 1415 | 1416 | <_> 1417 | 19 9 2 2 -1. 1418 | <_> 1419 | 19 9 1 1 2. 1420 | <_> 1421 | 20 10 1 1 2. 1422 | 0 1423 | <_> 1424 | 1425 | <_> 1426 | 20 5 2 3 -1. 1427 | <_> 1428 | 20 6 2 1 3. 1429 | 0 1430 | <_> 1431 | 1432 | <_> 1433 | 21 17 2 1 -1. 1434 | <_> 1435 | 22 17 1 1 2. 1436 | 0 1437 | <_> 1438 | 1439 | <_> 1440 | 22 0 2 17 -1. 1441 | <_> 1442 | 23 0 1 17 2. 1443 | 0 1444 | <_> 1445 | 1446 | <_> 1447 | 22 6 2 16 -1. 1448 | <_> 1449 | 23 6 1 16 2. 1450 | 0 1451 | <_> 1452 | 1453 | <_> 1454 | 22 8 2 2 -1. 1455 | <_> 1456 | 22 8 1 1 2. 1457 | <_> 1458 | 23 9 1 1 2. 1459 | 0 1460 | 1461 | -------------------------------------------------------------------------------- /data/.gitignore: -------------------------------------------------------------------------------- 1 | *json 2 | -------------------------------------------------------------------------------- /detector.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import cv2 3 | 4 | baseball_cascade = cv2.CascadeClassifier('baseball.xml') 5 | basketball_cascade = cv2.CascadeClassifier('basketball.xml') 6 | tennis_cascade = cv2.CascadeClassifier('tennis.xml') 7 | 8 | # testfile = 'satellite/training/pitch_baseball_220727025.png' 9 | # testfile = 'satellite/training/pitch_baseball_222703638.png' 10 | # testfile = 'satellite/training/pitch_baseball_223914194.png' 11 | # testfile = 'satellite/training/pitch_baseball_226905824.png' 12 | # testfile = 'satellite/training/pitch_baseball_227372226.png' 13 | # testfile = 'satellite/training/pitch_baseball_227683244.png' 14 | 15 | # testfile = 'satellite/detection/pitch_baseball_133230978.png' 16 | # testfile = 'satellite/detection/pitch_baseball_133593974.png' 17 | # testfile = 'satellite/detection/pitch_baseball_134874855.png' 18 | # testfile = 'satellite/detection/pitch_baseball_199130202.png' 19 | # testfile = 'satellite/detection/pitch_baseball_284527697.png' 20 | # testfile = 'satellite/detection/pitch_baseball_317137177.png' 21 | # testfile = 'satellite/detection/pitch_baseball_48331085.png' 22 | # testfile = 'satellite/detection/pitch_baseball_68467399.png' 23 | # testfile = 'satellite/detection/pitch_baseball_81189377.png' 24 | # testfile = 'satellite/detection/pitch_baseball_97575184.png' 25 | 26 | # testfile = 'satellite/detection/pitch_tennis_105660674.png' 27 | # testfile = 'satellite/detection/pitch_tennis_120231577.png' 28 | # testfile = 'satellite/detection/pitch_tennis_172547292.png' 29 | # testfile = 'satellite/detection/pitch_tennis_177425633.png' 30 | # testfile = 'satellite/detection/pitch_tennis_224740547.png' 31 | # testfile = 'satellite/detection/pitch_tennis_250911604.png' 32 | # testfile = 'satellite/detection/pitch_tennis_285058169.png' 33 | # testfile = 'satellite/detection/pitch_tennis_290182837.png' 34 | # testfile = 'satellite/detection/pitch_tennis_302813940.png' 35 | # testfile = 'satellite/detection/pitch_tennis_343232913.png' 36 | 37 | # testfile = 'satellite/detection/pitch_basketball_139165791.png' 38 | # testfile = 'satellite/detection/pitch_basketball_156416713.png' 39 | testfile = 'satellite/detection/pitch_basketball_242894925.png' 40 | # testfile = 'satellite/detection/pitch_basketball_256427642.png' 41 | # testfile = 'satellite/detection/pitch_basketball_271825251.png' 42 | # testfile = 'satellite/detection/pitch_basketball_276916820.png' 43 | # testfile = 'satellite/detection/pitch_basketball_302422677.png' 44 | # testfile = 'satellite/detection/pitch_basketball_331162643.png' 45 | # testfile = 'satellite/detection/pitch_basketball_332627356.png' 46 | # testfile = 'satellite/detection/pitch_basketball_48665083.png' 47 | 48 | img = cv2.imread(testfile) 49 | gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 50 | 51 | pitches = basketball_cascade.detectMultiScale(gray, minNeighbors=200) 52 | print 'Pitches found: %d' % len(pitches) 53 | for (x,y,w,h) in pitches: 54 | cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) 55 | 56 | cv2.imshow('img', img) 57 | cv2.waitKey(0) 58 | cv2.destroyAllWindows() 59 | -------------------------------------------------------------------------------- /empty_satellite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/empty_satellite.png -------------------------------------------------------------------------------- /fit/cascade-2000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/fit/cascade-2000.png -------------------------------------------------------------------------------- /fit/cascade-4000-2000_negative.csv: -------------------------------------------------------------------------------- 1 | 5057.94,0 2 | 49.76,10 3 | 28.83,20 4 | 20.04,30 5 | 15.16,40 6 | 11.81,50 7 | 9.7,60 8 | 7.83,70 9 | 6.83,80 10 | 5.88,90 11 | 5.15,100 12 | 4.55,110 13 | 4.1,120 14 | 3.72,130 15 | 3.32,140 16 | 3.06,150 17 | 2.81,160 18 | 2.55,170 19 | 2.32,180 20 | 2.06,190 21 | 1.9,200 22 | 1.8,210 23 | 1.68,220 24 | 1.57,230 25 | 1.5,240 26 | 1.38,250 27 | 1.3,260 28 | 1.21,270 29 | 1.13,280 30 | 1.03,290 31 | 0.97,300 32 | 0.94,310 33 | 0.94,320 34 | 0.9,330 35 | 0.86,340 36 | 0.8,350 37 | 0.78,360 38 | 0.76,370 39 | 0.72,380 40 | 0.67,390 41 | 0.66,400 42 | 0.62,410 43 | 0.6,420 44 | 0.59,430 45 | 0.54,440 46 | 0.53,450 47 | 0.51,460 48 | 0.5,470 49 | 0.47,480 50 | 0.45,490 51 | 0.43,500 52 | -------------------------------------------------------------------------------- /fit/cascade-4000-2000_positive.csv: -------------------------------------------------------------------------------- 1 | 13466.23,0 2 | 109.29,10 3 | 67.82,20 4 | 50.15,30 5 | 39.99,40 6 | 32.95,50 7 | 27.75,60 8 | 24.05,70 9 | 21.12,80 10 | 18.66,90 11 | 16.78,100 12 | 15.29,110 13 | 14.03,120 14 | 12.86,130 15 | 11.86,140 16 | 10.81,150 17 | 9.96,160 18 | 9.25,170 19 | 8.7,180 20 | 8.22,190 21 | 7.73,200 22 | 7.18,210 23 | 6.77,220 24 | 6.38,230 25 | 6.09,240 26 | 5.8,250 27 | 5.56,260 28 | 5.42,270 29 | 5.28,280 30 | 5.08,290 31 | 4.87,300 32 | 4.72,310 33 | 4.51,320 34 | 4.36,330 35 | 4.18,340 36 | 4.0,350 37 | 3.88,360 38 | 3.78,370 39 | 3.64,380 40 | 3.51,390 41 | 3.4,400 42 | 3.35,410 43 | 3.22,420 44 | 3.1,430 45 | 3.02,440 46 | 2.91,450 47 | 2.82,460 48 | 2.76,470 49 | 2.68,480 50 | 2.56,490 51 | 2.48,500 52 | -------------------------------------------------------------------------------- /fit/cascade-4000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/fit/cascade-4000.png -------------------------------------------------------------------------------- /fit/cascade-6000-3000_negative.csv: -------------------------------------------------------------------------------- 1 | 7430.73,0 2 | 65.97,10 3 | 39.4,20 4 | 28.63,30 5 | 22.14,40 6 | 18.02,50 7 | 14.84,60 8 | 12.67,70 9 | 11.06,80 10 | 9.76,90 11 | 8.72,100 12 | 7.93,110 13 | 7.1,120 14 | 6.35,130 15 | 5.83,140 16 | 5.42,150 17 | 5.06,160 18 | 4.72,170 19 | 4.39,180 20 | 4.13,190 21 | 3.9,200 22 | 3.71,210 23 | 3.5,220 24 | 3.28,230 25 | 2.99,240 26 | 2.84,250 27 | 2.64,260 28 | 2.47,270 29 | 2.38,280 30 | 2.29,290 31 | 2.17,300 32 | 2.07,310 33 | 1.99,320 34 | 1.88,330 35 | 1.79,340 36 | 1.75,350 37 | 1.71,360 38 | 1.66,370 39 | 1.63,380 40 | 1.57,390 41 | 1.52,400 42 | 1.47,410 43 | 1.42,420 44 | 1.37,430 45 | 1.33,440 46 | 1.29,450 47 | 1.25,460 48 | 1.22,470 49 | 1.17,480 50 | 1.11,490 51 | 1.08,500 52 | -------------------------------------------------------------------------------- /fit/cascade-6000-3000_positive.csv: -------------------------------------------------------------------------------- 1 | 18992.17,0 2 | 137.03,10 3 | 88.17,20 4 | 66.64,30 5 | 53.23,40 6 | 44.6,50 7 | 38.23,60 8 | 33.3,70 9 | 29.57,80 10 | 26.49,90 11 | 24.08,100 12 | 22.14,110 13 | 20.36,120 14 | 18.73,130 15 | 17.51,140 16 | 16.33,150 17 | 15.31,160 18 | 14.23,170 19 | 13.4,180 20 | 12.41,190 21 | 11.8,200 22 | 11.15,210 23 | 10.63,220 24 | 10.06,230 25 | 9.65,240 26 | 9.21,250 27 | 8.76,260 28 | 8.37,270 29 | 8.06,280 30 | 7.79,290 31 | 7.52,300 32 | 7.27,310 33 | 7.0,320 34 | 6.81,330 35 | 6.56,340 36 | 6.43,350 37 | 6.23,360 38 | 6.07,370 39 | 5.92,380 40 | 5.72,390 41 | 5.57,400 42 | 5.36,410 43 | 5.16,420 44 | 5.05,430 45 | 4.91,440 46 | 4.81,450 47 | 4.7,460 48 | 4.56,470 49 | 4.46,480 50 | 4.35,490 51 | 4.28,500 52 | -------------------------------------------------------------------------------- /fit/cascade-6000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/fit/cascade-6000.png -------------------------------------------------------------------------------- /fit/cascade-8000-4000_negative.csv: -------------------------------------------------------------------------------- 1 | 12576.92,0 2 | 97.56,10 3 | 58.73,20 4 | 42.08,30 5 | 33.08,40 6 | 27.63,50 7 | 23.78,60 8 | 20.72,70 9 | 18.13,80 10 | 16.11,90 11 | 14.49,100 12 | 13.31,110 13 | 12.18,120 14 | 11.22,130 15 | 10.41,140 16 | 9.7,150 17 | 9.11,160 18 | 8.48,170 19 | 7.92,180 20 | 7.47,190 21 | 7.1,200 22 | 6.75,210 23 | 6.38,220 24 | 6.15,230 25 | 5.84,240 26 | 5.71,250 27 | 5.52,260 28 | 5.28,270 29 | 5.11,280 30 | 4.88,290 31 | 4.69,300 32 | 4.55,310 33 | 4.38,320 34 | 4.19,330 35 | 4.03,340 36 | 3.89,350 37 | 3.78,360 38 | 3.63,370 39 | 3.5,380 40 | 3.35,390 41 | 3.21,400 42 | 3.15,410 43 | 3.07,420 44 | 2.93,430 45 | 2.8,440 46 | 2.73,450 47 | 2.66,460 48 | 2.58,470 49 | 2.51,480 50 | 2.43,490 51 | 2.38,500 52 | -------------------------------------------------------------------------------- /fit/cascade-8000-4000_positive.csv: -------------------------------------------------------------------------------- 1 | 28539.15,0 2 | 177.79,10 3 | 116.51,20 4 | 87.85,30 5 | 71.7,40 6 | 61.28,50 7 | 53.09,60 8 | 46.99,70 9 | 42.09,80 10 | 38.42,90 11 | 35.26,100 12 | 32.67,110 13 | 30.35,120 14 | 28.03,130 15 | 26.11,140 16 | 24.44,150 17 | 23.18,160 18 | 21.91,170 19 | 20.64,180 20 | 19.56,190 21 | 18.56,200 22 | 17.8,210 23 | 17.03,220 24 | 16.45,230 25 | 15.83,240 26 | 15.01,250 27 | 14.42,260 28 | 13.79,270 29 | 13.2,280 30 | 12.75,290 31 | 12.18,300 32 | 11.83,310 33 | 11.48,320 34 | 11.15,330 35 | 10.74,340 36 | 10.51,350 37 | 10.25,360 38 | 9.92,370 39 | 9.7,380 40 | 9.48,390 41 | 9.21,400 42 | 8.96,410 43 | 8.74,420 44 | 8.53,430 45 | 8.3,440 46 | 8.14,450 47 | 7.98,460 48 | 7.8,470 49 | 7.57,480 50 | 7.35,490 51 | 7.13,500 52 | -------------------------------------------------------------------------------- /fit/cascade-8000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/fit/cascade-8000.png -------------------------------------------------------------------------------- /fit/cascade-default_negative.csv: -------------------------------------------------------------------------------- 1 | 6401.81,0 2 | 57.13,10 3 | 33.34,20 4 | 23.18,30 5 | 17.48,40 6 | 14.03,50 7 | 11.67,60 8 | 9.68,70 9 | 8.17,80 10 | 7.08,90 11 | 6.32,100 12 | 5.7,110 13 | 5.0,120 14 | 4.48,130 15 | 4.12,140 16 | 3.71,150 17 | 3.38,160 18 | 3.08,170 19 | 2.88,180 20 | 2.67,190 21 | 2.47,200 22 | 2.26,210 23 | 2.11,220 24 | 2.01,230 25 | 1.92,240 26 | 1.8,250 27 | 1.73,260 28 | 1.63,270 29 | 1.59,280 30 | 1.53,290 31 | 1.51,300 32 | 1.43,310 33 | 1.35,320 34 | 1.3,330 35 | 1.24,340 36 | 1.21,350 37 | 1.15,360 38 | 1.15,370 39 | 1.13,380 40 | 1.08,390 41 | 1.04,400 42 | 0.97,410 43 | 0.93,420 44 | 0.88,430 45 | 0.88,440 46 | 0.86,450 47 | 0.82,460 48 | 0.82,470 49 | 0.8,480 50 | 0.79,490 51 | 0.77,500 52 | -------------------------------------------------------------------------------- /fit/cascade-default_positive.csv: -------------------------------------------------------------------------------- 1 | 15427.75,0 2 | 117.57,10 3 | 74.51,20 4 | 55.29,30 5 | 44.16,40 6 | 36.79,50 7 | 30.96,60 8 | 26.74,70 9 | 23.33,80 10 | 20.94,90 11 | 19.2,100 12 | 17.47,110 13 | 16.07,120 14 | 14.75,130 15 | 13.69,140 16 | 12.7,150 17 | 11.73,160 18 | 10.97,170 19 | 10.3,180 20 | 9.56,190 21 | 9.0,200 22 | 8.53,210 23 | 8.08,220 24 | 7.71,230 25 | 7.43,240 26 | 7.09,250 27 | 6.8,260 28 | 6.46,270 29 | 6.11,280 30 | 5.98,290 31 | 5.76,300 32 | 5.54,310 33 | 5.33,320 34 | 5.11,330 35 | 4.85,340 36 | 4.69,350 37 | 4.54,360 38 | 4.39,370 39 | 4.31,380 40 | 4.15,390 41 | 4.05,400 42 | 3.91,410 43 | 3.81,420 44 | 3.73,430 45 | 3.6,440 46 | 3.56,450 47 | 3.47,460 48 | 3.36,470 49 | 3.25,480 50 | 3.22,490 51 | 3.18,500 52 | -------------------------------------------------------------------------------- /info_baseball.dat: -------------------------------------------------------------------------------- 1 | satellite/training/pitch_baseball_107246803.png 1 528 482 223 314 2 | satellite/training/pitch_baseball_111720514.png 1 403 388 472 503 3 | satellite/training/pitch_baseball_120290722.png 1 356 385 567 508 4 | satellite/training/pitch_baseball_120479904.png 1 364 352 551 575 5 | satellite/training/pitch_baseball_121644198.png 1 401 398 477 483 6 | satellite/training/pitch_baseball_128547206.png 1 451 418 377 442 7 | satellite/training/pitch_baseball_133113533.png 1 442 463 395 353 8 | satellite/training/pitch_baseball_133114594.png 1 421 315 436 649 9 | satellite/training/pitch_baseball_133440716.png 1 490 495 298 288 10 | satellite/training/pitch_baseball_133609422.png 1 391 352 496 574 11 | satellite/training/pitch_baseball_133721103.png 1 493 465 292 348 12 | satellite/training/pitch_baseball_133721232.png 1 399 342 481 594 13 | satellite/training/pitch_baseball_133810421.png 1 476 478 326 322 14 | satellite/training/pitch_baseball_133836036.png 1 536 508 207 263 15 | satellite/training/pitch_baseball_134152312.png 1 433 381 413 517 16 | satellite/training/pitch_baseball_134200362.png 1 477 488 325 303 17 | satellite/training/pitch_baseball_134242990.png 1 567 553 145 172 18 | satellite/training/pitch_baseball_134279527.png 1 424 285 431 708 19 | satellite/training/pitch_baseball_134780019.png 1 447 508 384 263 20 | satellite/training/pitch_baseball_136902436.png 1 466 385 346 508 21 | satellite/training/pitch_baseball_137596887.png 1 535 539 209 201 22 | satellite/training/pitch_baseball_138557381.png 1 517 482 245 314 23 | satellite/training/pitch_baseball_140302296.png 1 432 480 414 318 24 | satellite/training/pitch_baseball_141444700.png 1 322 364 634 550 25 | satellite/training/pitch_baseball_153235092.png 1 552 555 175 168 26 | satellite/training/pitch_baseball_153738387.png 1 500 451 278 377 27 | satellite/training/pitch_baseball_164954919.png 1 479 473 320 333 28 | satellite/training/pitch_baseball_165166737.png 1 593 591 93 97 29 | satellite/training/pitch_baseball_165784389.png 1 411 414 456 451 30 | satellite/training/pitch_baseball_166624156.png 1 414 399 451 481 31 | satellite/training/pitch_baseball_166793886.png 1 442 396 394 487 32 | satellite/training/pitch_baseball_176080273.png 1 458 387 363 504 33 | satellite/training/pitch_baseball_178540274.png 1 544 542 191 195 34 | satellite/training/pitch_baseball_178555379.png 1 518 468 243 343 35 | satellite/training/pitch_baseball_186685981.png 1 545 542 188 195 36 | satellite/training/pitch_baseball_188044630.png 1 422 322 435 634 37 | satellite/training/pitch_baseball_191224073.png 1 423 396 433 486 38 | satellite/training/pitch_baseball_196934574.png 1 408 403 463 473 39 | satellite/training/pitch_baseball_201355439.png 1 434 454 411 371 40 | satellite/training/pitch_baseball_205108732.png 1 314 312 650 655 41 | satellite/training/pitch_baseball_207867553.png 1 320 311 638 656 42 | satellite/training/pitch_baseball_209272526.png 1 500 472 279 334 43 | satellite/training/pitch_baseball_212810110.png 1 410 375 458 529 44 | satellite/training/pitch_baseball_216508400.png 1 356 428 567 422 45 | satellite/training/pitch_baseball_220727025.png 1 443 392 393 495 46 | satellite/training/pitch_baseball_222703638.png 1 431 344 417 591 47 | satellite/training/pitch_baseball_223914194.png 1 487 477 305 324 48 | satellite/training/pitch_baseball_226905824.png 1 464 440 351 399 49 | satellite/training/pitch_baseball_227372226.png 1 418 449 442 381 50 | satellite/training/pitch_baseball_227683244.png 1 479 486 321 306 51 | satellite/training/pitch_baseball_230159625.png 1 422 444 434 390 52 | satellite/training/pitch_baseball_235011049.png 1 458 467 362 345 53 | satellite/training/pitch_baseball_236307887.png 1 473 475 332 328 54 | satellite/training/pitch_baseball_242002491.png 1 505 509 269 261 55 | satellite/training/pitch_baseball_243995482.png 1 391 400 497 478 56 | satellite/training/pitch_baseball_246076003.png 1 553 546 173 187 57 | satellite/training/pitch_baseball_251218152.png 1 515 509 248 260 58 | satellite/training/pitch_baseball_254148854.png 1 400 390 479 498 59 | satellite/training/pitch_baseball_256659486.png 1 404 365 471 548 60 | satellite/training/pitch_baseball_259122146.png 1 399 320 480 639 61 | satellite/training/pitch_baseball_260500955.png 1 385 402 509 474 62 | satellite/training/pitch_baseball_262562167.png 1 371 363 537 552 63 | satellite/training/pitch_baseball_264338949.png 1 478 470 322 338 64 | satellite/training/pitch_baseball_270764397.png 1 479 492 320 294 65 | satellite/training/pitch_baseball_272744408.png 1 420 452 439 374 66 | satellite/training/pitch_baseball_288866534.png 1 477 465 325 349 67 | satellite/training/pitch_baseball_289833708.png 1 452 472 374 335 68 | satellite/training/pitch_baseball_292657208.png 1 337 359 605 561 69 | satellite/training/pitch_baseball_298203410.png 1 477 432 325 414 70 | satellite/training/pitch_baseball_299872191.png 1 466 360 347 559 71 | satellite/training/pitch_baseball_30420773.png 1 536 532 206 214 72 | satellite/training/pitch_baseball_307074889.png 1 517 520 245 238 73 | satellite/training/pitch_baseball_315408364.png 1 385 359 508 561 74 | satellite/training/pitch_baseball_316111437.png 1 499 408 281 462 75 | satellite/training/pitch_baseball_316385418.png 1 480 483 319 313 76 | satellite/training/pitch_baseball_316895843.png 1 551 549 177 181 77 | satellite/training/pitch_baseball_32160472.png 1 442 461 395 356 78 | satellite/training/pitch_baseball_322785027.png 1 384 380 511 518 79 | satellite/training/pitch_baseball_324900146.png 1 506 531 267 216 80 | satellite/training/pitch_baseball_326314889.png 1 466 403 346 473 81 | satellite/training/pitch_baseball_329484982.png 1 404 403 471 472 82 | satellite/training/pitch_baseball_32985606.png 1 369 340 541 598 83 | satellite/training/pitch_baseball_333883615.png 1 512 507 254 265 84 | satellite/training/pitch_baseball_334800909.png 1 461 449 356 380 85 | satellite/training/pitch_baseball_338712760.png 1 398 327 483 625 86 | satellite/training/pitch_baseball_341005914.png 1 468 473 343 332 87 | satellite/training/pitch_baseball_42958100.png 1 330 300 619 678 88 | satellite/training/pitch_baseball_47389698.png 1 446 392 387 494 89 | satellite/training/pitch_baseball_49589413.png 1 335 315 609 648 90 | satellite/training/pitch_baseball_60012635.png 1 424 404 431 470 91 | satellite/training/pitch_baseball_60747512.png 1 405 408 469 463 92 | satellite/training/pitch_baseball_61263354.png 1 422 365 435 549 93 | satellite/training/pitch_baseball_62256321.png 1 486 467 306 344 94 | satellite/training/pitch_baseball_67286842.png 1 489 463 300 353 95 | satellite/training/pitch_baseball_81104552.png 1 463 437 353 404 96 | satellite/training/pitch_baseball_82863154.png 1 558 562 162 154 97 | satellite/training/pitch_baseball_93457006.png 1 395 387 488 505 98 | satellite/training/pitch_baseball_93630770.png 1 553 533 173 213 99 | satellite/training/pitch_baseball_97359147.png 1 450 406 378 467 100 | -------------------------------------------------------------------------------- /info_baseball.vec: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/info_baseball.vec -------------------------------------------------------------------------------- /info_basketball.dat: -------------------------------------------------------------------------------- 1 | satellite/training/pitch_basketball_106446325.png 1 573 587 132 105 2 | satellite/training/pitch_basketball_107298687.png 1 599 566 80 147 3 | satellite/training/pitch_basketball_108402022.png 1 596 574 87 130 4 | satellite/training/pitch_basketball_111646637.png 1 598 558 83 163 5 | satellite/training/pitch_basketball_112014160.png 1 573 539 132 201 6 | satellite/training/pitch_basketball_114449945.png 1 552 545 174 188 7 | satellite/training/pitch_basketball_117760909.png 1 570 586 138 106 8 | satellite/training/pitch_basketball_119294193.png 1 486 562 306 155 9 | satellite/training/pitch_basketball_120317673.png 1 592 582 95 114 10 | satellite/training/pitch_basketball_126670636.png 1 598 609 83 61 11 | satellite/training/pitch_basketball_128823561.png 1 570 549 139 181 12 | satellite/training/pitch_basketball_129011803.png 1 578 594 123 90 13 | satellite/training/pitch_basketball_132500356.png 1 594 559 90 161 14 | satellite/training/pitch_basketball_143294260.png 1 582 581 114 116 15 | satellite/training/pitch_basketball_147396028.png 1 596 545 86 189 16 | satellite/training/pitch_basketball_152094998.png 1 594 566 90 146 17 | satellite/training/pitch_basketball_154215337.png 1 573 553 132 173 18 | satellite/training/pitch_basketball_155946503.png 1 424 378 431 522 19 | satellite/training/pitch_basketball_161658427.png 1 608 579 63 121 20 | satellite/training/pitch_basketball_161806329.png 1 602 580 75 118 21 | satellite/training/pitch_basketball_162684646.png 1 609 581 61 117 22 | satellite/training/pitch_basketball_163045429.png 1 582 598 115 83 23 | satellite/training/pitch_basketball_164487339.png 1 598 587 83 104 24 | satellite/training/pitch_basketball_171794556.png 1 577 570 125 139 25 | satellite/training/pitch_basketball_177114011.png 1 564 579 151 121 26 | satellite/training/pitch_basketball_179883714.png 1 586 605 107 69 27 | satellite/training/pitch_basketball_179899060.png 1 606 584 67 111 28 | satellite/training/pitch_basketball_184134934.png 1 574 571 131 136 29 | satellite/training/pitch_basketball_184692349.png 1 599 569 81 141 30 | satellite/training/pitch_basketball_184708011.png 1 463 540 352 198 31 | satellite/training/pitch_basketball_186987449.png 1 530 522 218 234 32 | satellite/training/pitch_basketball_189579890.png 1 564 564 151 151 33 | satellite/training/pitch_basketball_191523635.png 1 440 408 398 462 34 | satellite/training/pitch_basketball_193020909.png 1 569 573 140 132 35 | satellite/training/pitch_basketball_195035706.png 1 560 546 158 187 36 | satellite/training/pitch_basketball_198680115.png 1 570 580 138 118 37 | satellite/training/pitch_basketball_199955238.png 1 590 588 98 102 38 | satellite/training/pitch_basketball_202062257.png 1 615 582 48 114 39 | satellite/training/pitch_basketball_215170696.png 1 582 601 115 77 40 | satellite/training/pitch_basketball_218186050.png 1 592 575 94 129 41 | satellite/training/pitch_basketball_225173924.png 1 587 580 105 119 42 | satellite/training/pitch_basketball_229030196.png 1 610 590 59 99 43 | satellite/training/pitch_basketball_229477453.png 1 597 607 85 65 44 | satellite/training/pitch_basketball_230289327.png 1 606 575 67 128 45 | satellite/training/pitch_basketball_230492173.png 1 574 580 130 118 46 | satellite/training/pitch_basketball_230586350.png 1 556 563 167 153 47 | satellite/training/pitch_basketball_230976787.png 1 593 564 93 151 48 | satellite/training/pitch_basketball_233699108.png 1 532 537 214 204 49 | satellite/training/pitch_basketball_237183806.png 1 618 595 42 88 50 | satellite/training/pitch_basketball_239944668.png 1 553 563 173 152 51 | satellite/training/pitch_basketball_245538094.png 1 614 593 50 93 52 | satellite/training/pitch_basketball_255451684.png 1 607 575 65 129 53 | satellite/training/pitch_basketball_263433037.png 1 579 577 121 125 54 | satellite/training/pitch_basketball_264070499.png 1 603 616 72 47 55 | satellite/training/pitch_basketball_264693650.png 1 603 597 73 84 56 | satellite/training/pitch_basketball_268716080.png 1 577 580 125 118 57 | satellite/training/pitch_basketball_274458165.png 1 571 576 136 127 58 | satellite/training/pitch_basketball_275288643.png 1 576 599 127 81 59 | satellite/training/pitch_basketball_278139726.png 1 586 581 107 116 60 | satellite/training/pitch_basketball_280234267.png 1 620 608 38 62 61 | satellite/training/pitch_basketball_280672447.png 1 567 542 144 194 62 | satellite/training/pitch_basketball_281978729.png 1 551 571 177 137 63 | satellite/training/pitch_basketball_284328109.png 1 593 576 92 126 64 | satellite/training/pitch_basketball_284738497.png 1 565 549 149 180 65 | satellite/training/pitch_basketball_284879632.png 1 568 580 143 118 66 | satellite/training/pitch_basketball_286973173.png 1 585 601 109 76 67 | satellite/training/pitch_basketball_288139956.png 1 575 584 128 111 68 | satellite/training/pitch_basketball_289664354.png 1 603 589 73 101 69 | satellite/training/pitch_basketball_290206698.png 1 564 543 151 193 70 | satellite/training/pitch_basketball_291496970.png 1 604 605 70 69 71 | satellite/training/pitch_basketball_298111881.png 1 593 550 93 178 72 | satellite/training/pitch_basketball_30031692.png 1 536 535 206 208 73 | satellite/training/pitch_basketball_304866406.png 1 602 594 74 91 74 | satellite/training/pitch_basketball_305185086.png 1 576 603 126 73 75 | satellite/training/pitch_basketball_309747119.png 1 593 558 92 163 76 | satellite/training/pitch_basketball_310359939.png 1 611 594 56 91 77 | satellite/training/pitch_basketball_310477052.png 1 592 565 94 149 78 | satellite/training/pitch_basketball_312341229.png 1 566 617 146 45 79 | satellite/training/pitch_basketball_319188645.png 1 609 605 61 69 80 | satellite/training/pitch_basketball_321320386.png 1 609 589 60 100 81 | satellite/training/pitch_basketball_326481936.png 1 579 564 120 151 82 | satellite/training/pitch_basketball_336472888.png 1 588 581 102 116 83 | satellite/training/pitch_basketball_339656072.png 1 574 600 130 79 84 | satellite/training/pitch_basketball_344846859.png 1 611 585 57 108 85 | satellite/training/pitch_basketball_348046491.png 1 580 559 118 160 86 | satellite/training/pitch_basketball_348082048.png 1 604 602 70 75 87 | satellite/training/pitch_basketball_349239716.png 1 587 574 104 131 88 | satellite/training/pitch_basketball_351044062.png 1 603 594 73 91 89 | satellite/training/pitch_basketball_353387249.png 1 511 480 257 319 90 | satellite/training/pitch_basketball_50093745.png 1 556 531 166 217 91 | satellite/training/pitch_basketball_52584218.png 1 607 567 64 144 92 | satellite/training/pitch_basketball_59780194.png 1 602 561 75 156 93 | satellite/training/pitch_basketball_60785704.png 1 475 409 328 460 94 | satellite/training/pitch_basketball_62262943.png 1 575 574 128 130 95 | satellite/training/pitch_basketball_68790150.png 1 567 591 145 97 96 | satellite/training/pitch_basketball_72499002.png 1 523 608 233 63 97 | satellite/training/pitch_basketball_76723013.png 1 498 527 283 224 98 | satellite/training/pitch_basketball_87662533.png 1 534 564 211 151 99 | satellite/training/pitch_basketball_95345705.png 1 574 584 130 110 100 | satellite/training/pitch_basketball_96744594.png 1 571 569 136 141 101 | -------------------------------------------------------------------------------- /info_basketball.vec: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/info_basketball.vec -------------------------------------------------------------------------------- /info_tennis.vec: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/info_tennis.vec -------------------------------------------------------------------------------- /output/cascade-4000-2000_negative.csv: -------------------------------------------------------------------------------- 1 | 10.0,0 2 | 10.0,10 3 | 10.0,20 4 | 10.0,30 5 | 10.0,40 6 | 10.0,50 7 | 10.0,60 8 | 10.0,70 9 | 10.0,80 10 | 10.0,90 11 | 10.0,100 12 | 10.0,110 13 | 10.0,120 14 | 10.0,130 15 | 10.0,140 16 | 10.0,150 17 | 10.0,160 18 | 10.0,170 19 | 10.0,180 20 | 10.0,190 21 | 10.0,200 22 | 10.0,210 23 | 10.0,220 24 | 10.0,230 25 | 10.0,240 26 | 10.0,250 27 | 10.0,260 28 | 10.0,270 29 | 10.0,280 30 | 10.0,290 31 | 10.0,300 32 | 10.0,310 33 | 10.0,320 34 | 10.0,330 35 | 10.0,340 36 | 10.0,350 37 | 10.0,360 38 | 10.0,370 39 | 10.0,380 40 | 10.0,390 41 | 10.0,400 42 | 10.0,410 43 | 10.0,420 44 | 10.0,430 45 | 10.0,440 46 | 10.0,450 47 | 10.0,460 48 | 10.0,470 49 | 10.0,480 50 | 10.0,490 51 | 10.0,500 52 | -------------------------------------------------------------------------------- /output/cascade-4000-2000_positive.csv: -------------------------------------------------------------------------------- 1 | 2.0,0 2 | 2.0,10 3 | 2.0,20 4 | 2.0,30 5 | 2.0,40 6 | 2.0,50 7 | 2.0,60 8 | 2.0,70 9 | 2.0,80 10 | 2.0,90 11 | 2.0,100 12 | 2.0,110 13 | 2.0,120 14 | 2.0,130 15 | 2.0,140 16 | 2.0,150 17 | 2.0,160 18 | 2.0,170 19 | 2.0,180 20 | 2.0,190 21 | 2.0,200 22 | 2.0,210 23 | 2.0,220 24 | 2.0,230 25 | 2.0,240 26 | 2.0,250 27 | 2.0,260 28 | 2.0,270 29 | 2.0,280 30 | 2.0,290 31 | 2.0,300 32 | 2.0,310 33 | 2.0,320 34 | 2.0,330 35 | 2.0,340 36 | 2.0,350 37 | 2.0,360 38 | 2.0,370 39 | 2.0,380 40 | 2.0,390 41 | 2.0,400 42 | 2.0,410 43 | 2.0,420 44 | 2.0,430 45 | 2.0,440 46 | 2.0,450 47 | 2.0,460 48 | 2.0,470 49 | 2.0,480 50 | 2.0,490 51 | 2.0,500 52 | -------------------------------------------------------------------------------- /output/cascade-6000-3000_negative.csv: -------------------------------------------------------------------------------- 1 | 10.0,0 2 | 10.0,10 3 | 10.0,20 4 | 10.0,30 5 | 10.0,40 6 | 10.0,50 7 | 10.0,60 8 | 10.0,70 9 | 10.0,80 10 | 10.0,90 11 | 10.0,100 12 | 10.0,110 13 | 10.0,120 14 | 10.0,130 15 | 10.0,140 16 | 10.0,150 17 | 10.0,160 18 | 10.0,170 19 | 10.0,180 20 | 10.0,190 21 | 10.0,200 22 | 10.0,210 23 | 10.0,220 24 | 10.0,230 25 | 10.0,240 26 | 10.0,250 27 | 10.0,260 28 | 10.0,270 29 | 10.0,280 30 | 10.0,290 31 | 10.0,300 32 | 10.0,310 33 | 10.0,320 34 | 10.0,330 35 | 10.0,340 36 | 10.0,350 37 | 10.0,360 38 | 10.0,370 39 | 10.0,380 40 | 10.0,390 41 | 10.0,400 42 | 10.0,410 43 | 10.0,420 44 | 10.0,430 45 | 10.0,440 46 | 10.0,450 47 | 10.0,460 48 | 10.0,470 49 | 10.0,480 50 | 10.0,490 51 | 10.0,500 52 | -------------------------------------------------------------------------------- /output/cascade-6000-3000_positive.csv: -------------------------------------------------------------------------------- 1 | 2.0,0 2 | 2.0,10 3 | 2.0,20 4 | 2.0,30 5 | 2.0,40 6 | 2.0,50 7 | 2.0,60 8 | 2.0,70 9 | 2.0,80 10 | 2.0,90 11 | 2.0,100 12 | 2.0,110 13 | 2.0,120 14 | 2.0,130 15 | 2.0,140 16 | 2.0,150 17 | 2.0,160 18 | 2.0,170 19 | 2.0,180 20 | 2.0,190 21 | 2.0,200 22 | 2.0,210 23 | 2.0,220 24 | 2.0,230 25 | 2.0,240 26 | 2.0,250 27 | 2.0,260 28 | 2.0,270 29 | 2.0,280 30 | 2.0,290 31 | 2.0,300 32 | 2.0,310 33 | 2.0,320 34 | 2.0,330 35 | 2.0,340 36 | 2.0,350 37 | 2.0,360 38 | 2.0,370 39 | 2.0,380 40 | 2.0,390 41 | 2.0,400 42 | 2.0,410 43 | 2.0,420 44 | 2.0,430 45 | 2.0,440 46 | 2.0,450 47 | 2.0,460 48 | 2.0,470 49 | 2.0,480 50 | 2.0,490 51 | 2.0,500 52 | -------------------------------------------------------------------------------- /output/cascade-8000-4000_negative.csv: -------------------------------------------------------------------------------- 1 | 10.0,0 2 | 10.0,10 3 | 10.0,20 4 | 10.0,30 5 | 10.0,40 6 | 10.0,50 7 | 10.0,60 8 | 10.0,70 9 | 10.0,80 10 | 10.0,90 11 | 10.0,100 12 | 10.0,110 13 | 10.0,120 14 | 10.0,130 15 | 10.0,140 16 | 10.0,150 17 | 10.0,160 18 | 10.0,170 19 | 10.0,180 20 | 10.0,190 21 | 10.0,200 22 | 10.0,210 23 | 10.0,220 24 | 10.0,230 25 | 10.0,240 26 | 10.0,250 27 | 10.0,260 28 | 10.0,270 29 | 10.0,280 30 | 10.0,290 31 | 10.0,300 32 | 10.0,310 33 | 10.0,320 34 | 10.0,330 35 | 10.0,340 36 | 10.0,350 37 | 10.0,360 38 | 10.0,370 39 | 10.0,380 40 | 10.0,390 41 | 10.0,400 42 | 10.0,410 43 | 10.0,420 44 | 10.0,430 45 | 10.0,440 46 | 10.0,450 47 | 10.0,460 48 | 10.0,470 49 | 10.0,480 50 | 10.0,490 51 | 10.0,500 52 | -------------------------------------------------------------------------------- /output/cascade-8000-4000_positive.csv: -------------------------------------------------------------------------------- 1 | 2.0,0 2 | 2.0,10 3 | 2.0,20 4 | 2.0,30 5 | 2.0,40 6 | 2.0,50 7 | 2.0,60 8 | 2.0,70 9 | 2.0,80 10 | 2.0,90 11 | 2.0,100 12 | 2.0,110 13 | 2.0,120 14 | 2.0,130 15 | 2.0,140 16 | 2.0,150 17 | 2.0,160 18 | 2.0,170 19 | 2.0,180 20 | 2.0,190 21 | 2.0,200 22 | 2.0,210 23 | 2.0,220 24 | 2.0,230 25 | 2.0,240 26 | 2.0,250 27 | 2.0,260 28 | 2.0,270 29 | 2.0,280 30 | 2.0,290 31 | 2.0,300 32 | 2.0,310 33 | 2.0,320 34 | 2.0,330 35 | 2.0,340 36 | 2.0,350 37 | 2.0,360 38 | 2.0,370 39 | 2.0,380 40 | 2.0,390 41 | 2.0,400 42 | 2.0,410 43 | 2.0,420 44 | 2.0,430 45 | 2.0,440 46 | 2.0,450 47 | 2.0,460 48 | 2.0,470 49 | 2.0,480 50 | 2.0,490 51 | 2.0,500 52 | -------------------------------------------------------------------------------- /output/cascade-default_negative.csv: -------------------------------------------------------------------------------- 1 | 10.0,0 2 | 10.0,10 3 | 10.0,20 4 | 10.0,30 5 | 10.0,40 6 | 10.0,50 7 | 10.0,60 8 | 10.0,70 9 | 10.0,80 10 | 10.0,90 11 | 10.0,100 12 | 10.0,110 13 | 10.0,120 14 | 10.0,130 15 | 10.0,140 16 | 10.0,150 17 | 10.0,160 18 | 10.0,170 19 | 10.0,180 20 | 10.0,190 21 | 10.0,200 22 | 10.0,210 23 | 10.0,220 24 | 10.0,230 25 | 10.0,240 26 | 10.0,250 27 | 10.0,260 28 | 10.0,270 29 | 10.0,280 30 | 10.0,290 31 | 10.0,300 32 | 10.0,310 33 | 10.0,320 34 | 10.0,330 35 | 10.0,340 36 | 10.0,350 37 | 10.0,360 38 | 10.0,370 39 | 10.0,380 40 | 10.0,390 41 | 10.0,400 42 | 10.0,410 43 | 10.0,420 44 | 10.0,430 45 | 10.0,440 46 | 10.0,450 47 | 10.0,460 48 | 10.0,470 49 | 10.0,480 50 | 10.0,490 51 | 10.0,500 52 | -------------------------------------------------------------------------------- /output/cascade-default_positive.csv: -------------------------------------------------------------------------------- 1 | 2.0,0 2 | 2.0,10 3 | 2.0,20 4 | 2.0,30 5 | 2.0,40 6 | 2.0,50 7 | 2.0,60 8 | 2.0,70 9 | 2.0,80 10 | 2.0,90 11 | 2.0,100 12 | 2.0,110 13 | 2.0,120 14 | 2.0,130 15 | 2.0,140 16 | 2.0,150 17 | 2.0,160 18 | 2.0,170 19 | 2.0,180 20 | 2.0,190 21 | 2.0,200 22 | 2.0,210 23 | 2.0,220 24 | 2.0,230 25 | 2.0,240 26 | 2.0,250 27 | 2.0,260 28 | 2.0,270 29 | 2.0,280 30 | 2.0,290 31 | 2.0,300 32 | 2.0,310 33 | 2.0,320 34 | 2.0,330 35 | 2.0,340 36 | 2.0,350 37 | 2.0,360 38 | 2.0,370 39 | 2.0,380 40 | 2.0,390 41 | 2.0,400 42 | 2.0,410 43 | 2.0,420 44 | 2.0,430 45 | 2.0,440 46 | 2.0,450 47 | 2.0,460 48 | 2.0,470 49 | 2.0,480 50 | 2.0,490 51 | 2.0,500 52 | -------------------------------------------------------------------------------- /readme_images/image00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image00.jpg -------------------------------------------------------------------------------- /readme_images/image01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image01.png -------------------------------------------------------------------------------- /readme_images/image02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image02.png -------------------------------------------------------------------------------- /readme_images/image03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image03.png -------------------------------------------------------------------------------- /readme_images/image04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image04.png -------------------------------------------------------------------------------- /readme_images/image05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image05.jpg -------------------------------------------------------------------------------- /readme_images/image06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image06.png -------------------------------------------------------------------------------- /readme_images/image07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image07.png -------------------------------------------------------------------------------- /readme_images/image08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image08.jpg -------------------------------------------------------------------------------- /readme_images/image09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image09.png -------------------------------------------------------------------------------- /readme_images/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image10.png -------------------------------------------------------------------------------- /readme_images/image11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image11.png -------------------------------------------------------------------------------- /readme_images/image12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/readme_images/image12.png -------------------------------------------------------------------------------- /restwice: -------------------------------------------------------------------------------- 1 | ../restwice/restwice -------------------------------------------------------------------------------- /samples-4000/log.txt: -------------------------------------------------------------------------------- 1 | 500 2 | output/cascade-4000-2000.xml 3 | satellite/fit/pitch_tennis_110313406.png 4 | satellite/fit/pitch_tennis_114723221.png 5 | satellite/fit/pitch_tennis_120326835.png 6 | satellite/fit/pitch_tennis_133651567.png 7 | satellite/fit/pitch_tennis_136824352.png 8 | satellite/fit/pitch_tennis_141691478.png 9 | satellite/fit/pitch_tennis_148413088.png 10 | satellite/fit/pitch_tennis_152285384.png 11 | satellite/fit/pitch_tennis_155380778.png 12 | satellite/fit/pitch_tennis_162504845.png 13 | satellite/fit/pitch_tennis_171450043.png 14 | satellite/fit/pitch_tennis_171734081.png 15 | satellite/fit/pitch_tennis_175512456.png 16 | satellite/fit/pitch_tennis_178311659.png 17 | satellite/fit/pitch_tennis_181133109.png 18 | satellite/fit/pitch_tennis_186239861.png 19 | satellite/fit/pitch_tennis_186995695.png 20 | satellite/fit/pitch_tennis_189930499.png 21 | satellite/fit/pitch_tennis_192560171.png 22 | satellite/fit/pitch_tennis_193861733.png 23 | satellite/fit/pitch_tennis_199751729.png 24 | satellite/fit/pitch_tennis_202064298.png 25 | satellite/fit/pitch_tennis_204662567.png 26 | satellite/fit/pitch_tennis_205818631.png 27 | satellite/fit/pitch_tennis_208546347.png 28 | satellite/fit/pitch_tennis_217387183.png 29 | satellite/fit/pitch_tennis_219033849.png 30 | satellite/fit/pitch_tennis_220743556.png 31 | satellite/fit/pitch_tennis_222723259.png 32 | satellite/fit/pitch_tennis_223630209.png 33 | satellite/fit/pitch_tennis_229234470.png 34 | satellite/fit/pitch_tennis_230522646.png 35 | satellite/fit/pitch_tennis_230523671.png 36 | satellite/fit/pitch_tennis_232532179.png 37 | satellite/fit/pitch_tennis_234063526.png 38 | satellite/fit/pitch_tennis_235954361.png 39 | satellite/fit/pitch_tennis_237694607.png 40 | satellite/fit/pitch_tennis_237719392.png 41 | satellite/fit/pitch_tennis_237960927.png 42 | satellite/fit/pitch_tennis_242166981.png 43 | satellite/fit/pitch_tennis_250480344.png 44 | satellite/fit/pitch_tennis_251357341.png 45 | satellite/fit/pitch_tennis_256261837.png 46 | satellite/fit/pitch_tennis_256658317.png 47 | satellite/fit/pitch_tennis_258578285.png 48 | satellite/fit/pitch_tennis_260823098.png 49 | satellite/fit/pitch_tennis_263289776.png 50 | satellite/fit/pitch_tennis_264313994.png 51 | satellite/fit/pitch_tennis_264517970.png 52 | satellite/fit/pitch_tennis_264851435.png 53 | satellite/fit/pitch_tennis_271954387.png 54 | satellite/fit/pitch_tennis_272161149.png 55 | satellite/fit/pitch_tennis_273065523.png 56 | satellite/fit/pitch_tennis_277814673.png 57 | satellite/fit/pitch_tennis_28523251.png 58 | satellite/fit/pitch_tennis_286076116.png 59 | satellite/fit/pitch_tennis_288472306.png 60 | satellite/fit/pitch_tennis_288495807.png 61 | satellite/fit/pitch_tennis_289676878.png 62 | satellite/fit/pitch_tennis_289926168.png 63 | satellite/fit/pitch_tennis_29657956.png 64 | satellite/fit/pitch_tennis_301415967.png 65 | satellite/fit/pitch_tennis_304124445.png 66 | satellite/fit/pitch_tennis_304374262.png 67 | satellite/fit/pitch_tennis_304616585.png 68 | satellite/fit/pitch_tennis_30588350.png 69 | satellite/fit/pitch_tennis_309839154.png 70 | satellite/fit/pitch_tennis_311197666.png 71 | satellite/fit/pitch_tennis_313041115.png 72 | satellite/fit/pitch_tennis_313195008.png 73 | satellite/fit/pitch_tennis_313741459.png 74 | satellite/fit/pitch_tennis_314919709.png 75 | satellite/fit/pitch_tennis_31542911.png 76 | satellite/fit/pitch_tennis_318716897.png 77 | satellite/fit/pitch_tennis_320856728.png 78 | satellite/fit/pitch_tennis_323380205.png 79 | satellite/fit/pitch_tennis_330176606.png 80 | satellite/fit/pitch_tennis_331078930.png 81 | satellite/fit/pitch_tennis_333933280.png 82 | satellite/fit/pitch_tennis_333933310.png 83 | satellite/fit/pitch_tennis_33565582.png 84 | satellite/fit/pitch_tennis_338406171.png 85 | satellite/fit/pitch_tennis_339751828.png 86 | satellite/fit/pitch_tennis_341500460.png 87 | satellite/fit/pitch_tennis_342222952.png 88 | satellite/fit/pitch_tennis_352442831.png 89 | satellite/fit/pitch_tennis_38084929.png 90 | satellite/fit/pitch_tennis_45749574.png 91 | satellite/fit/pitch_tennis_55880285.png 92 | satellite/fit/pitch_tennis_55942334.png 93 | satellite/fit/pitch_tennis_56235510.png 94 | satellite/fit/pitch_tennis_60945125.png 95 | satellite/fit/pitch_tennis_65768084.png 96 | satellite/fit/pitch_tennis_75505105.png 97 | satellite/fit/pitch_tennis_76345300.png 98 | satellite/fit/pitch_tennis_76793132.png 99 | satellite/fit/pitch_tennis_90086315.png 100 | satellite/fit/pitch_tennis_91466119.png 101 | satellite/fit/pitch_tennis_92813225.png 102 | satellite/fit/pitch_tennis_95750002.png 103 | satellite/fit/negative/negative_1054448059.png 104 | ** negative file satellite/fit/negative/negative_1054448059.png has 1 pitches ** 105 | satellite/fit/negative/negative_1123551733.png 106 | satellite/fit/negative/negative_1176350899.png 107 | satellite/fit/negative/negative_1321111981.png 108 | satellite/fit/negative/negative_1396432199.png 109 | satellite/fit/negative/negative_1457414351.png 110 | satellite/fit/negative/negative_1457850650.png 111 | satellite/fit/negative/negative_1461464772.png 112 | satellite/fit/negative/negative_1464686382.png 113 | satellite/fit/negative/negative_1465167344.png 114 | ** negative file satellite/fit/negative/negative_1465167344.png has 2 pitches ** 115 | satellite/fit/negative/negative_1467378302.png 116 | ** negative file satellite/fit/negative/negative_1467378302.png has 1 pitches ** 117 | satellite/fit/negative/negative_1470640677.png 118 | satellite/fit/negative/negative_1470661051.png 119 | satellite/fit/negative/negative_1471745309.png 120 | satellite/fit/negative/negative_1473297824.png 121 | satellite/fit/negative/negative_1474989746.png 122 | ** negative file satellite/fit/negative/negative_1474989746.png has 1 pitches ** 123 | satellite/fit/negative/negative_1475365715.png 124 | satellite/fit/negative/negative_1476702013.png 125 | satellite/fit/negative/negative_1477084773.png 126 | satellite/fit/negative/negative_1477730452.png 127 | satellite/fit/negative/negative_1480184230.png 128 | satellite/fit/negative/negative_1480459239.png 129 | satellite/fit/negative/negative_1482118514.png 130 | satellite/fit/negative/negative_1513152192.png 131 | ** negative file satellite/fit/negative/negative_1513152192.png has 1 pitches ** 132 | satellite/fit/negative/negative_1627501413.png 133 | ** negative file satellite/fit/negative/negative_1627501413.png has 4 pitches ** 134 | satellite/fit/negative/negative_1653734705.png 135 | satellite/fit/negative/negative_1655419340.png 136 | satellite/fit/negative/negative_1661852789.png 137 | ** negative file satellite/fit/negative/negative_1661852789.png has 1 pitches ** 138 | satellite/fit/negative/negative_1747358322.png 139 | satellite/fit/negative/negative_1772769027.png 140 | satellite/fit/negative/negative_1805579443.png 141 | satellite/fit/negative/negative_1825833634.png 142 | ** negative file satellite/fit/negative/negative_1825833634.png has 2 pitches ** 143 | satellite/fit/negative/negative_1843480795.png 144 | satellite/fit/negative/negative_1974809346.png 145 | ** negative file satellite/fit/negative/negative_1974809346.png has 5 pitches ** 146 | satellite/fit/negative/negative_2003535811.png 147 | satellite/fit/negative/negative_2030882909.png 148 | ** negative file satellite/fit/negative/negative_2030882909.png has 1 pitches ** 149 | satellite/fit/negative/negative_2043189819.png 150 | ** negative file satellite/fit/negative/negative_2043189819.png has 6 pitches ** 151 | satellite/fit/negative/negative_2113073282.png 152 | satellite/fit/negative/negative_2121212355.png 153 | satellite/fit/negative/negative_2211175154.png 154 | satellite/fit/negative/negative_2258839703.png 155 | satellite/fit/negative/negative_2274413835.png 156 | satellite/fit/negative/negative_2287905808.png 157 | satellite/fit/negative/negative_2305834780.png 158 | satellite/fit/negative/negative_2309374042.png 159 | satellite/fit/negative/negative_2358136413.png 160 | satellite/fit/negative/negative_2360771443.png 161 | satellite/fit/negative/negative_2361112097.png 162 | satellite/fit/negative/negative_2406350247.png 163 | satellite/fit/negative/negative_2421237405.png 164 | satellite/fit/negative/negative_2422081925.png 165 | satellite/fit/negative/negative_2429711238.png 166 | satellite/fit/negative/negative_2466582036.png 167 | satellite/fit/negative/negative_2471258367.png 168 | satellite/fit/negative/negative_2477241031.png 169 | satellite/fit/negative/negative_2531551300.png 170 | satellite/fit/negative/negative_2540800194.png 171 | satellite/fit/negative/negative_2555875397.png 172 | satellite/fit/negative/negative_2572171759.png 173 | satellite/fit/negative/negative_2624359214.png 174 | satellite/fit/negative/negative_2693088779.png 175 | satellite/fit/negative/negative_2705330394.png 176 | satellite/fit/negative/negative_2757467115.png 177 | ** negative file satellite/fit/negative/negative_2757467115.png has 8 pitches ** 178 | satellite/fit/negative/negative_276105906.png 179 | satellite/fit/negative/negative_2822820412.png 180 | ** negative file satellite/fit/negative/negative_2822820412.png has 1 pitches ** 181 | satellite/fit/negative/negative_2830774341.png 182 | satellite/fit/negative/negative_2834915561.png 183 | satellite/fit/negative/negative_2880112018.png 184 | satellite/fit/negative/negative_2896187992.png 185 | satellite/fit/negative/negative_3014461260.png 186 | satellite/fit/negative/negative_3040929470.png 187 | satellite/fit/negative/negative_3051212556.png 188 | satellite/fit/negative/negative_3056166261.png 189 | ** negative file satellite/fit/negative/negative_3056166261.png has 1 pitches ** 190 | satellite/fit/negative/negative_3071078175.png 191 | satellite/fit/negative/negative_3077264733.png 192 | satellite/fit/negative/negative_3088028046.png 193 | satellite/fit/negative/negative_3102549337.png 194 | satellite/fit/negative/negative_3103076564.png 195 | satellite/fit/negative/negative_3111950952.png 196 | satellite/fit/negative/negative_3126925358.png 197 | satellite/fit/negative/negative_3169835867.png 198 | satellite/fit/negative/negative_3225222626.png 199 | satellite/fit/negative/negative_3225294715.png 200 | satellite/fit/negative/negative_3235605810.png 201 | satellite/fit/negative/negative_3246662073.png 202 | satellite/fit/negative/negative_3277437529.png 203 | ** negative file satellite/fit/negative/negative_3277437529.png has 2 pitches ** 204 | satellite/fit/negative/negative_3283011137.png 205 | ** negative file satellite/fit/negative/negative_3283011137.png has 2 pitches ** 206 | satellite/fit/negative/negative_335718524.png 207 | satellite/fit/negative/negative_3366871779.png 208 | satellite/fit/negative/negative_3378482002.png 209 | satellite/fit/negative/negative_339267309.png 210 | satellite/fit/negative/negative_3409823100.png 211 | ** negative file satellite/fit/negative/negative_3409823100.png has 1 pitches ** 212 | satellite/fit/negative/negative_3419669977.png 213 | satellite/fit/negative/negative_3447521151.png 214 | satellite/fit/negative/negative_3462627717.png 215 | satellite/fit/negative/negative_3487901286.png 216 | ** negative file satellite/fit/negative/negative_3487901286.png has 3 pitches ** 217 | satellite/fit/negative/negative_417268643.png 218 | satellite/fit/negative/negative_428997728.png 219 | satellite/fit/negative/negative_596013538.png 220 | satellite/fit/negative/negative_637533520.png 221 | pos_percentage = 73.0 222 | neg_percentage = 82.0 -------------------------------------------------------------------------------- /satellite/.gitignore: -------------------------------------------------------------------------------- 1 | gray 2 | rectangle 3 | fit 4 | -------------------------------------------------------------------------------- /tennis.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BOOST 5 | HAAR 6 | 24 7 | 24 8 | 9 | GAB 10 | 9.9500000476837158e-01 11 | 5.0000000000000000e-01 12 | 9.4999999999999996e-01 13 | 1 14 | 100 15 | 16 | 0 17 | 1 18 | BASIC 19 | 20 20 | 21 | 22 | <_> 23 | 5 24 | -1.1640619039535522e+00 25 | 26 | <_> 27 | 28 | 0 -1 33 1.1681558564305305e-02 29 | 30 | 3.8931298255920410e-01 -7.3913043737411499e-01 31 | <_> 32 | 33 | 0 -1 103 -1.5116635710000992e-02 34 | 35 | 1. -3.2888874411582947e-01 36 | <_> 37 | 38 | 0 -1 29 4.9462635070085526e-03 39 | 40 | -4.8610672354698181e-01 5.6969720125198364e-01 41 | <_> 42 | 43 | 0 -1 74 -5.3125363774597645e-03 44 | 45 | 4.5896476507186890e-01 -5.0278729200363159e-01 46 | <_> 47 | 48 | 0 -1 42 -2.1839805413037539e-04 49 | 50 | -4.3603751063346863e-01 5.8558005094528198e-01 51 | 52 | <_> 53 | 4 54 | -3.7658688426017761e-01 55 | 56 | <_> 57 | 58 | 0 -1 102 -1.5126217156648636e-02 59 | 60 | 7.1875000000000000e-01 -3.3823528885841370e-01 61 | <_> 62 | 63 | 0 -1 41 4.4124433770775795e-03 64 | 65 | 3.7614840269088745e-01 -7.3065555095672607e-01 66 | <_> 67 | 68 | 0 -1 38 4.2576372623443604e-02 69 | 70 | -4.6844714879989624e-01 5.3638738393783569e-01 71 | <_> 72 | 73 | 0 -1 23 3.3694929443299770e-03 74 | 75 | 2.9951420426368713e-01 -9.0106874704360962e-01 76 | 77 | <_> 78 | 3 79 | -2.1598662436008453e-01 80 | 81 | <_> 82 | 83 | 0 -1 44 6.2543012201786041e-02 84 | 85 | 3.0612245202064514e-01 -8.4905660152435303e-01 86 | <_> 87 | 88 | 0 -1 95 -7.2181649738922715e-04 89 | 90 | -7.7753198146820068e-01 3.2637751102447510e-01 91 | <_> 92 | 93 | 0 -1 51 4.1792765259742737e-03 94 | 95 | 3.1587913632392883e-01 -8.4848660230636597e-01 96 | 97 | <_> 98 | 5 99 | -1.0134205818176270e+00 100 | 101 | <_> 102 | 103 | 0 -1 1 3.3501468598842621e-02 104 | 105 | -3.1506848335266113e-01 8.5185188055038452e-01 106 | <_> 107 | 108 | 0 -1 32 -9.8212044686079025e-03 109 | 110 | -7.1905797719955444e-01 4.2926022410392761e-01 111 | <_> 112 | 113 | 0 -1 22 2.5910846889019012e-03 114 | 115 | 3.9328503608703613e-01 -6.7553454637527466e-01 116 | <_> 117 | 118 | 0 -1 49 -4.6781208366155624e-03 119 | 120 | -8.6602169275283813e-01 3.3895102143287659e-01 121 | <_> 122 | 123 | 0 -1 63 -1.6893994063138962e-02 124 | 125 | -7.2980999946594238e-01 3.5728940367698669e-01 126 | 127 | <_> 128 | 5 129 | -6.4797937870025635e-01 130 | 131 | <_> 132 | 133 | 0 -1 25 8.7428595870733261e-03 134 | 135 | 3.2413792610168457e-01 -8.5454547405242920e-01 136 | <_> 137 | 138 | 0 -1 3 3.4483239054679871e-02 139 | 140 | -3.7265339493751526e-01 9.5655983686447144e-01 141 | <_> 142 | 143 | 0 -1 101 -7.5408713892102242e-03 144 | 145 | 8.9761185646057129e-01 -2.1655647456645966e-01 146 | <_> 147 | 148 | 0 -1 98 8.0099666956812143e-04 149 | 150 | 4.0968009829521179e-01 -6.3825011253356934e-01 151 | <_> 152 | 153 | 0 -1 90 -8.2727870903909206e-04 154 | 155 | -7.9258751869201660e-01 3.4814986586570740e-01 156 | 157 | <_> 158 | 4 159 | -2.9686239361763000e-01 160 | 161 | <_> 162 | 163 | 0 -1 10 3.8368768990039825e-02 164 | 165 | -3.7815126776695251e-01 5.5555558204650879e-01 166 | <_> 167 | 168 | 0 -1 92 1.3158582150936127e-03 169 | 170 | 2.9091122746467590e-01 -8.0650782585144043e-01 171 | <_> 172 | 173 | 0 -1 18 -1.0047808289527893e-02 174 | 175 | 8.2183551788330078e-01 -2.9375362396240234e-01 176 | <_> 177 | 178 | 0 -1 14 -3.8002122193574905e-02 179 | 180 | -9.6160548925399780e-01 2.4784348905086517e-01 181 | 182 | <_> 183 | 5 184 | -9.3237146735191345e-02 185 | 186 | <_> 187 | 188 | 0 -1 89 -1.3365160673856735e-02 189 | 190 | -8.7234044075012207e-01 2.6797387003898621e-01 191 | <_> 192 | 193 | 0 -1 35 -8.7273523211479187e-02 194 | 195 | 6.8873530626296997e-01 -3.6366090178489685e-01 196 | <_> 197 | 198 | 0 -1 16 8.5515584796667099e-03 199 | 200 | 2.9401195049285889e-01 -8.3291792869567871e-01 201 | <_> 202 | 203 | 0 -1 80 9.7663654014468193e-04 204 | 205 | 2.9579332470893860e-01 -7.1285861730575562e-01 206 | <_> 207 | 208 | 0 -1 75 -1.4379353960976005e-03 209 | 210 | 5.5295890569686890e-01 -4.3762439489364624e-01 211 | 212 | <_> 213 | 6 214 | -3.2959663867950439e-01 215 | 216 | <_> 217 | 218 | 0 -1 4 2.2715985774993896e-02 219 | 220 | -2.7516779303550720e-01 8.0392158031463623e-01 221 | <_> 222 | 223 | 0 -1 12 -4.1582368314266205e-02 224 | 225 | -1. 2.5362113118171692e-01 226 | <_> 227 | 228 | 0 -1 20 8.9399743592366576e-04 229 | 230 | -4.0668159723281860e-01 5.0226598978042603e-01 231 | <_> 232 | 233 | 0 -1 45 1.6769368201494217e-02 234 | 235 | 2.7153766155242920e-01 -8.3526921272277832e-01 236 | <_> 237 | 238 | 0 -1 105 -7.3682060465216637e-03 239 | 240 | 8.8047313690185547e-01 -3.2458457350730896e-01 241 | <_> 242 | 243 | 0 -1 26 3.3160118618980050e-04 244 | 245 | 3.4953778982162476e-01 -6.3981556892395020e-01 246 | 247 | <_> 248 | 5 249 | -7.4937635660171509e-01 250 | 251 | <_> 252 | 253 | 0 -1 5 1.1346900835633278e-02 254 | 255 | 2.8476822376251221e-01 -8.7755101919174194e-01 256 | <_> 257 | 258 | 0 -1 39 -3.1789947301149368e-02 259 | 260 | 6.3205736875534058e-01 -3.5834541916847229e-01 261 | <_> 262 | 263 | 0 -1 7 1.2484284117817879e-02 264 | 265 | -2.0320907235145569e-01 9.7946733236312866e-01 266 | <_> 267 | 268 | 0 -1 24 3.7448781076818705e-03 269 | 270 | 3.0101835727691650e-01 -7.5529855489730835e-01 271 | <_> 272 | 273 | 0 -1 17 -8.0439355224370956e-03 274 | 275 | -7.3950600624084473e-01 2.8270849585533142e-01 276 | 277 | <_> 278 | 6 279 | -6.5158718824386597e-01 280 | 281 | <_> 282 | 283 | 0 -1 85 -6.8622105754911900e-04 284 | 285 | 7.0491802692413330e-01 -3.0935251712799072e-01 286 | <_> 287 | 288 | 0 -1 68 -1.1146757751703262e-03 289 | 290 | 8.3373832702636719e-01 -2.3269703984260559e-01 291 | <_> 292 | 293 | 0 -1 54 -4.7340214252471924e-02 294 | 295 | -8.8586682081222534e-01 2.6785829663276672e-01 296 | <_> 297 | 298 | 0 -1 27 1.3323458842933178e-03 299 | 300 | -3.4816879034042358e-01 7.5150179862976074e-01 301 | <_> 302 | 303 | 0 -1 82 -2.6519806124269962e-04 304 | 305 | 6.7985582351684570e-01 -2.8646948933601379e-01 306 | <_> 307 | 308 | 0 -1 71 1.7102790996432304e-02 309 | 310 | -5.6962835788726807e-01 4.3864628672599792e-01 311 | 312 | <_> 313 | 4 314 | 5.0523418933153152e-02 315 | 316 | <_> 317 | 318 | 0 -1 72 -7.1852326393127441e-02 319 | 320 | -8.2608693838119507e-01 2.4675324559211731e-01 321 | <_> 322 | 323 | 0 -1 67 -1.3480332680046558e-02 324 | 325 | 1. -2.5744530558586121e-01 326 | <_> 327 | 328 | 0 -1 0 9.6167057752609253e-02 329 | 330 | -2.5264292955398560e-01 8.3449047803878784e-01 331 | <_> 332 | 333 | 0 -1 94 -1.6135612968355417e-03 334 | 335 | -7.7327501773834229e-01 3.8724520802497864e-01 336 | 337 | <_> 338 | 6 339 | -7.3693144321441650e-01 340 | 341 | <_> 342 | 343 | 0 -1 50 -1.1656967923045158e-02 344 | 345 | -6.8253970146179199e-01 3.1386861205101013e-01 346 | <_> 347 | 348 | 0 -1 36 -1.4506639540195465e-01 349 | 350 | 7.0928388833999634e-01 -2.8950649499893188e-01 351 | <_> 352 | 353 | 0 -1 55 -1.0831365361809731e-03 354 | 355 | -5.4722821712493896e-01 3.8307803869247437e-01 356 | <_> 357 | 358 | 0 -1 40 -2.1527539938688278e-03 359 | 360 | -5.6925010681152344e-01 4.4359770417213440e-01 361 | <_> 362 | 363 | 0 -1 43 1.8821869045495987e-02 364 | 365 | 1.7862588167190552e-01 -9.1195327043533325e-01 366 | <_> 367 | 368 | 0 -1 62 9.5327303279191256e-04 369 | 370 | 2.4266096949577332e-01 -8.6960333585739136e-01 371 | 372 | <_> 373 | 6 374 | -1.0292720049619675e-01 375 | 376 | <_> 377 | 378 | 0 -1 73 -5.5775772780179977e-03 379 | 380 | -7.8260868787765503e-01 2.3376622796058655e-01 381 | <_> 382 | 383 | 0 -1 59 -1.0585242882370949e-02 384 | 385 | 8.4594124555587769e-01 -2.5922471284866333e-01 386 | <_> 387 | 388 | 0 -1 28 -4.5046541839838028e-02 389 | 390 | -8.8048446178436279e-01 2.4453166127204895e-01 391 | <_> 392 | 393 | 0 -1 30 2.1537087857723236e-02 394 | 395 | 2.9553532600402832e-01 -6.5645653009414673e-01 396 | <_> 397 | 398 | 0 -1 96 -2.9621655121445656e-03 399 | 400 | -8.2057124376296997e-01 2.5677043199539185e-01 401 | <_> 402 | 403 | 0 -1 57 -4.0834895335137844e-03 404 | 405 | -7.4782925844192505e-01 2.5070998072624207e-01 406 | 407 | <_> 408 | 7 409 | -8.4188145399093628e-01 410 | 411 | <_> 412 | 413 | 0 -1 81 -4.3216776102781296e-03 414 | 415 | 9.4594591856002808e-01 -2.1472392976284027e-01 416 | <_> 417 | 418 | 0 -1 83 -4.0692733600735664e-03 419 | 420 | 4.8861014842987061e-01 -3.4524291753768921e-01 421 | <_> 422 | 423 | 0 -1 93 1.1181144509464502e-03 424 | 425 | 2.8369456529617310e-01 -6.6008645296096802e-01 426 | <_> 427 | 428 | 0 -1 56 5.6018959730863571e-03 429 | 430 | -5.1339274644851685e-01 4.1860267519950867e-01 431 | <_> 432 | 433 | 0 -1 100 5.6627916637808084e-04 434 | 435 | -4.4390973448753357e-01 5.1977807283401489e-01 436 | <_> 437 | 438 | 0 -1 79 -7.0447619073092937e-03 439 | 440 | -7.8773522377014160e-01 3.1759202480316162e-01 441 | <_> 442 | 443 | 0 -1 86 1.8758473917841911e-02 444 | 445 | 2.4743311107158661e-01 -7.9334342479705811e-01 446 | 447 | <_> 448 | 7 449 | -2.2490398585796356e-01 450 | 451 | <_> 452 | 453 | 0 -1 58 -1.1130325496196747e-02 454 | 455 | 1. -2.1951219439506531e-01 456 | <_> 457 | 458 | 0 -1 99 -8.9831469813361764e-04 459 | 460 | 8.2124012708663940e-01 -1.8876339495182037e-01 461 | <_> 462 | 463 | 0 -1 70 1.0493537411093712e-02 464 | 465 | -1.9151304662227631e-01 9.5686608552932739e-01 466 | <_> 467 | 468 | 0 -1 69 -8.6161121726036072e-03 469 | 470 | 1. -1.8956424295902252e-01 471 | <_> 472 | 473 | 0 -1 60 -1.8535149283707142e-03 474 | 475 | -7.0859819650650024e-01 3.4819221496582031e-01 476 | <_> 477 | 478 | 0 -1 87 -2.9809945262968540e-03 479 | 480 | 8.9510697126388550e-01 -2.6152491569519043e-01 481 | <_> 482 | 483 | 0 -1 104 -1.6868398233782500e-04 484 | 485 | 4.7778162360191345e-01 -4.5996445417404175e-01 486 | 487 | <_> 488 | 5 489 | -2.5662693381309509e-01 490 | 491 | <_> 492 | 493 | 0 -1 46 5.4382961243391037e-03 494 | 495 | 4.1176471114158630e-01 -6.0493826866149902e-01 496 | <_> 497 | 498 | 0 -1 52 9.2327985912561417e-03 499 | 500 | -2.8452718257904053e-01 7.8337907791137695e-01 501 | <_> 502 | 503 | 0 -1 48 8.5762166418135166e-04 504 | 505 | 3.8786894083023071e-01 -5.8932077884674072e-01 506 | <_> 507 | 508 | 0 -1 15 3.1990455463528633e-03 509 | 510 | -3.4624251723289490e-01 7.3934096097946167e-01 511 | <_> 512 | 513 | 0 -1 97 -9.3830469995737076e-04 514 | 515 | -3.8617530465126038e-01 5.9121209383010864e-01 516 | 517 | <_> 518 | 5 519 | -3.0965808033943176e-01 520 | 521 | <_> 522 | 523 | 0 -1 31 1.7638070508837700e-02 524 | 525 | 3.1884059309959412e-01 -7.0967739820480347e-01 526 | <_> 527 | 528 | 0 -1 11 3.5573192872107029e-03 529 | 530 | -5.0379365682601929e-01 4.2939853668212891e-01 531 | <_> 532 | 533 | 0 -1 84 -3.2306175853591412e-05 534 | 535 | 4.3441912531852722e-01 -5.3755253553390503e-01 536 | <_> 537 | 538 | 0 -1 6 2.1091590169817209e-03 539 | 540 | -1.9579777121543884e-01 9.2411965131759644e-01 541 | <_> 542 | 543 | 0 -1 77 4.8846997320652008e-02 544 | 545 | -2.6800051331520081e-01 7.4032223224639893e-01 546 | 547 | <_> 548 | 7 549 | -1.7703385651111603e-01 550 | 551 | <_> 552 | 553 | 0 -1 13 -6.9871813058853149e-02 554 | 555 | 8.4848487377166748e-01 -4.1791045665740967e-01 556 | <_> 557 | 558 | 0 -1 76 1.6979828476905823e-02 559 | 560 | -2.3390157520771027e-01 8.1354135274887085e-01 561 | <_> 562 | 563 | 0 -1 64 1.6343483701348305e-02 564 | 565 | -3.4272706508636475e-01 7.8413832187652588e-01 566 | <_> 567 | 568 | 0 -1 34 3.1059611588716507e-02 569 | 570 | -2.7163100242614746e-01 6.9821691513061523e-01 571 | <_> 572 | 573 | 0 -1 9 1.9315062090754509e-03 574 | 575 | -5.5630272626876831e-01 5.1116693019866943e-01 576 | <_> 577 | 578 | 0 -1 21 -5.3244471549987793e-02 579 | 580 | 9.4948369264602661e-01 -2.3906594514846802e-01 581 | <_> 582 | 583 | 0 -1 91 -4.2280651628971100e-02 584 | 585 | 9.4390666484832764e-01 -2.1220839023590088e-01 586 | 587 | <_> 588 | 6 589 | -4.0548816323280334e-01 590 | 591 | <_> 592 | 593 | 0 -1 61 -2.0328260958194733e-02 594 | 595 | 8.4615385532379150e-01 -2.0496894419193268e-01 596 | <_> 597 | 598 | 0 -1 88 1.2388465926051140e-02 599 | 600 | -2.2337950766086578e-01 7.6592004299163818e-01 601 | <_> 602 | 603 | 0 -1 53 -6.5271817147731781e-03 604 | 605 | -5.5357021093368530e-01 3.3035978674888611e-01 606 | <_> 607 | 608 | 0 -1 19 2.5900995358824730e-02 609 | 610 | -1.9824235141277313e-01 9.6766436100006104e-01 611 | <_> 612 | 613 | 0 -1 65 -7.5893187895417213e-03 614 | 615 | 8.3125269412994385e-01 -1.8382994830608368e-01 616 | <_> 617 | 618 | 0 -1 2 -8.3082821220159531e-03 619 | 620 | -9.4050985574722290e-01 2.2854590415954590e-01 621 | 622 | <_> 623 | 5 624 | -6.3720279932022095e-01 625 | 626 | <_> 627 | 628 | 0 -1 8 1.9287271425127983e-03 629 | 630 | -2.7631577849388123e-01 8.7500000000000000e-01 631 | <_> 632 | 633 | 0 -1 47 8.8485628366470337e-03 634 | 635 | -3.8179510831832886e-01 5.9248179197311401e-01 636 | <_> 637 | 638 | 0 -1 78 -6.2163383699953556e-04 639 | 640 | 6.1896896362304688e-01 -3.7254068255424500e-01 641 | <_> 642 | 643 | 0 -1 66 2.8953570872545242e-03 644 | 645 | -3.3218365907669067e-01 6.1866450309753418e-01 646 | <_> 647 | 648 | 0 -1 37 -9.7732059657573700e-03 649 | 650 | 8.9368152618408203e-01 -2.2521571815013885e-01 651 | 652 | <_> 653 | 654 | <_> 655 | 0 2 24 8 -1. 656 | <_> 657 | 8 2 8 8 3. 658 | 0 659 | <_> 660 | 661 | <_> 662 | 0 3 9 13 -1. 663 | <_> 664 | 3 3 3 13 3. 665 | 0 666 | <_> 667 | 668 | <_> 669 | 0 3 10 4 -1. 670 | <_> 671 | 0 3 5 2 2. 672 | <_> 673 | 5 5 5 2 2. 674 | 0 675 | <_> 676 | 677 | <_> 678 | 0 5 9 8 -1. 679 | <_> 680 | 3 5 3 8 3. 681 | 0 682 | <_> 683 | 684 | <_> 685 | 0 6 8 6 -1. 686 | <_> 687 | 4 6 4 6 2. 688 | 0 689 | <_> 690 | 691 | <_> 692 | 0 8 23 2 -1. 693 | <_> 694 | 0 9 23 1 2. 695 | 0 696 | <_> 697 | 698 | <_> 699 | 0 9 3 1 -1. 700 | <_> 701 | 1 9 1 1 3. 702 | 0 703 | <_> 704 | 705 | <_> 706 | 0 9 2 10 -1. 707 | <_> 708 | 1 9 1 10 2. 709 | 0 710 | <_> 711 | 712 | <_> 713 | 0 16 2 2 -1. 714 | <_> 715 | 1 16 1 2 2. 716 | 0 717 | <_> 718 | 719 | <_> 720 | 1 1 6 14 -1. 721 | <_> 722 | 3 1 2 14 3. 723 | 0 724 | <_> 725 | 726 | <_> 727 | 1 1 14 12 -1. 728 | <_> 729 | 1 5 14 4 3. 730 | 0 731 | <_> 732 | 733 | <_> 734 | 1 2 14 4 -1. 735 | <_> 736 | 1 4 14 2 2. 737 | 0 738 | <_> 739 | 740 | <_> 741 | 1 7 22 4 -1. 742 | <_> 743 | 1 9 22 2 2. 744 | 0 745 | <_> 746 | 747 | <_> 748 | 1 14 14 10 -1. 749 | <_> 750 | 1 19 14 5 2. 751 | 0 752 | <_> 753 | 754 | <_> 755 | 2 4 13 6 -1. 756 | <_> 757 | 2 6 13 2 3. 758 | 0 759 | <_> 760 | 761 | <_> 762 | 2 8 3 4 -1. 763 | <_> 764 | 3 8 1 4 3. 765 | 0 766 | <_> 767 | 768 | <_> 769 | 2 9 22 1 -1. 770 | <_> 771 | 13 9 11 1 2. 772 | 0 773 | <_> 774 | 775 | <_> 776 | 2 14 21 2 -1. 777 | <_> 778 | 2 15 21 1 2. 779 | 0 780 | <_> 781 | 782 | <_> 783 | 2 20 3 4 -1. 784 | <_> 785 | 2 22 3 2 2. 786 | 0 787 | <_> 788 | 789 | <_> 790 | 2 20 19 3 -1. 791 | <_> 792 | 2 21 19 1 3. 793 | 0 794 | <_> 795 | 796 | <_> 797 | 3 0 1 6 -1. 798 | <_> 799 | 3 2 1 2 3. 800 | 0 801 | <_> 802 | 803 | <_> 804 | 3 0 7 18 -1. 805 | <_> 806 | 3 9 7 9 2. 807 | 0 808 | <_> 809 | 810 | <_> 811 | 3 5 4 3 -1. 812 | <_> 813 | 3 6 4 1 3. 814 | 0 815 | <_> 816 | 817 | <_> 818 | 3 6 3 3 -1. 819 | <_> 820 | 3 7 3 1 3. 821 | 0 822 | <_> 823 | 824 | <_> 825 | 3 13 10 2 -1. 826 | <_> 827 | 3 14 10 1 2. 828 | 0 829 | <_> 830 | 831 | <_> 832 | 3 13 14 3 -1. 833 | <_> 834 | 3 14 14 1 3. 835 | 0 836 | <_> 837 | 838 | <_> 839 | 3 15 1 2 -1. 840 | <_> 841 | 3 16 1 1 2. 842 | 0 843 | <_> 844 | 845 | <_> 846 | 3 21 2 3 -1. 847 | <_> 848 | 3 22 2 1 3. 849 | 0 850 | <_> 851 | 852 | <_> 853 | 4 3 12 7 -1. 854 | <_> 855 | 10 3 6 7 2. 856 | 0 857 | <_> 858 | 859 | <_> 860 | 4 3 19 4 -1. 861 | <_> 862 | 4 5 19 2 2. 863 | 0 864 | <_> 865 | 866 | <_> 867 | 4 4 16 15 -1. 868 | <_> 869 | 12 4 8 15 2. 870 | 0 871 | <_> 872 | 873 | <_> 874 | 4 8 16 4 -1. 875 | <_> 876 | 12 8 8 4 2. 877 | 0 878 | <_> 879 | 880 | <_> 881 | 4 9 19 3 -1. 882 | <_> 883 | 4 10 19 1 3. 884 | 0 885 | <_> 886 | 887 | <_> 888 | 4 9 20 6 -1. 889 | <_> 890 | 4 11 20 2 3. 891 | 0 892 | <_> 893 | 894 | <_> 895 | 4 11 8 12 -1. 896 | <_> 897 | 4 15 8 4 3. 898 | 0 899 | <_> 900 | 901 | <_> 902 | 4 14 15 10 -1. 903 | <_> 904 | 4 19 15 5 2. 905 | 0 906 | <_> 907 | 908 | <_> 909 | 5 8 16 16 -1. 910 | <_> 911 | 5 16 16 8 2. 912 | 0 913 | <_> 914 | 915 | <_> 916 | 5 10 14 3 -1. 917 | <_> 918 | 5 11 14 1 3. 919 | 0 920 | <_> 921 | 922 | <_> 923 | 5 10 15 12 -1. 924 | <_> 925 | 5 14 15 4 3. 926 | 0 927 | <_> 928 | 929 | <_> 930 | 5 14 5 10 -1. 931 | <_> 932 | 5 19 5 5 2. 933 | 0 934 | <_> 935 | 936 | <_> 937 | 5 23 8 1 -1. 938 | <_> 939 | 9 23 4 1 2. 940 | 0 941 | <_> 942 | 943 | <_> 944 | 6 9 15 2 -1. 945 | <_> 946 | 6 10 15 1 2. 947 | 0 948 | <_> 949 | 950 | <_> 951 | 6 12 6 12 -1. 952 | <_> 953 | 6 12 3 6 2. 954 | <_> 955 | 9 18 3 6 2. 956 | 0 957 | <_> 958 | 959 | <_> 960 | 6 20 9 4 -1. 961 | <_> 962 | 9 20 3 4 3. 963 | 0 964 | <_> 965 | 966 | <_> 967 | 7 1 9 22 -1. 968 | <_> 969 | 7 12 9 11 2. 970 | 0 971 | <_> 972 | 973 | <_> 974 | 7 3 2 9 -1. 975 | <_> 976 | 7 6 2 3 3. 977 | 0 978 | <_> 979 | 980 | <_> 981 | 7 3 10 3 -1. 982 | <_> 983 | 12 3 5 3 2. 984 | 0 985 | <_> 986 | 987 | <_> 988 | 7 6 14 6 -1. 989 | <_> 990 | 7 8 14 2 3. 991 | 0 992 | <_> 993 | 994 | <_> 995 | 7 10 4 2 -1. 996 | <_> 997 | 9 10 2 2 2. 998 | 0 999 | <_> 1000 | 1001 | <_> 1002 | 7 13 5 3 -1. 1003 | <_> 1004 | 7 14 5 1 3. 1005 | 0 1006 | <_> 1007 | 1008 | <_> 1009 | 7 13 12 6 -1. 1010 | <_> 1011 | 7 13 6 3 2. 1012 | <_> 1013 | 13 16 6 3 2. 1014 | 0 1015 | <_> 1016 | 1017 | <_> 1018 | 7 18 10 2 -1. 1019 | <_> 1020 | 7 19 10 1 2. 1021 | 0 1022 | <_> 1023 | 1024 | <_> 1025 | 7 21 17 3 -1. 1026 | <_> 1027 | 7 22 17 1 3. 1028 | 0 1029 | <_> 1030 | 1031 | <_> 1032 | 8 1 3 21 -1. 1033 | <_> 1034 | 9 1 1 21 3. 1035 | 0 1036 | <_> 1037 | 1038 | <_> 1039 | 8 1 8 21 -1. 1040 | <_> 1041 | 12 1 4 21 2. 1042 | 0 1043 | <_> 1044 | 1045 | <_> 1046 | 8 2 10 9 -1. 1047 | <_> 1048 | 8 5 10 3 3. 1049 | 0 1050 | <_> 1051 | 1052 | <_> 1053 | 8 9 8 12 -1. 1054 | <_> 1055 | 8 13 8 4 3. 1056 | 0 1057 | <_> 1058 | 1059 | <_> 1060 | 8 11 10 1 -1. 1061 | <_> 1062 | 13 11 5 1 2. 1063 | 0 1064 | <_> 1065 | 1066 | <_> 1067 | 9 0 9 3 -1. 1068 | <_> 1069 | 9 1 9 1 3. 1070 | 0 1071 | <_> 1072 | 1073 | <_> 1074 | 9 0 15 3 -1. 1075 | <_> 1076 | 9 1 15 1 3. 1077 | 0 1078 | <_> 1079 | 1080 | <_> 1081 | 9 1 2 7 -1. 1082 | <_> 1083 | 10 1 1 7 2. 1084 | 0 1085 | <_> 1086 | 1087 | <_> 1088 | 9 1 9 6 -1. 1089 | <_> 1090 | 9 3 9 2 3. 1091 | 0 1092 | <_> 1093 | 1094 | <_> 1095 | 9 4 3 1 -1. 1096 | <_> 1097 | 10 4 1 1 3. 1098 | 0 1099 | <_> 1100 | 1101 | <_> 1102 | 9 5 4 12 -1. 1103 | <_> 1104 | 9 11 4 6 2. 1105 | 0 1106 | <_> 1107 | 1108 | <_> 1109 | 9 19 10 4 -1. 1110 | <_> 1111 | 9 21 10 2 2. 1112 | 0 1113 | <_> 1114 | 1115 | <_> 1116 | 9 20 5 3 -1. 1117 | <_> 1118 | 9 21 5 1 3. 1119 | 0 1120 | <_> 1121 | 1122 | <_> 1123 | 10 0 14 1 -1. 1124 | <_> 1125 | 17 0 7 1 2. 1126 | 0 1127 | <_> 1128 | 1129 | <_> 1130 | 10 5 3 18 -1. 1131 | <_> 1132 | 11 5 1 18 3. 1133 | 0 1134 | <_> 1135 | 1136 | <_> 1137 | 10 15 3 1 -1. 1138 | <_> 1139 | 11 15 1 1 3. 1140 | 0 1141 | <_> 1142 | 1143 | <_> 1144 | 10 21 10 3 -1. 1145 | <_> 1146 | 10 22 10 1 3. 1147 | 0 1148 | <_> 1149 | 1150 | <_> 1151 | 10 21 12 3 -1. 1152 | <_> 1153 | 10 22 12 1 3. 1154 | 0 1155 | <_> 1156 | 1157 | <_> 1158 | 11 0 6 24 -1. 1159 | <_> 1160 | 11 8 6 8 3. 1161 | 0 1162 | <_> 1163 | 1164 | <_> 1165 | 11 7 13 9 -1. 1166 | <_> 1167 | 11 10 13 3 3. 1168 | 0 1169 | <_> 1170 | 1171 | <_> 1172 | 11 10 4 6 -1. 1173 | <_> 1174 | 11 10 2 3 2. 1175 | <_> 1176 | 13 13 2 3 2. 1177 | 0 1178 | <_> 1179 | 1180 | <_> 1181 | 11 12 2 12 -1. 1182 | <_> 1183 | 11 18 2 6 2. 1184 | 0 1185 | <_> 1186 | 1187 | <_> 1188 | 11 16 9 2 -1. 1189 | <_> 1190 | 14 16 3 2 3. 1191 | 0 1192 | <_> 1193 | 1194 | <_> 1195 | 12 0 1 24 -1. 1196 | <_> 1197 | 12 8 1 8 3. 1198 | 0 1199 | <_> 1200 | 1201 | <_> 1202 | 12 4 12 16 -1. 1203 | <_> 1204 | 16 4 4 16 3. 1205 | 0 1206 | <_> 1207 | 1208 | <_> 1209 | 12 11 3 1 -1. 1210 | <_> 1211 | 13 11 1 1 3. 1212 | 0 1213 | <_> 1214 | 1215 | <_> 1216 | 12 12 6 6 -1. 1217 | <_> 1218 | 12 12 3 3 2. 1219 | <_> 1220 | 15 15 3 3 2. 1221 | 0 1222 | <_> 1223 | 1224 | <_> 1225 | 12 19 3 1 -1. 1226 | <_> 1227 | 13 19 1 1 3. 1228 | 0 1229 | <_> 1230 | 1231 | <_> 1232 | 13 0 2 3 -1. 1233 | <_> 1234 | 13 1 2 1 3. 1235 | 0 1236 | <_> 1237 | 1238 | <_> 1239 | 13 6 1 3 -1. 1240 | <_> 1241 | 13 7 1 1 3. 1242 | 0 1243 | <_> 1244 | 1245 | <_> 1246 | 13 8 9 6 -1. 1247 | <_> 1248 | 13 10 9 2 3. 1249 | 0 1250 | <_> 1251 | 1252 | <_> 1253 | 13 9 1 6 -1. 1254 | <_> 1255 | 13 11 1 2 3. 1256 | 0 1257 | <_> 1258 | 1259 | <_> 1260 | 13 10 1 3 -1. 1261 | <_> 1262 | 13 11 1 1 3. 1263 | 0 1264 | <_> 1265 | 1266 | <_> 1267 | 13 17 9 5 -1. 1268 | <_> 1269 | 16 17 3 5 3. 1270 | 0 1271 | <_> 1272 | 1273 | <_> 1274 | 13 19 2 3 -1. 1275 | <_> 1276 | 13 20 2 1 3. 1277 | 0 1278 | <_> 1279 | 1280 | <_> 1281 | 14 0 3 6 -1. 1282 | <_> 1283 | 14 3 3 3 2. 1284 | 0 1285 | <_> 1286 | 1287 | <_> 1288 | 14 6 8 6 -1. 1289 | <_> 1290 | 14 8 8 2 3. 1291 | 0 1292 | <_> 1293 | 1294 | <_> 1295 | 14 7 2 2 -1. 1296 | <_> 1297 | 14 7 1 1 2. 1298 | <_> 1299 | 15 8 1 1 2. 1300 | 0 1301 | <_> 1302 | 1303 | <_> 1304 | 14 8 10 8 -1. 1305 | <_> 1306 | 19 8 5 8 2. 1307 | 0 1308 | <_> 1309 | 1310 | <_> 1311 | 14 12 1 3 -1. 1312 | <_> 1313 | 14 13 1 1 3. 1314 | 0 1315 | <_> 1316 | 1317 | <_> 1318 | 14 19 2 5 -1. 1319 | <_> 1320 | 15 19 1 5 2. 1321 | 0 1322 | <_> 1323 | 1324 | <_> 1325 | 15 8 2 8 -1. 1326 | <_> 1327 | 15 8 1 4 2. 1328 | <_> 1329 | 16 12 1 4 2. 1330 | 0 1331 | <_> 1332 | 1333 | <_> 1334 | 15 12 1 2 -1. 1335 | <_> 1336 | 15 13 1 1 2. 1337 | 0 1338 | <_> 1339 | 1340 | <_> 1341 | 16 0 3 4 -1. 1342 | <_> 1343 | 17 0 1 4 3. 1344 | 0 1345 | <_> 1346 | 1347 | <_> 1348 | 16 5 6 14 -1. 1349 | <_> 1350 | 16 5 3 7 2. 1351 | <_> 1352 | 19 12 3 7 2. 1353 | 0 1354 | <_> 1355 | 1356 | <_> 1357 | 17 15 1 3 -1. 1358 | <_> 1359 | 17 16 1 1 3. 1360 | 0 1361 | <_> 1362 | 1363 | <_> 1364 | 18 10 1 3 -1. 1365 | <_> 1366 | 18 11 1 1 3. 1367 | 0 1368 | <_> 1369 | 1370 | <_> 1371 | 19 0 4 3 -1. 1372 | <_> 1373 | 19 1 4 1 3. 1374 | 0 1375 | <_> 1376 | 1377 | <_> 1378 | 19 5 4 4 -1. 1379 | <_> 1380 | 21 5 2 4 2. 1381 | 0 1382 | <_> 1383 | 1384 | <_> 1385 | 20 5 4 16 -1. 1386 | <_> 1387 | 22 5 2 16 2. 1388 | 0 1389 | <_> 1390 | 1391 | <_> 1392 | 20 13 4 9 -1. 1393 | <_> 1394 | 22 13 2 9 2. 1395 | 0 1396 | <_> 1397 | 1398 | <_> 1399 | 21 7 1 6 -1. 1400 | <_> 1401 | 21 10 1 3 2. 1402 | 0 1403 | <_> 1404 | 1405 | <_> 1406 | 22 2 2 11 -1. 1407 | <_> 1408 | 23 2 1 11 2. 1409 | 0 1410 | 1411 | -------------------------------------------------------------------------------- /utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/worldbank/ml4dev/d91f1b2a08067da31364dee60f07274d66929fa5/utils/__init__.py -------------------------------------------------------------------------------- /utils/geo.py: -------------------------------------------------------------------------------- 1 | from shapely.geometry import Polygon 2 | import math 3 | 4 | image_width = 1280 5 | image_height = 1280 6 | 7 | ELEMENTS_FILENAME = 'data/elements.json' 8 | WAYS_DATA_FILENAME = 'data/ways.json' 9 | 10 | # Go through the ways, build the polygon, and compute the centroid that we'll 11 | # use to download the mapbox satellite image 12 | def get_ways_data(elements, coords): 13 | ways_data = {} 14 | for element in elements: 15 | # Only process ways 16 | if element.get('type') != 'way': 17 | continue 18 | # Only process ways with 3 or more nodes, otherwise 19 | # Shapely will complain. 20 | nodes = element.get('nodes') 21 | if len(nodes) < 3: 22 | continue 23 | exterior = [(coords[node].get('lat'), coords[node].get('lon')) \ 24 | for node in nodes] 25 | # Build the polygon and compute its bbox and centroid 26 | way_polygon = Polygon(exterior) 27 | ways_data[element.get('id')] = { 28 | 'bounds': way_polygon.bounds, 29 | 'lat': way_polygon.centroid.x, 30 | 'lon': way_polygon.centroid.y} 31 | 32 | # Done 33 | return ways_data 34 | 35 | def get_rectangle(bounds): 36 | # This converts a latitude delta into an image delta. For USA, at zoom 37 | # level 19, we know that we have 0.21 meters/pixel. So, an image is showing 38 | # about 1280 pixels * 0.21 meters/pixel = 268.8 meters. 39 | # On the other hand we know that at the same angle, a degress in latlon is: 40 | # https://en.wikipedia.org/wiki/Latitude 41 | # latitude = 111,132 m 42 | # longitude = 78,847 m 43 | latitude_factor = 111132.0 / 0.21 44 | longitude_factor = 78847.0 / 0.21 45 | 46 | # Feature size 47 | feature_width = longitude_factor * math.fabs(bounds[1] - bounds[3]) 48 | feature_height = latitude_factor * math.fabs(bounds[0] - bounds[2]) 49 | if feature_width > image_width or feature_height > image_height: 50 | print '** Warning ** The feature is bigger than the image.' 51 | 52 | # CV params (int required) 53 | x = int((image_width / 2) - (feature_width / 2)) 54 | y = int((image_height / 2) - (feature_height / 2)) 55 | w = int(feature_width) 56 | h = int(feature_height) 57 | if w <= 25 or h <= 25: 58 | print '** Warning ** This image has very narrow bounds.' 59 | print bounds 60 | print x, y, w, h 61 | if x <= 0 or y <= 0 or w <= 0 or h <= 0: 62 | print '** Warning ** There is something wrong with this image bounds.' 63 | print bounds 64 | print x, y, w, h 65 | return x, y, w, h 66 | -------------------------------------------------------------------------------- /utils/mapbox_static.py: -------------------------------------------------------------------------------- 1 | ''' 2 | See this for some meta info about the basemap: 3 | http://api.tiles.mapbox.com/v4/${MAPBOX_MAPID}.json?access_token=${MAPBOX_ACCESS_TOKEN} 4 | ''' 5 | 6 | import os 7 | import urllib 8 | 9 | # Base URL 10 | MAPBOX_ENDPOINT = ( 11 | 'http://api.tiles.mapbox.com/v4/{mapid}/{lon},{lat},{zoom}' 12 | '/{width}x{height}.{format}?access_token={access_token}') 13 | 14 | # Params 15 | MAPBOX_MAPID = 'zugaldia.mfecmd32' 16 | MAPBOX_ACCESS_TOKEN = os.environ["mapbox_token"] 17 | MAPBOX_FORMAT = 'png' 18 | MAPBOX_WIDTH = '1280' 19 | MAPBOX_HEIGHT = '1280' 20 | MAPBOX_ZOOM = 19 # Max zoom 21 | 22 | 23 | class MapboxStatic(object): 24 | 25 | def __init__(self, namespace=None, root_folder=None): 26 | self._namespace = namespace or 'mapbox' 27 | self._root_folder = root_folder or '/tmp' 28 | if not os.path.isdir(self._root_folder): 29 | try: 30 | os.mkdir(self._root_folder) 31 | print '[mapbox static] Root folder created: %s' \ 32 | % self._root_folder 33 | except Exception as e: 34 | print '[mapbox static] Failed to create the root folder \ 35 | (%s): %s' % (self._root_folder, unicode(e)) 36 | 37 | def _get_filepath(self, element_id): 38 | filename = '%s_%s.%s' % (self._namespace, element_id, MAPBOX_FORMAT) 39 | return os.path.join(self._root_folder, filename) 40 | 41 | def _get_filesize(self, filepath): 42 | statinfo = os.stat(filepath) 43 | return statinfo.st_size 44 | 45 | def get_url(self, latitude, longitude): 46 | return MAPBOX_ENDPOINT.format( 47 | mapid=MAPBOX_MAPID, 48 | lon=longitude, 49 | lat=latitude, 50 | zoom=MAPBOX_ZOOM, 51 | width=MAPBOX_WIDTH, 52 | height=MAPBOX_HEIGHT, 53 | format=MAPBOX_FORMAT, 54 | access_token=MAPBOX_ACCESS_TOKEN) 55 | 56 | def download_tile(self, element_id, url): 57 | filepath = self._get_filepath(element_id=element_id) 58 | if os.path.isfile(filepath): 59 | print '[mapbox static] Tile already downloaded (%s).' % filepath 60 | return 61 | print '[mapbox static] Donwloading tile (%s).' % filepath 62 | urllib.urlretrieve(url=url, filename=filepath) 63 | 64 | # Detect if we have actual imagery here 65 | filesize = self._get_filesize(filepath=filepath) 66 | if filesize < 50000: 67 | print 'Deleting downloaded file, it looks like an empty image.' 68 | os.remove(filepath) 69 | return False 70 | return True 71 | -------------------------------------------------------------------------------- /utils/overpass_client.py: -------------------------------------------------------------------------------- 1 | from restwice import RestClient 2 | from restwice import MemcacheLocal 3 | import numpy as np 4 | 5 | OVERPASS_ENDPOINTS = { 6 | 'de': 'http://overpass-api.de/api/interpreter', 7 | 'ru': 'http://overpass.osm.rambler.ru/cgi/', 8 | 'fr': 'http://api.openstreetmap.fr/oapi/interpreter'} 9 | 10 | OVERPASS_MEMCACHE_NAMESPACE = 'overpass' 11 | OVERPASS_REQUESTS_TIMEOUT = 60 * 5 # 5 minutes 12 | 13 | 14 | class OverpassClient(object): 15 | def __init__(self, endpoint='de'): 16 | self._rest_client = RestClient() 17 | 18 | # The DE endpoint was randomly failing to us, and RU never worked. 19 | # From this option we can better control the endpoint, and the queries 20 | # will be automatically cached independently. 21 | endpoint_url = OVERPASS_ENDPOINTS.get(endpoint) 22 | self._rest_client.set_endpoint(endpoint=endpoint_url) 23 | 24 | # Set better timeout value 25 | self._client_settings = {'timeout': OVERPASS_REQUESTS_TIMEOUT} 26 | 27 | # Set local caching 28 | memcache_client = MemcacheLocal(root_folder='_cache_overpass') 29 | self._rest_client.enable_cache( 30 | memcache_client=memcache_client, 31 | memcache_namespace=OVERPASS_MEMCACHE_NAMESPACE) 32 | 33 | def _get_data(self, ql_text=None): 34 | return '[out:json];' + ql_text 35 | 36 | def do_query(self, ql_text=None): 37 | data = self._get_data(ql_text=ql_text) 38 | self._rest_client.set_data(data={'data': data}) 39 | result, _ = self._rest_client.do_get( 40 | json_response=True, 41 | json_request=False, 42 | client_settings=self._client_settings) 43 | return result 44 | 45 | def get_bbox_elements(self, ql_template, bb_s, bb_w, bb_n, bb_e, samples=2): 46 | # Samples subdivides the bbox into smaller bboxes to make sure the 47 | # request doesn't timeout. For linspace below to work, we need this 48 | # number to be 2 or greater. 49 | assert samples >= 2 50 | 51 | # Track iterations 52 | total_iterations = (samples - 1) ** 2 53 | current_iteration = 0 54 | 55 | # Build ranges 56 | lat_range = np.linspace(bb_s, bb_n, num=samples) 57 | lon_range = np.linspace(bb_w, bb_e, num=samples) 58 | 59 | # Build the array 60 | elements = [] 61 | for lat_index in range(samples - 1): 62 | for lon_index in range(samples - 1): 63 | current_iteration += 1 64 | print 'Iteration %d/%d...' % ( 65 | current_iteration, total_iterations) 66 | 67 | # Get the values and build query 68 | query_bb_s = lat_range[lat_index] 69 | query_bb_n = lat_range[lat_index + 1] 70 | query_bb_w = lon_range[lon_index] 71 | query_bb_e = lon_range[lon_index + 1] 72 | ql_text = ql_template.format( 73 | query_bb_s=query_bb_s, query_bb_w=query_bb_w, 74 | query_bb_n=query_bb_n, query_bb_e=query_bb_e) 75 | 76 | # Safe to run multimple times, results are cached 77 | result = self.do_query(ql_text=ql_text) 78 | partial_elements = result.get('elements', []) 79 | print 'Partials elements found: %d' % len(partial_elements) 80 | elements += partial_elements 81 | 82 | # Done 83 | return elements 84 | --------------------------------------------------------------------------------