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