File size: 2,175 Bytes
0e66889
 
 
 
 
 
 
c205b8f
2875be3
 
 
 
0e66889
 
a3281f6
b9cc655
c205b8f
 
 
775d1c1
a3281f6
 
775d1c1
a3281f6
 
 
 
c205b8f
a3281f6
c205b8f
775d1c1
c205b8f
c9ec478
 
c205b8f
 
 
c9ec478
c205b8f
0e66889
b9cc655
 
c9ec478
c205b8f
c9ec478
 
c205b8f
0e66889
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import os
os.system("pip install xtcocotools>=1.12")
os.system("pip install 'mmengine>=0.6.0'")
os.system("pip install 'mmcv>=2.0.0rc4,<2.1.0'")
os.system("pip install 'mmdet>=3.0.0,<4.0.0'")
os.system("pip install 'mmpose'")

from keypoints_extraction import predict_poses
from calculate_measures import calculate_all_measures
from calculate_masks import calculate_seg_mask
from select_body_shape import select_body_shape

import gradio as gr

def generate_output(front_img_path, side_img_path):
    # TODO: These file names will need to be unique in case of multiple requests at once, and they will need to be deleted after the function is done.
    keypoint_results = predict_poses(front_img_path, "front.jpg", side_img_path, "side.jpg")
    front_keypoint_result = keypoint_results[0]
    side_keypoint_result = keypoint_results[1]

    front_image = front_keypoint_result[0]
    side_image = side_keypoint_result[0]

    front_keypoint_data = front_keypoint_result[1]
    side_keypoint_data = side_keypoint_result[1]

    front_seg_mask = calculate_seg_mask(front_img_path)
    side_seg_mask = calculate_seg_mask(side_img_path)

    measures_data_frame = calculate_all_measures(front_image, side_image, front_keypoint_data, side_keypoint_data, front_seg_mask, side_seg_mask)

    # We can't normalise the measures because we don't have multiple images in this case, so just use the measures directly.
    normalised_measures_data_frame = measures_data_frame

    body_shape_result = select_body_shape(normalised_measures_data_frame)
    selected_body_shape = body_shape_result[0]
    calculation_information = body_shape_result[1]

    return (selected_body_shape, calculation_information)

input_image_front = gr.inputs.Image(type='pil', label="Front Image")
input_image_side = gr.inputs.Image(type='pil', label="Side Image")
output_body_shape = gr.outputs.Textbox(label="Body Shape")
output_calculation_information = gr.outputs.Textbox(label="Calculation Information")

title = "ShopByShape"
iface = gr.Interface(fn=generate_output, inputs=[input_image_front, input_image_side], outputs=[output_body_shape, output_calculation_information], title=title)
iface.launch()