Spaces:
Running
Running
import sys | |
assert sys.version_info >= (3, 7), 'ordered dict is required' | |
import os | |
import argparse | |
import re | |
from tqdm import tqdm | |
def read_images_meta(images_txt_path): | |
images_meta = {} | |
with open(images_txt_path, "r") as fid: | |
line = fid.readline() | |
assert line == '# Image list with two lines of data per image:\n' | |
line = fid.readline() | |
assert line == '# IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME\n' | |
line = fid.readline() | |
assert line == '# POINTS2D[] as (X, Y, POINT3D_ID)\n' | |
line = fid.readline() | |
assert re.search('^# Number of images: \d+, mean observations per image: [-+]?\d*\.\d+|\d+\n$', line) | |
num_images, mean_ob_per_img = re.findall(r"[-+]?\d*\.\d+|\d+", line) | |
num_images = int(num_images) | |
mean_ob_per_img = float(mean_ob_per_img) | |
for _ in tqdm(range(num_images), desc='reading images meta'): | |
l = fid.readline() | |
elems = l.split() | |
image_id = int(elems[0]) | |
l2 = fid.readline() | |
images_meta[image_id] = [l, l2] | |
return images_meta | |
def read_header(images_txt_path): | |
header = [] | |
with open(images_txt_path, "r") as fid: | |
line = fid.readline() | |
assert line == '# Image list with two lines of data per image:\n' | |
header.append(line) | |
line = fid.readline() | |
assert line == '# IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME\n' | |
header.append(line) | |
line = fid.readline() | |
assert line == '# POINTS2D[] as (X, Y, POINT3D_ID)\n' | |
header.append(line) | |
line = fid.readline() | |
assert re.search('^# Number of images: \d+, mean observations per image: [-+]?\d*\.\d+|\d+\n$', line) | |
header.append(line) | |
return header | |
def export_images_txt(save_to, header, content): | |
assert not os.path.isfile(save_to), 'you are overriding existing files' | |
with open(save_to, "w") as fid: | |
for l in header: | |
fid.write(l) | |
for k, item in content.items(): | |
for l in item: | |
fid.write(l) | |
def main(opt): | |
reference = read_images_meta(opt.reference_images_txt) | |
unordered = read_images_meta(opt.unordered_images_txt) | |
ordered = {} | |
for k in reference.keys(): | |
ordered[k] = unordered[k] | |
header = read_header(opt.unordered_images_txt) | |
export_images_txt(opt.save_to, header, ordered) | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser() | |
parser.add_argument('--reference_images_txt', type=str, default=None, required=True) | |
parser.add_argument('--unordered_images_txt', type=str, default=None, required=True) | |
parser.add_argument('--save_to', type=str, default=None, required=True) | |
opt = parser.parse_args() | |
main(opt) | |