Spaces:
Sleeping
Sleeping
File size: 3,462 Bytes
f63951f 99ad768 67da721 99ad768 61ddbf5 f63951f 99ad768 1b96f25 99ad768 1b96f25 99ad768 1b96f25 763142e c0cbb22 763142e c0cbb22 1b96f25 f63951f 99ad768 61ddbf5 99ad768 f63951f 1b96f25 99ad768 1b96f25 99ad768 f63951f 99ad768 b6005fd 99ad768 1b96f25 99ad768 |
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
import gradio as gr
import requests
import os
import base64
from PIL import Image
import io
# Функция для кодирования изображения в base64
def encode_image_to_base64(image):
buffered = io.BytesIO()
image.save(buffered, format="JPEG")
img_str = base64.b64encode(buffered.getvalue()).decode("utf-8")
return img_str
# Функция для отправки запроса в OpenAI с изображением и получения ответа
def ask_openai_with_image(instruction, image):
# Убираем пробелы с начала и конца инструкции
instruction = instruction.strip()
if image != None:
# Кодируем загруженное изображение в base64
base64_image = encode_image_to_base64(image)
# Создаем данные для запроса с закодированным изображением
payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": instruction,
},
{
"role": "system",
"content": f"data:image/jpeg;base64,{base64_image}",
}
],
"max_tokens": 4095,
}
if image == None:
# Создаем данные для запроса с закодированным изображением
payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": instruction,
}
],
"max_tokens": 4095,
}
# API ключ для OpenAI
api_key = os.getenv("API_KEY")
# Заголовки для запроса
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json',
}
# URL для запроса к API OpenAI
url = "https://api.openai.com/v1/chat/completions"
# Отправляем запрос в OpenAI
response = requests.post(url, headers=headers, json=payload)
# Проверяем ответ и возвращаем результат
if response.status_code == 200:
response_json = response.json()
try:
# Пытаемся извлечь текст из ответа
return response_json["choices"][0]["message"]["content"]
except Exception as e:
# Если есть ошибка в структуре JSON, выводим ее
return f"Error processing the image response: {e}"
else:
# Если произошла ошибка, возвращаем сообщение об ошибке
return f"Error: {response.status_code} - {response.text}"
# Создаем интерфейс с помощью Gradio
with gr.Blocks() as demo:
with gr.Row():
with gr.Column():
instructions = gr.Textbox(label="Prompt")
image_input = gr.Image(label="Изображение", type="pil")
submit_button = gr.Button("Генерация")
with gr.Column():
output_markdown = gr.Markdown(label="AI Response")
submit_button.click(
fn=ask_openai_with_image,
inputs=[instructions, image_input],
outputs=[output_markdown]
)
demo.launch() |