File size: 4,236 Bytes
62e5590
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1c18792
62e5590
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import streamlit as st
import io
from PIL import Image
import numpy as np
import cv2
from model import Generator
from torchvision import transforms
import torch

st.set_page_config(
    page_title="Emotion App!",
    page_icon="😎",
    layout="wide"
)
inv_normalize = transforms.Normalize(
    mean=[-0.485/0.229, -0.456/0.224, -0.406/0.225],
    std=[1/0.229, 1/0.224, 1/0.225]
)

st.markdown("### Правила игры:")
st.markdown("1) Введите сообщение на русском языке. Это может быть что угодно, например, случившееся недавно событие или ваши мысли")
st.markdown("2) Приложение распознает тональность вашего настроения и выведет фото автора приложения с соответствующим настроением")
st.markdown("3) Но нет, это не два разных фото. Это работа генеративной модели! Не верите? Попробуйте загрузить своё фото!)")

st.markdown("Советы по выбору фото: лучше всего брать селфи! Или фотографии, где лицо крупным планом. Чем сильнее фото отличается от этого описания, тем хуже результат.")
# st.markdown("<img width=200px src='https://rozetked.me/images/uploads/dwoilp3BVjlE.jpg'>", unsafe_allow_html=True)
# ^-- можно показывать пользователю текст, картинки, ограниченное подмножество html - всё как в jupyter

text = st.text_area("Введите текст:")
# img =  st.image("testJulifil.jpg")
# ^-- показать текстовое поле. В поле text лежит строка, которая находится там в данный момент
# st.markdown("### Hello, world!")
from transformers import pipeline

trans = pipeline('translation', model = "Helsinki-NLP/opus-mt-ru-en")
classifier = pipeline('sentiment-analysis', model="distilbert-base-uncased-finetuned-sst-2-english")
res = classifier(trans(text)[0]["translation_text"])
# st.markdown(res)
if res[0]['label'] != 'POSITIVE':
    labels = torch.Tensor([[0, 0]])
    # st.markdown("Я сотру улыбку с этого лица!")
else:
    labels = torch.Tensor([[1, 1]])
    # st.markdown("Я сделаю фото улыбчивым!")

# st.markdown(labels)
file = st.file_uploader("Загрузите своё фото:", type=['png','jpeg','jpg'])
if file:

    image_data = file.getvalue()
    # Показ загруженного изображения на Web-странице средствами Streamlit
    # st.image(image_data)
    # Возврат изображения в формате PIL
    image = Image.open(io.BytesIO(image_data))
    # image = Image.open("test"+username+".jpg").convert('RGB')


else:
    image = Image.open("testJulifil.jpg")


transform=transforms.Compose([
    transforms.Resize(64*4),
    transforms.CenterCrop(64*4),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                         std=[0.229, 0.224, 0.225])
])
img = transform(image)
img = img.unsqueeze(0)
generator = torch.load("gen_model.pt", map_location=torch.device('cpu'))
# st.write(int(labels.sum()) < 1)
# if int(labels.sum()) > 1:
#     st.markdown("Я сотру улыбку с этого лица!")
# elif int(labels.sum()) < 1:
#     st.markdown("Я сделаю фото улыбчивым!")
x_f2 = generator(img, labels)
res = inv_normalize(x_f2[0]).permute(1,2,0).detach().cpu().numpy()
res = res# *255 #
res = cv2.normalize(res, None, 220, 40, cv2.NORM_MINMAX, cv2.CV_8U)
res = res[:,:,::-1]

# plt.imshow(res)
# cv2.imshow("res", res)
username = "0"
cv2.imwrite("res"+username+".jpg", res)
img = st.image(r"res"+username+".jpg")
# x = np.array(img)
# cv2.imwrite("downloaded.jpeg", x)
# st.write(x.mean())
# import cv2
# foto = cv2.imread(file)
# cv2.imwrite(foto, "res.png")
# выводим результаты модели в текстовое поле, на потеху пользователю