SonyaX20 commited on
Commit
379faeb
·
1 Parent(s): f2ef4f5
Files changed (4) hide show
  1. .gitignore +1 -0
  2. README.md +61 -6
  3. app.py +91 -0
  4. requirements.txt +4 -0
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ .env
README.md CHANGED
@@ -1,13 +1,68 @@
1
  ---
2
- title: Slide
3
- emoji: 🐠
4
- colorFrom: green
5
- colorTo: blue
6
  sdk: gradio
7
- sdk_version: 5.14.0
8
  app_file: app.py
9
  pinned: false
10
  license: mit
 
11
  ---
12
 
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: Slides Comprehension
3
+ emoji: 💬
4
+ colorFrom: yellow
5
+ colorTo: purple
6
  sdk: gradio
7
+ sdk_version: 4.19.2
8
  app_file: app.py
9
  pinned: false
10
  license: mit
11
+ short_description: 课程幻灯片智能讲解系统
12
  ---
13
 
14
+ # 课程幻灯片智能讲解系统
15
+
16
+ 这是一个基于GPT-4 Vision的课程幻灯片智能讲解系统,可以自动分析幻灯片内容并生成详细的讲解。
17
+
18
+ ## 功能特点
19
+
20
+ - 支持上传幻灯片图片
21
+ - 基于GPT-4 Vision的智能分析
22
+ - 生成专业、清晰的讲解内容
23
+ - 简单易用的Web界面
24
+
25
+ ## 使用方法
26
+
27
+ 1. 上传幻灯片图片
28
+ 2. 输入课程标题
29
+ 3. 点击提交按钮
30
+ 4. 等待系统生成讲解内容
31
+
32
+ ## 环境要求
33
+
34
+ - Python 3.8+
35
+ - OpenAI API密钥
36
+ - 相关Python包(见requirements.txt)
37
+
38
+ ## 配置说明
39
+
40
+ 在使用之前,请确保:
41
+
42
+ 1. 在Hugging Face Space的Secrets中设置了OPENAI_API_KEY
43
+ 2. 安装了所有必要的依赖包
44
+
45
+ ## 部署说明
46
+
47
+ 1. Fork 这个项目到你的 Hugging Face Space
48
+ 2. 在 Space 设置中:
49
+ - Hardware: 选择 CPU (免费) 或 GPU (付费)
50
+ - Python packages: 确保所有依赖都已列在 requirements.txt 中
51
+ 3. 添加 Repository Secrets:
52
+ - 名称:`OPENAI_API_KEY`
53
+ - 值:你的 OpenAI API Key
54
+ 4. 等待自动部署完成
55
+
56
+ ## License
57
+
58
+ MIT License
59
+
60
+ ## Hugging Face Spaces 部署说明
61
+
62
+ 1. Fork 这个项目到你的 Hugging Face Space
63
+ 2. 在 Space 设置中:
64
+ - Hardware: 选择 CPU (免费) 或 GPU (付费)
65
+ - Python packages: 确保所有依赖都已列在 requirements.txt 中
66
+ 3. 添加 Repository Secrets:
67
+ - 名称:`OPENAI_API_KEY`
68
+ - 值:你的 OpenAI API Key
app.py ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import gradio as gr
3
+ import spaces
4
+ from openai import OpenAI
5
+ from PIL import Image
6
+ import torch
7
+ import base64
8
+ from io import BytesIO
9
+
10
+ # 初始化GPU
11
+ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
12
+ zero = torch.Tensor([0]).to(device)
13
+ print(f"Using device: {zero.device}")
14
+
15
+ # 初始化OpenAI客户端
16
+ client = OpenAI(api_key=os.environ['OPENAI_API_KEY'])
17
+
18
+ def encode_image_to_base64(image):
19
+ """将图片转换为base64编码"""
20
+ if isinstance(image, str): # 如果是文件路径
21
+ with Image.open(image) as img:
22
+ buffered = BytesIO()
23
+ img.save(buffered, format="PNG")
24
+ img_str = base64.b64encode(buffered.getvalue()).decode()
25
+ else: # 如果是PIL Image对象
26
+ buffered = BytesIO()
27
+ image.save(buffered, format="PNG")
28
+ img_str = base64.b64encode(buffered.getvalue()).decode()
29
+ return img_str
30
+
31
+ @spaces.GPU
32
+ def analyze_slide(image, course_title):
33
+ """分析幻灯片内容并生成讲解"""
34
+ print(f"Current device: {zero.device}") # 验证GPU使用情况
35
+
36
+ if not image:
37
+ return "请上传幻灯片图片"
38
+
39
+ # 将图片转换为base64
40
+ base64_image = encode_image_to_base64(image)
41
+
42
+ try:
43
+ # 调用GPT-4 Vision API
44
+ response = client.chat.completions.create(
45
+ model="gpt-4-vision-preview",
46
+ messages=[
47
+ {
48
+ "role": "system",
49
+ "content": "你是一位专业的教育讲师,请基于上传的课程幻灯片图片内容,生成详细的讲解。讲解应该清晰、专业且易于理解。"
50
+ },
51
+ {
52
+ "role": "user",
53
+ "content": [
54
+ {
55
+ "type": "text",
56
+ "text": f"这是一节'{course_title}'课程的幻灯片。请详细讲解这张幻灯片的内容,包括主要概念、重点和难点。"
57
+ },
58
+ {
59
+ "type": "image_url",
60
+ "image_url": {
61
+ "url": f"data:image/png;base64,{base64_image}"
62
+ }
63
+ }
64
+ ]
65
+ }
66
+ ],
67
+ max_tokens=2000
68
+ )
69
+
70
+ return response.choices[0].message.content
71
+
72
+ except Exception as e:
73
+ return f"处理过程中出现错误: {str(e)}"
74
+
75
+ # 创建Gradio界面
76
+ demo = gr.Interface(
77
+ fn=analyze_slide,
78
+ inputs=[
79
+ gr.Image(type="pil", label="上传幻灯片图片"),
80
+ gr.Textbox(label="课程标题", placeholder="请输入课程标题")
81
+ ],
82
+ outputs=gr.Textbox(label="讲解内容"),
83
+ title="课程幻灯片智能讲解系统",
84
+ description="上传课程幻灯片图片并输入课程标题,系统将生成详细的讲解内容。",
85
+ examples=[],
86
+ cache_examples=False
87
+ )
88
+
89
+ # 启动应用
90
+ if __name__ == "__main__":
91
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ gradio==4.19.2
2
+ openai==1.12.0
3
+ Pillow==10.2.0
4
+ torch>=2.0.0