import gradio as gr import os import wget import subprocess subprocess.call(['pip', 'install', 'git+https://github.com/facebookresearch/detectron2@main#subdirectory=projects/DensePose']) from helpers.processor import TextureProcessor def image_processing(person_img, model_img, request: gr.Request): if request: print("IP address: ", request.client.host) return texture_processor.extract(person_img, model_img) def load_model(current_path): data_path = os.path.join(current_path, 'data') if not os.path.isdir(data_path): os.mkdir(data_path) url = "https://raw.githubusercontent.com/facebookresearch/detectron2/main/projects/DensePose/configs/densepose_rcnn_R_50_FPN_WC1M_s1x.yaml" wget.download(url, os.path.join(data_path, 'config.yaml')) url = "https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_WC1M_s1x/217144516/model_final_48a9d9.pkl" wget.download(url, os.path.join(data_path, 'weights.pkl')) url = "https://raw.githubusercontent.com/facebookresearch/detectron2/main/projects/DensePose/configs/Base-DensePose-RCNN-FPN.yaml" wget.download(url, os.path.join(data_path, 'Base-DensePose-RCNN-FPN.yaml')) current_path = os.getcwd() load_model(current_path) densepose_config = os.path.join(current_path, 'data', 'config.yaml') densepose_weights = os.path.join(current_path, 'data', 'weights.pkl') texture_processor = TextureProcessor(densepose_config, densepose_weights) inputs = [ gr.inputs.Image(label="Person Image", type='numpy'), gr.inputs.Image(label="Model Image (with clothes)", type='numpy') ] outputs = gr.outputs.Image(label="Result Image", type='numpy') title = "JustClothify" description = "Upload an image of a person and an image of a model with clothes, the system will generate an image of a person wearing these clothes." gr.Interface( fn=image_processing, inputs=inputs, outputs=outputs, theme='soft', title=title, description=description).launch()