Frank1983 commited on
Commit
dd9d01e
·
verified ·
1 Parent(s): c257d3c

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -0
app.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from transformers import AutoModelForVision2Seq, AutoProcessor
3
+ from PIL import Image
4
+
5
+ # 1. 模型加载 (请替换为您选择的 VLM 模型ID)
6
+ MODEL_ID = "HuggingFaceM4/idefics-9b-instruct" # 示例 VLM
7
+ processor = AutoProcessor.from_pretrained(MODEL_ID)
8
+ model = AutoModelForVision2Seq.from_pretrained(MODEL_ID)
9
+
10
+ # 2. 推理函数:接受图片和文本
11
+ def vlm_inference(image: Image.Image, prompt: str):
12
+ """
13
+ 接收用户上传的图片和文本提示,并返回 VLM 的生成结果。
14
+ """
15
+ if image is None:
16
+ return "请上传一张图片。"
17
+
18
+ # 构建 VLM 输入格式 (根据模型要求调整)
19
+ # 对于 IDEFICS 这类 VLM,输入通常是一个包含图片和文本的列表
20
+ chats = [
21
+ "User:",
22
+ image,
23
+ f"Prompt: {prompt}",
24
+ "<end_of_utterance>",
25
+ "\nAssistant:"
26
+ ]
27
+
28
+ # 预处理和生成
29
+ inputs = processor(chats, return_tensors="pt")
30
+
31
+ # 注意:大型 VLM 需要 GPU 部署。如果使用免费 CPU 空间,请选择小型 VLM
32
+ # outputs = model.generate(**inputs, max_length=128) # 确保模型在 CPU/GPU 上
33
+
34
+ # 模拟生成(如果您正在测试或使用 CPU 部署)
35
+ # 请取消注释上面的 model.generate 行,并删除下面这行
36
+ outputs = f"(模型生成结果)您询问的是图片中的内容:'{prompt}'。图片尺寸为 {image.size}。"
37
+
38
+ # 假设模型返回文本结果
39
+ return outputs
40
+
41
+ # 3. Gradio 界面定义
42
+ with gr.Blocks(title="VLM 多模态聊天演示") as demo:
43
+ gr.Markdown("# 🎨 Hugging Face Spaces VLM 演示")
44
+
45
+ # 定义输入组件
46
+ with gr.Row():
47
+ image_input = gr.Image(type="pil", label="上传图片")
48
+ prompt_input = gr.Textbox(label="输入文本提示 (例如: 描述这张图片的内容)")
49
+
50
+ # 定义输出组件和按钮
51
+ output_text = gr.Textbox(label="VLM 生成结果")
52
+ submit_btn = gr.Button("运行 VLM")
53
+
54
+ # 绑定函数
55
+ submit_btn.click(
56
+ fn=vlm_inference,
57
+ inputs=[image_input, prompt_input],
58
+ outputs=output_text
59
+ )
60
+
61
+ # 启动应用
62
+ if __name__ == "__main__":
63
+ # 在本地测试时运行
64
+ demo.launch()