Rooni commited on
Commit
f63951f
1 Parent(s): 68d3034

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +66 -0
app.py ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import requests
3
+ import os
4
+ from PIL import Image
5
+ import io
6
+
7
+ # Функция для обработки изображения и текста и отправки запроса к OpenAI
8
+ def generate_text(image, prompt):
9
+ # Конвертируем изображение для отправки через API
10
+ image_bytes = io.BytesIO()
11
+ image.save(image_bytes, format='PNG')
12
+ image_base64 = base64.b64encode(image_bytes.getvalue()).decode('utf-8')
13
+
14
+ # API ключ для OpenAI
15
+ api_key = os.getenv("API_KEY")
16
+
17
+ # Заголовки для запроса
18
+ headers = {
19
+ 'Authorization': f'Bearer {api_key}',
20
+ 'Content-Type': 'application/json',
21
+ }
22
+
23
+ # Данные для запроса
24
+ data = {
25
+ "model": "gpt-4-vision-preview",
26
+ "prompt": prompt,
27
+ "n": 1,
28
+ "temperature": 0.5,
29
+ "top_p": 1,
30
+ "frequency_penalty": 0,
31
+ "presence_penalty": 0,
32
+ "stop": ["\n"],
33
+ "image_base64": image_base64
34
+ }
35
+
36
+ # Отправляем запрос к OpenAI
37
+ response = requests.post('https://api.openai.com/v1/engines/davinci-codex/completions', headers=headers, json=data)
38
+
39
+ # Проверяем ответ и возвращаем результат
40
+ if response.status_code == 200:
41
+ response_data = response.json()
42
+ return response_data['choices'][0]['text'].strip()
43
+ else:
44
+ return f"Error: {response.status_code}"
45
+
46
+ # Создаем интерфейс с помощью Gradio
47
+ with gr.Blocks() as demo:
48
+ with gr.Row():
49
+ with gr.Column():
50
+ image_input = gr.Image(label="Загрузите изображение")
51
+ text_input = gr.Textbox(label="Введите текст")
52
+ submit_button = gr.Button("Решить")
53
+ with gr.Column():
54
+ output_text = gr.Textbox(label="Ответ", interactive=True, lines=10)
55
+ output_markdown = gr.Textbox(label="Ответ в Markdown", interactive=True, lines=10, visible=False)
56
+
57
+ # Функция для обновления Markdown поля при получении ответа
58
+ def update_markdown(answer):
59
+ output_markdown.update(f"```\n{answer}\n```")
60
+ output_markdown.change_visibility(True)
61
+
62
+ # Привязываем функции к кнопке
63
+ submit_button.click(fn=generate_text, inputs=[image_input, text_input], outputs=[output_text])
64
+ output_text.change(fn=update_markdown, inputs=[output_text], outputs=[output_markdown])
65
+
66
+ demo.launch()