Blackeyes0u0
1
fadb2d1
raw
history blame contribute delete
No virus
3.96 kB
import gradio as gr
import clip,torch
import requests
from PIL import Image
import numpy as np
import torch
import torch.nn as nn
from io import BytesIO
import urllib.request
# https://hhp-item-resource.s3.ap-northeast-2.amazonaws.com/magazine-resource/magazine/20221017154717/jin._s2.png
# girl bag skirt eye beauty pretty
from selenium import webdriver
from selenium.webdriver.common.by import By
def test2():
driver = webdriver.Chrome() #웹드라이버가 있는 경로에서 Chrome을 가져와 실행-> driver변수
driver.get('https://www.hiphoper.com/') #driver변수를 이용해 원하는 url 접속
imgs = driver.find_elements(By.CSS_SELECTOR,'img.card__image') #css selector를 이용해서 'tag이름.class명'의 순으로 인자를 전달
result = [] #웹 태그에서 attribute 중 src만 담을 리스트
for img in imgs: #모든 이미지들을 탐색
# print(img.get_attribute('src')) #이미지 주소를 print
result.append(img.get_attribute('src')) #이미지 src만 모아서 리스트에 저장
driver.quit()
return result
def similarity(v1,v2,type=0):
if type ==0:
v1_norm = np.linalg.norm(v1)
v2_norm = np.linalg.norm(v2)
return np.dot(v1,v2)/(v1_norm*v2_norm)
else:
return np.sqrt(np.sum((v1-v2)**2))
def democlip(url ,texts):
if url =='':
print('SYSTEM : alternative url')
url = 'https://i.pinimg.com/564x/47/b5/5d/47b55de6f168db65cf46d7d1f0451b64.jpg'
else:
print('SYSTEM : URL progressed')
if texts =='':
texts ='black desk room girl flower'
else:
print('SYSTEM : TEXT progressed')
response = requests.get(url)
image_bytes = response.content
texts = list(texts.split(' '))
"""Gets the embedding values for the image."""
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)
# image = preprocess(Image.open("CLIP.png")).unsqueeze(0).to(device)s
text_token = clip.tokenize(texts).to(device)
image = preprocess(Image.open(BytesIO(image_bytes))).unsqueeze(0).to(device)
with torch.no_grad():
image_features = model.encode_image(image)
text_features = model.encode_text(text_token)
logits_per_image, logits_per_text = model(image,text_token)
probs = logits_per_image.softmax(dim=-1).cpu().numpy()
word_dict = {'image':{},'text':{}}
### text
for i,text in enumerate(texts):
word_dict['text'][text] = text_features[i].cpu().numpy()
### iamge
for i,img in enumerate(image):
word_dict['image'][img] = image_features[i].cpu().numpy()
###################### PCA of embeddings ########################
## pca of text
tu,ts,tv = torch.pca_lowrank(text_features,center=True)
text_pca = torch.matmul(text_features,tv[:,:3])
### pca of image
imgu,imgs,imgv = torch.pca_lowrank(image_features,center=True)
image_pca = torch.matmul(image_features,imgv[:,:3])
# return word_dict
print(text_pca.shape,image_pca.shape)
return text_pca,image_pca
def PCA(img_emb, text_emb,n_components = 3):
x = torch.tensor([[1.,2.,3.,7.],[4.,5.,3.,6.],[7.,9.,8.,9.],[11.,13.,17.,11.]])
# plz change data type to float or complex
print(x.shape)
u,s,v = torch.pca_lowrank(x,q=None, center=False,niter=2)
u.shape,s.shape,v.shape
u@torch.diag(s)@v.T
# torch.matmul(x,v[:,:3])
pass
# NODE type
# PCA type.
# ELSE type.
demo = gr.Interface(
fn=democlip,
# inputs = [gr.Image(),gr.Textbox(lable='input prediction')],
inputs = ['text',gr.Textbox(label='input prediction')],
# outputs='label'
outputs = [gr.Textbox(label='text pca Box'),gr.Textbox(label='image pca Box')]
)
demo.launch()