- app.py +12 -26
- app_1.py +39 -0
- image_feature.py +75 -0
- requirements.txt +1 -3
- requirements_bak.txt +6 -0
app.py
CHANGED
@@ -1,20 +1,9 @@
|
|
1 |
import gradio as gr
|
2 |
-
import
|
3 |
-
|
4 |
-
|
5 |
-
def work(imgurl):
|
6 |
-
# output = testMch.describeImage2(img)
|
7 |
-
# # output = testMch.agent(img)
|
8 |
-
# # output = testMch.agent(img)
|
9 |
-
# return output
|
10 |
-
# imgurl = "r" + imgurl
|
11 |
-
# imgurl = imgurl.replace("\\\\\\", "\\")
|
12 |
-
# input = "Describe the following image:\n" + imgurl
|
13 |
-
out = func.agent(f"Please describe the following image:\n{imgurl}")
|
14 |
-
anws = func.toChinese(out['output'])
|
15 |
-
return anws
|
16 |
|
17 |
|
|
|
|
|
18 |
|
19 |
|
20 |
# with gr.Blocks() as demo:
|
@@ -25,15 +14,12 @@ def work(imgurl):
|
|
25 |
# submit.click(work, inputs=[image_url, input], outputs=output)
|
26 |
# demo.launch()
|
27 |
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
#
|
34 |
-
|
35 |
-
#
|
36 |
-
demo.launch()
|
37 |
-
|
38 |
-
# # interface = gr.Interface(fn=agent, inputs="image", outputs="text")
|
39 |
-
# # interface.launch()
|
|
|
1 |
import gradio as gr
|
2 |
+
import image_feature as func
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
|
5 |
+
def work(image1, image2):
|
6 |
+
return func.infer1(image1, image2)
|
7 |
|
8 |
|
9 |
# with gr.Blocks() as demo:
|
|
|
14 |
# submit.click(work, inputs=[image_url, input], outputs=output)
|
15 |
# demo.launch()
|
16 |
|
17 |
+
# 定义你的界面
|
18 |
+
with gr.Interface(fn=work,
|
19 |
+
inputs=[gr.Textbox(label='图片1', lines=1), gr.Textbox(label='图片2', lines=1)], # 两个文本输入框
|
20 |
+
outputs=[gr.Textbox(lines=3, label="推理结果")], # 输出为文本
|
21 |
+
title="图片相似度推理", # 界面标题
|
22 |
+
description="输入两张图片链接进行相似度推理", # 界面描述
|
23 |
+
examples=[["https://example.com", "https://google.com"], # 示例输入
|
24 |
+
["https://github.com", "https://twitter.com"]]) as demo: # 更多示例输入
|
25 |
+
demo.launch() # 启动界面
|
|
|
|
|
|
app_1.py
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import testMch as func
|
3 |
+
|
4 |
+
|
5 |
+
def work(imgurl):
|
6 |
+
# output = testMch.describeImage2(img)
|
7 |
+
# # output = testMch.agent(img)
|
8 |
+
# # output = testMch.agent(img)
|
9 |
+
# return output
|
10 |
+
# imgurl = "r" + imgurl
|
11 |
+
# imgurl = imgurl.replace("\\\\\\", "\\")
|
12 |
+
# input = "Describe the following image:\n" + imgurl
|
13 |
+
out = func.agent(f"Please describe the following image:\n{imgurl}")
|
14 |
+
anws = func.toChinese(out['output'])
|
15 |
+
return anws
|
16 |
+
|
17 |
+
|
18 |
+
|
19 |
+
|
20 |
+
# with gr.Blocks() as demo:
|
21 |
+
# image_url = gr.Image(type="filepath", label="请选择一张图片")
|
22 |
+
# input = gr.Textbox(label='请描述您的问题', placeholder="", lines=1)
|
23 |
+
# output = gr.Textbox(label='答案', placeholder="", lines=2, interactive=False)
|
24 |
+
# submit = gr.Button('提问', variant="primary")
|
25 |
+
# submit.click(work, inputs=[image_url, input], outputs=output)
|
26 |
+
# demo.launch()
|
27 |
+
|
28 |
+
demo = gr.Interface(title="识别图片",
|
29 |
+
css="",
|
30 |
+
fn=work,
|
31 |
+
inputs=[gr.Image(type="filepath", label="请上传图片")],
|
32 |
+
outputs=[gr.Textbox(lines=3, label="识别结果")])
|
33 |
+
#
|
34 |
+
# # demo = gr.Interface(fn=work, inputs="image,text", outputs="text")
|
35 |
+
#
|
36 |
+
demo.launch()
|
37 |
+
|
38 |
+
# # interface = gr.Interface(fn=agent, inputs="image", outputs="text")
|
39 |
+
# # interface.launch()
|
image_feature.py
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# import numpy as np
|
2 |
+
# import requests
|
3 |
+
import torch
|
4 |
+
# from PIL import Image
|
5 |
+
from torch.nn.functional import cosine_similarity
|
6 |
+
from transformers import AutoImageProcessor, AutoModel
|
7 |
+
|
8 |
+
# from transformers import pipeline
|
9 |
+
|
10 |
+
# import transformers
|
11 |
+
#
|
12 |
+
# print(transformers.__version__)
|
13 |
+
#
|
14 |
+
# img_urls = ["https://img0.baidu.com/it/u=3704428154,2884159591&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500",
|
15 |
+
# "https://img0.baidu.com/it/u=3704428154,2884159591&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500"]
|
16 |
+
#
|
17 |
+
# image_real = Image.open(requests.get(img_urls[0], stream=True).raw).convert("RGB")
|
18 |
+
# image_gen = Image.open(requests.get(img_urls[1], stream=True).raw).convert("RGB")
|
19 |
+
#
|
20 |
+
# # DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
|
21 |
+
DEVICE = torch.device('cpu')
|
22 |
+
# pipe = pipeline(task="image-feature-extraction", model_name="google/vit-base-patch16-384", device=DEVICE, pool=True)
|
23 |
+
#
|
24 |
+
# # 1提取图片特征向量
|
25 |
+
# outputs = pipe([image_real, image_gen])
|
26 |
+
#
|
27 |
+
# # get the length of a single output
|
28 |
+
# print(len(outputs[0][0]))
|
29 |
+
# # show outputs
|
30 |
+
# print(outputs)
|
31 |
+
#
|
32 |
+
# # 768
|
33 |
+
# # [[[-0.03909236937761307, 0.43381670117378235, -0.06913255900144577,
|
34 |
+
#
|
35 |
+
# # 2计算图片相似度
|
36 |
+
# similarity_score = cosine_similarity(torch.Tensor(outputs[0]),
|
37 |
+
# torch.Tensor(outputs[1]), dim=1)
|
38 |
+
#
|
39 |
+
# print(similarity_score)
|
40 |
+
|
41 |
+
# tensor([0.6043])
|
42 |
+
|
43 |
+
# pipe = pipeline(task="image-feature-extraction", model_name="google/vit-base-patch16-224", device=DEVICE)
|
44 |
+
# output = pipe(image_real)
|
45 |
+
#
|
46 |
+
# # 其中第一个维度是批量大小,最后两个维度是嵌入形状。
|
47 |
+
# print(np.array(outputs).shape)
|
48 |
+
# # (1, 197, 768)
|
49 |
+
|
50 |
+
|
51 |
+
# 第二种方式推理图片相似度
|
52 |
+
processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224")
|
53 |
+
model = AutoModel.from_pretrained("google/vit-base-patch16-224").to(DEVICE)
|
54 |
+
|
55 |
+
|
56 |
+
# 推理
|
57 |
+
def infer(image):
|
58 |
+
inputs = processor(image, return_tensors="pt").to(DEVICE)
|
59 |
+
outputs = model(**inputs)
|
60 |
+
return outputs.pooler_output
|
61 |
+
|
62 |
+
|
63 |
+
# 推理
|
64 |
+
def infer1(image1, image2):
|
65 |
+
embed_real = infer(image1)
|
66 |
+
embed_gen = infer(image2)
|
67 |
+
similarity_score = cosine_similarity(embed_real, embed_gen, dim=1)
|
68 |
+
print(similarity_score)
|
69 |
+
# 如果你想在CPU上操作这个值,你需要先将tensor移动到CPU
|
70 |
+
t_cpu = similarity_score.cpu()
|
71 |
+
|
72 |
+
# 然后提取这个值
|
73 |
+
return t_cpu.item()
|
74 |
+
|
75 |
+
# tensor([0.6061], device='cuda:0', grad_fn=<SumBackward1>)
|
requirements.txt
CHANGED
@@ -1,6 +1,4 @@
|
|
1 |
-
transformers
|
2 |
torch
|
3 |
-
langchain
|
4 |
-
openai
|
5 |
gradio
|
6 |
pillow
|
|
|
1 |
+
transformers==4.39.1
|
2 |
torch
|
|
|
|
|
3 |
gradio
|
4 |
pillow
|
requirements_bak.txt
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
transformers
|
2 |
+
torch
|
3 |
+
langchain
|
4 |
+
openai
|
5 |
+
gradio
|
6 |
+
pillow
|