File size: 2,546 Bytes
f318440
 
 
 
 
 
 
7dd488b
f318440
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51d4b3f
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
import os
import time
import logging
import numpy as np
import keras.optimizers
import cv2
import gradio as gr
import Network
import utls

class ImageProcessor:

    def __init__(self, model_name):
        self.model_name = model_name
        self.mbllen = Network.build_mbllen((None, None, 3))
        self.mbllen.load_weights(f'{model_name}.h5')
        self.opt = keras.optimizers.Adam(lr=2 * 1e-04, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
        self.mbllen.compile(loss='mse', optimizer=self.opt)

    def process_image(self, image, highpercent, lowpercent, gamma, maxrange):
        img_A = np.array(image) / 255.0
        img_A = img_A[np.newaxis, :]

        maxrange /= 10.
        hsvgamma = gamma / 10.

        out_pred = self.mbllen.predict(img_A)

        fake_B = out_pred[0, :, :, :3]
        fake_B = self.adjust_image(fake_B, maxrange, highpercent, lowpercent, hsvgamma)

        return fake_B

    def adjust_image(self, fake_B, maxrange, highpercent, lowpercent, hsvgamma):
        gray_fake_B = fake_B[:, :, 0] * 0.299 + fake_B[:, :, 1] * 0.587 + fake_B[:, :, 1] * 0.114
        percent_max = sum(sum(gray_fake_B >= maxrange)) / sum(sum(gray_fake_B <= 1.0))
        max_value = np.percentile(gray_fake_B[:], highpercent)
        if percent_max < (100-highpercent)/100.:
            scale = maxrange / max_value
            fake_B = fake_B * scale
            fake_B = np.minimum(fake_B, 1.0)

        gray_fake_B = fake_B[:,:,0]*0.299 + fake_B[:,:,1]*0.587 + fake_B[:,:,1]*0.114
        sub_value = np.percentile(gray_fake_B[:], lowpercent)
        fake_B = (fake_B - sub_value) * (1./(1-sub_value))

        imgHSV = cv2.cvtColor(fake_B, cv2.COLOR_RGB2HSV)
        H, S, V = cv2.split(imgHSV)
        S = np.power(S, hsvgamma)
        imgHSV = cv2.merge([H, S, V])
        fake_B = cv2.cvtColor(imgHSV, cv2.COLOR_HSV2RGB)
        fake_B = np.minimum(fake_B, 1.0)

        return fake_B

if __name__ == "__main__":
    logging.basicConfig(filename='image_processor.log', level=logging.INFO)

    image_processor = ImageProcessor(model_name='Syn_img_lowlight_withnoise')
    iface = gr.Interface(
    image_processor.process_image,
    [
        gr.inputs.Image(shape=(None, None)),  # Corrected line
        gr.inputs.Slider(85, 100, default=95, label="High Percent"),
        gr.inputs.Slider(0, 100, default=5, label="Low Percent"),
        gr.inputs.Slider(6, 10, default=8, label="Gamma"),
        gr.inputs.Slider(0, 20, default=8, label="Max Range"),
    ],
    gr.outputs.Image(type="numpy"),
)



    iface.launch()