File size: 2,330 Bytes
eab0c71
 
 
1ffcb74
47cc597
1ffcb74
eab0c71
 
 
 
 
 
 
 
 
 
47cc597
 
 
 
 
 
 
 
 
 
 
eab0c71
 
 
 
47cc597
 
 
 
eab0c71
47cc597
 
 
 
 
 
 
 
eab0c71
 
 
 
 
 
 
 
 
 
47cc597
 
 
 
 
 
 
eab0c71
1ffcb74
47cc597
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
import tensorflow as tf
import tensorflow_hub as hub
import numpy as np
import gradio as gr
import cv2

# Carrega o modelo de transferência de estilo pré-treinado
style_transfer_model = hub.load('https://tfhub.dev/google/magenta/arbitrary-image-stylization-v1-256/2')

def load_image(image):
    # Função para processar a imagem para o modelo
    image = image.astype(np.float32)[np.newaxis, ...] / 255.
    if image.shape[-1] == 4:
        image = image[..., :3]
    return image

def interpolate_images(baseline, target, alpha):
    return baseline + alpha * (target - baseline)

def apply_sharpness(image, intensity):
    kernel = np.array([[0, -intensity, 0],
                       [-intensity, 1 + 4 * intensity, -intensity],
                       [0, -intensity, 0]])
    sharp_image = cv2.filter2D(image, -1, kernel)
    return np.clip(sharp_image, 0, 255)

def style_transfer(content_image, style_image, style_density, content_sharpness):
    # Processa as imagens
    content_image = load_image(content_image)
    style_image = load_image(style_image)

    # Aplica nitidez na imagem de conteúdo antes da transferência de estilo
    content_image_sharp = apply_sharpness(content_image[0], intensity=content_sharpness)
    content_image_sharp = content_image_sharp[np.newaxis, ...]

    # Executa a transferência de estilo
    stylized_image = style_transfer_model(tf.constant(content_image_sharp), tf.constant(style_image))[0]

    # Interpola entre a imagem de conteúdo e a imagem estilizada para densidade de estilo
    stylized_image = interpolate_images(
        baseline=content_image[0],
        target=stylized_image.numpy(),
        alpha=style_density
    )

    # Converte a imagem resultante para o formato correto
    stylized_image = np.array(stylized_image * 255, np.uint8)

    # Remove a dimensão do batch
    stylized_image = np.squeeze(stylized_image)
    return stylized_image

iface = gr.Interface(
    fn=style_transfer,
    inputs=[
        gr.Image(label="Content Image"),  # Imagem de conteúdo
        gr.Image(label="Style Image"),    # Imagem de estilo
        gr.Slider(minimum=0, maximum=1, value=0.5, label="Adjust Style Density"),
        gr.Slider(minimum=0, maximum=1, value=0.5, label="Content Sharpness")
    ],
    outputs=gr.Image(label="Stylized Image")
)

iface.launch()