File size: 3,204 Bytes
0c1807e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import gradio as gr
import json
from PromptIQA import run_promptIQA

class Main_ui():
    def __init__(self) -> None: # stage_Koniq
        self.json_path = 'example.json'
        self.promptiqa = run_promptIQA.PromptIQA()
    
    def load_example(self):
        with open(self.json_path, 'r') as f:
            info = json.load(f)
        
        examples = []
        remarks = []
        
        for exp in info:
            ISPP = exp['ISPP']
            Image = exp['Image']
            Remark = exp['Remark']
            
            image, score = [], []
            for ISP_Image, ISP_Score in ISPP:
                image.append(ISP_Image)
                score.append(float(ISP_Score))
            example = [item for pair in zip(image, score) for item in pair]
                
            example.append(Image[0])
            example.append(float(Image[1]))
            
            examples.append(example)
            remarks.append(Remark)
        
        return examples, remarks
            
    def load_demo(self):
        def get_iq_score(*args):
            ISPP_I, ISPP_S, image = args[:10], args[10:20], args[-1]
            res = self.promptiqa.run(ISPP_I, ISPP_S, image)
            return res
            
        image_components = []
        score_components = []

        with gr.Blocks() as demo:
            gr.Markdown("# PromptIQA: Boosting the Performance and Generalization for No-Reference Image Quality Assessment via Prompts")
            gr.Markdown("## 1. Upload the Image-Score Pairs Prompts")
            
            ISP_idx = 1
            for row_num in [10]:
                with gr.Row():
                    for i in range(row_num):
                        with gr.Column(scale=1):
                            ISP_Image = gr.Image(label=f'Image {ISP_idx}', width=448, height=448)
                            ISP_Score = gr.Slider(0, 1, label=f"Score {ISP_idx}")
                            ISP_idx += 1
                            
                            image_components.append(ISP_Image)
                            score_components.append(ISP_Score)
                gr.Markdown("---------------------------------------")
            
            gr.Markdown("## 2. Upload the image to be evaluated.")
            with gr.Row():
                Image_To_Be_Evaluated = gr.Image(label=f'Image To Be Evaluated.', width=512, height=512)
                with gr.Column():
                    quality_score = gr.Textbox(label='Predicted Quality Score')
                    pre_button = gr.Button("Get Quality Score")
                    
            pre_button.click(get_iq_score, inputs=image_components + score_components + [Image_To_Be_Evaluated], outputs=[quality_score])
        
            examples, remarks = self.load_example()
            
            gr.Markdown("<font color=red size=72>Examples</font>")
            for idx, (remark, example) in enumerate(zip(remarks, examples)):
                gr.Markdown(f"### Example{idx + 1}: {remark}")
                gr.Examples(examples=[example], inputs=[item for pair in zip(image_components, score_components) for item in pair] + [Image_To_Be_Evaluated, quality_score])


        return demo