Jimmyzheng-10's picture
Add app.py and the screencoder repo
a383d0e
raw
history blame
2.38 kB
import os
import pandas as pd
import json
from os.path import join as pjoin
import time
import cv2
def save_corners(file_path, corners, compo_name, clear=True):
try:
df = pd.read_csv(file_path, index_col=0)
except:
df = pd.DataFrame(columns=['component', 'x_max', 'x_min', 'y_max', 'y_min', 'height', 'width'])
if clear:
df = df.drop(df.index)
for corner in corners:
(up_left, bottom_right) = corner
c = {'component': compo_name}
(c['y_min'], c['x_min']) = up_left
(c['y_max'], c['x_max']) = bottom_right
c['width'] = c['y_max'] - c['y_min']
c['height'] = c['x_max'] - c['x_min']
df = df.append(c, True)
df.to_csv(file_path)
def save_corners_json(file_path, compos):
img_shape = compos[0].image_shape
output = {'img_shape': img_shape, 'compos': []}
f_out = open(file_path, 'w')
for compo in compos:
c = {'id': compo.id, 'class': compo.category}
(c['column_min'], c['row_min'], c['column_max'], c['row_max']) = compo.put_bbox()
c['width'] = compo.width
c['height'] = compo.height
output['compos'].append(c)
json.dump(output, f_out, indent=4)
def save_clipping(org, output_root, corners, compo_classes, compo_index):
if not os.path.exists(output_root):
os.mkdir(output_root)
pad = 2
for i in range(len(corners)):
compo = compo_classes[i]
(up_left, bottom_right) = corners[i]
(col_min, row_min) = up_left
(col_max, row_max) = bottom_right
col_min = max(col_min - pad, 0)
col_max = min(col_max + pad, org.shape[1])
row_min = max(row_min - pad, 0)
row_max = min(row_max + pad, org.shape[0])
# if component type already exists, index increase by 1, otherwise add this type
compo_path = pjoin(output_root, compo)
if compo_classes[i] not in compo_index:
compo_index[compo_classes[i]] = 0
if not os.path.exists(compo_path):
os.mkdir(compo_path)
else:
compo_index[compo_classes[i]] += 1
clip = org[row_min:row_max, col_min:col_max]
cv2.imwrite(pjoin(compo_path, str(compo_index[compo_classes[i]]) + '.png'), clip)
def build_directory(directory):
if not os.path.exists(directory):
os.mkdir(directory)
return directory