|
from __future__ import absolute_import |
|
from __future__ import print_function |
|
|
|
import os.path |
|
from os.path import basename |
|
|
|
from classes.Sampler import * |
|
from classes.model.pix2code2 import * |
|
|
|
|
|
def dsl_code_generation(input_image): |
|
trained_weights_path = "classes/model/bin" |
|
trained_model_name = "pix2code2" |
|
input_path = input_image |
|
output_path = "data/output/" |
|
search_method = "greedy" |
|
meta_dataset = np.load("{}/meta_dataset.npy".format(trained_weights_path), allow_pickle=True) |
|
input_shape = meta_dataset[0] |
|
output_size = meta_dataset[1] |
|
|
|
model = pix2code2(input_shape, output_size, trained_weights_path) |
|
model.load(trained_model_name) |
|
|
|
sampler = Sampler(trained_weights_path, input_shape, output_size, CONTEXT_LENGTH) |
|
|
|
file_name = 'input_image_from_interface.png' |
|
file_name = basename(file_name)[:basename(file_name).find(".")] |
|
evaluation_img = Utils.get_preprocessed_img(input_path, IMAGE_SIZE) |
|
|
|
if search_method == "greedy": |
|
result, _ = sampler.predict_greedy(model, np.array([evaluation_img])) |
|
print("Result greedy: \n {}".format(result)) |
|
|
|
with open("{}/{}.gui".format(output_path, file_name), 'w') as out_f: |
|
out_f.write(result.replace(START_TOKEN, "").replace(END_TOKEN, "")) |
|
|
|
return file_name, output_path |
|
|
|
|
|
def compile_gui(file_path, filename): |
|
from os.path import basename |
|
from compiler.Utils import Utils |
|
from compiler.Compiler import Compiler |
|
|
|
input_path = (file_path+filename) |
|
|
|
|
|
file_ = os.path.basename(input_path) |
|
|
|
file_ = os.path.splitext(file_)[0] |
|
|
|
file_ = "data/output/" + file_ + ".gui" |
|
|
|
input_file = file_ |
|
|
|
FILL_WITH_RANDOM_TEXT = True |
|
TEXT_PLACE_HOLDER = "[]" |
|
|
|
dsl_path = "compiler/assets/web-dsl-mapping.json" |
|
compiler = Compiler(dsl_path) |
|
|
|
def render_content_with_text(key, value): |
|
if FILL_WITH_RANDOM_TEXT: |
|
if key.find("btn") != -1: |
|
value = value.replace(TEXT_PLACE_HOLDER, Utils.get_random_text()) |
|
elif key.find("title") != -1: |
|
value = value.replace(TEXT_PLACE_HOLDER, Utils.get_random_text(length_text=5, space_number=0)) |
|
elif key.find("text") != -1: |
|
value = value.replace(TEXT_PLACE_HOLDER, |
|
Utils.get_random_text(length_text=56, space_number=7, with_upper_case=False)) |
|
return value |
|
|
|
file_uid = basename(input_file)[:basename(input_file).find(".")] |
|
path = input_file[:input_file.find(file_uid)] |
|
|
|
input_file_path = "{}{}.gui".format(path, file_uid) |
|
output_file_path = "{}{}.html".format(path, file_uid) |
|
|
|
html_code = compiler.compile(input_file_path, output_file_path, rendering_function=render_content_with_text) |
|
print("Generated code is compiled..!!") |
|
return html_code |
|
|
|
|
|
def main_method(input_image_from_interface): |
|
file_name, file_output_path= dsl_code_generation(input_image_from_interface) |
|
result = compile_gui(file_output_path, file_name) |
|
return result |
|
|