Spaces:
Sleeping
Sleeping
File size: 3,875 Bytes
6e2dee6 b6bd9ea 6e2dee6 b6bd9ea 6e2dee6 b6bd9ea 6e2dee6 b6bd9ea 6e2dee6 b6bd9ea 6e2dee6 b6bd9ea | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | import numpy as np
import cv2
import glob
from pathlib import Path
from matplotlib import pyplot as plt
from rescale import *
from slid import detect_lines
from laps import LAPS
from llr import LLR, llr_pad
RAW_DATA_FOLDER = './data/raw/games/'
PREPROCESSED_FOLDER = './data/preprocessed/games/'
def preprocess_image(path, final_folder="", filename="", save=False):
res = cv2.imread(path)[..., ::-1]
for _ in range(2):
img, shape, scale = image_resize(res)
lines = detect_lines(img)
lattice_points = LAPS(img, lines)
inner_points = LLR(img, lattice_points, lines)
four_points = llr_pad(inner_points, img)
try:
res = crop(res, four_points, scale)
except:
print("WARNING: couldn't crop around outer points")
res = crop(
res, inner_points, scale)
if save:
Path(final_folder).mkdir(parents=True, exist_ok=True)
plt.imsave("%s/%s" % (final_folder, filename), res)
return res
def preprocess_single_image(game_name, version, image_number):
raw_path = RAW_DATA_FOLDER + '%s/%s/%i.*' % (game_name, version, image_number)
final_folder = PREPROCESSED_FOLDER + "%s/%s/" % (game_name, version)
matching_files = glob.glob(raw_path)
if not matching_files:
print(f"ERROR: No image found at {raw_path}")
return False
if len(matching_files) > 1:
print(f"WARNING: Multiple files found, using first one: {matching_files[0]}")
path = matching_files[0]
print(f"Processing: {path}")
try:
preprocess_image(path, final_folder=final_folder,
filename="%i.png" % image_number, save=True)
print(f"✓ Successfully saved to {final_folder}{image_number}.png")
return True
except Exception as e:
print(f"✗ ERROR processing image: {e}")
import traceback
traceback.print_exc()
return False
def preprocess_multiple_images(images_list):
total = len(images_list)
success = 0
failed = []
print(f"Processing {total} images...")
for game_name, version, img_num in images_list:
print(f"\n[{success + len(failed) + 1}/{total}] {game_name}/{version}/image {img_num}")
if preprocess_single_image(game_name, version, img_num):
success += 1
else:
failed.append((game_name, version, img_num))
print(f"\n{'='*50}")
print(f"Summary: {success}/{total} images processed successfully")
if failed:
print(f"Failed images ({len(failed)}):")
for game, ver, num in failed:
print(f" - {game}/{ver}/image {num}")
def preprocess_games(game_list):
for game_name in game_list:
for ver in ['orig', 'rev']:
img_filename_list = []
folder_name = RAW_DATA_FOLDER + '%s/%s/*' % (game_name, ver)
for path_name in glob.glob(folder_name):
img_filename_list.append(path_name)
final_folder = PREPROCESSED_FOLDER + "%s/%s/" % (game_name, ver)
count = 0
img_filename_list.sort(key=lambda s: int(
s.split('/')[-1].split('.')[0]))
for path in img_filename_list:
count += 1
preprocess_image(path, final_folder=final_folder,
filename="%i.png" % count, save=True)
if count > 0:
print("Done saving in %s." % final_folder)
else:
print("No images found in %s" % folder_name)
if __name__ == '__main__':
# deja fait: carlsen_anand_2014, carlsen_gukesh_2025 vachier-lagrave_carlsen_2023 david_vachier-lagrave_2014
# game_list = ['david_vachier-lagrave_2014']
# preprocess_games(game_list)
preprocess_single_image('vachier-lagrave_carlsen_2023', 'rev', 57)
|