154 lines
7.1 KiB
Python
154 lines
7.1 KiB
Python
|
|
import os
|
|||
|
|
from lmm_utils.core import MMUA
|
|||
|
|
import shutil
|
|||
|
|
from lmm_utils.projector import input_caption2random_default_cption
|
|||
|
|
import json
|
|||
|
|
import time
|
|||
|
|
from sim_utils import modelandreturn_picture_path, garmentyaml_folder2json_folder
|
|||
|
|
from lmm_utils.predict_garmentcode_picture import Predictor
|
|||
|
|
|
|||
|
|
|
|||
|
|
def category2yaml2json(
|
|||
|
|
category,
|
|||
|
|
category_data,
|
|||
|
|
final_json_path=None,
|
|||
|
|
sim_bool=False,
|
|||
|
|
id="root",
|
|||
|
|
api_key=None,
|
|||
|
|
base_url=None,
|
|||
|
|
model=None,
|
|||
|
|
dsl_ga=None,
|
|||
|
|
):
|
|||
|
|
"""Specify the different types of data, pass in the data, and get a json file to generate the result for the final boilerplate.
|
|||
|
|
Args:
|
|||
|
|
category(string): Specify the type of input 'picture' 'text' 'list'
|
|||
|
|
category_data: List or ImagePath(String) or Text(String) Enter different specific data depending on the type
|
|||
|
|
final_json_path (string): specifies the final JSON path,
|
|||
|
|
At the same time, the json file of the template data, the template image, the converted stylexd format, and the template generation time will be generated in the json folder
|
|||
|
|
sim_bool (bool): Specifies whether simulation is required
|
|||
|
|
id(string): Create a folder under the user_data based on the ID you entered temp_user_folder_for{id}gpt contains all the data related to the template generated this time.
|
|||
|
|
api_key (string): Specifies the API to access the model, if the input is None, the default API will be called
|
|||
|
|
base_url (string): Specifies the URL to be visited, if the input is None, the default API will be called
|
|||
|
|
model(string): Specifies the model to be accessed, if the input is None, the default model will be called
|
|||
|
|
Return :
|
|||
|
|
json_list (list): the list selected by the large model
|
|||
|
|
response(string): the reply of the large model, removing the list content in the reply
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
mmua_llm = MMUA(api_key=api_key, base_url=base_url, model=model)
|
|||
|
|
if dsl_ga is None:
|
|||
|
|
dsl_ga = Predictor()
|
|||
|
|
gpt_respond = None
|
|||
|
|
start_time = time.time()
|
|||
|
|
json_list = []
|
|||
|
|
picture_path = None
|
|||
|
|
if category == "picture": # The corresponding category_data is the image path
|
|||
|
|
json_list, gpt_respond = mmua_llm.picture_gpt(category_data)
|
|||
|
|
picture_path = category_data
|
|||
|
|
if category == "text": # The text corresponding to the input
|
|||
|
|
json_list, gpt_respond = mmua_llm.text_gpt(category_data)
|
|||
|
|
if category == "list": # It's the list of captions
|
|||
|
|
json_list = category_data
|
|||
|
|
caption_json_list = json_list
|
|||
|
|
json_list = input_caption2random_default_cption(json_list)
|
|||
|
|
dsl_ga.caption_json(caption=json_list, id=id,picture_path=picture_path)
|
|||
|
|
end_time = time.time()
|
|||
|
|
|
|||
|
|
pattern_generate_time = end_time - start_time
|
|||
|
|
print(pattern_generate_time)
|
|||
|
|
|
|||
|
|
temp_json_file_path = (
|
|||
|
|
f"user_data/temp_user_folder_for{id}gpt/now_{id}/now_{id}_specification.json"
|
|||
|
|
)
|
|||
|
|
if final_json_path is not None:
|
|||
|
|
final_json_dirname = os.path.dirname(final_json_path)
|
|||
|
|
os.makedirs(final_json_dirname, exist_ok=True)
|
|||
|
|
|
|||
|
|
with open(f"{final_json_dirname}/pattern_generate_time.txt", "a") as f:
|
|||
|
|
f.write(f"pattern_generate_time:{pattern_generate_time:.4f} s\n")
|
|||
|
|
|
|||
|
|
with open(f"{final_json_dirname}/caption.json", "w") as file:
|
|||
|
|
json.dump(caption_json_list, file, indent=4)
|
|||
|
|
|
|||
|
|
with open(f"{final_json_dirname}/gpt_respond.txt", "w") as file:
|
|||
|
|
file.write(gpt_respond)
|
|||
|
|
f"user_data/temp_user_folder_for{id}gpt"
|
|||
|
|
# Define the source file path
|
|||
|
|
|
|||
|
|
print("temp_json_file_path", temp_json_file_path)
|
|||
|
|
# print("temp_json_file_path",temp_json_file_path)
|
|||
|
|
|
|||
|
|
# Define the target file path, including the new file name
|
|||
|
|
destination = final_json_path
|
|||
|
|
|
|||
|
|
# Copy the file and retain the metadata, while modifying the file name
|
|||
|
|
shutil.copy2(temp_json_file_path, destination)
|
|||
|
|
if category == "text":
|
|||
|
|
with open(f"{final_json_dirname}/user_input.txt", "w") as file:
|
|||
|
|
# Write text
|
|||
|
|
file.write(category_data)
|
|||
|
|
if category == "picture":
|
|||
|
|
image_path = category_data
|
|||
|
|
# Next, save the original image to the folder where the json path is located, and name it the same as this json file, but with a different extension
|
|||
|
|
_, picture_file_extension = os.path.splitext(image_path)
|
|||
|
|
picture_file_path, _ = os.path.splitext(final_json_path)
|
|||
|
|
# Composite the new image path, here the name of the image is changed
|
|||
|
|
picture_path = picture_file_path + picture_file_extension
|
|||
|
|
shutil.copy2(image_path, picture_path)
|
|||
|
|
|
|||
|
|
filename = os.path.splitext(os.path.basename(final_json_path))[0]
|
|||
|
|
|
|||
|
|
if category == "list": pass
|
|||
|
|
if sim_bool:
|
|||
|
|
modelandreturn_picture_path(temp_json_file_path)
|
|||
|
|
model_png = f"user_data/temp_user_folder_for{id}gpt/now_{id}/now_{id}/now_{id}_render_front.png"
|
|||
|
|
#Copy the mockup to the destination folder
|
|||
|
|
model_png_end_path = final_json_dirname + "/sim_garment_front.png"
|
|||
|
|
shutil.copy2(model_png, model_png_end_path)
|
|||
|
|
model_png = f"user_data/temp_user_folder_for{id}gpt/now_{id}/now_{id}/now_{id}_render_back.png"
|
|||
|
|
# Copy the mockup to the destination folder
|
|||
|
|
model_png_end_path = final_json_dirname + "/sim_garment_back.png"
|
|||
|
|
|
|||
|
|
shutil.copy2(model_png, model_png_end_path)
|
|||
|
|
|
|||
|
|
# Duplicate the PNG image of the plate
|
|||
|
|
|
|||
|
|
pattern_png = (
|
|||
|
|
f"user_data/temp_user_folder_for{id}gpt/now_{id}/now_{id}_pattern.png"
|
|||
|
|
)
|
|||
|
|
pattern_png_end_path = final_json_dirname + f"/{filename}_pattern.png"
|
|||
|
|
shutil.copy2(pattern_png, pattern_png_end_path)
|
|||
|
|
|
|||
|
|
# Copy the yaml file
|
|||
|
|
yaml_file = f"user_data/temp_user_folder_for{id}gpt//now_{id}/now_{id}.yaml"
|
|||
|
|
yaml_end_path = final_json_dirname + f"/{filename}.yaml"
|
|||
|
|
shutil.copy2(yaml_file, yaml_end_path)
|
|||
|
|
if final_json_path is None:
|
|||
|
|
temp_json_dirname = os.path.dirname(temp_json_file_path)
|
|||
|
|
with open(f"{temp_json_dirname}/pattern_generate_time.txt", "a") as f:
|
|||
|
|
f.write(f"pattern_generate_time:{pattern_generate_time:.4f} s\n")
|
|||
|
|
|
|||
|
|
with open(f"{temp_json_dirname}/caption.json", "w") as file:
|
|||
|
|
json.dump(caption_json_list, file, indent=4)
|
|||
|
|
|
|||
|
|
with open(f"{temp_json_dirname}/gpt_respond.txt", "w") as file:
|
|||
|
|
file.write(gpt_respond)
|
|||
|
|
|
|||
|
|
if category == "text":
|
|||
|
|
with open(f"{temp_json_dirname}/user_input.txt", "w") as file:
|
|||
|
|
# Write text
|
|||
|
|
file.write(category_data)
|
|||
|
|
if category == "picture":
|
|||
|
|
image_path = category_data
|
|||
|
|
# Next, save the original image to the folder where the json path is located, and name it the same as this json file, but with a different extension
|
|||
|
|
_, picture_file_extension = os.path.splitext(image_path)
|
|||
|
|
picture_file_path, _ = os.path.splitext(temp_json_file_path)
|
|||
|
|
# Composite the new image path, here the name of the image is changed
|
|||
|
|
picture_path = picture_file_path + picture_file_extension
|
|||
|
|
|
|||
|
|
shutil.copy2(image_path, picture_path)
|
|||
|
|
if sim_bool:
|
|||
|
|
modelandreturn_picture_path(temp_json_file_path)
|
|||
|
|
|
|||
|
|
return json_list, gpt_respond
|