Я считаю, что все очарованы мощью ChatGPT, и это волнение побудило меня написать эту статью. Собственно, я хочу задать вам вопрос. Вы также знаете, что можно использовать модели OpenAI в своих проектах с помощью API?

OpenAI API — это решение, которое можно применять ко многим задачам, включая понимание или создание естественного языка или кода. В этом руководстве мы узнаем, как использовать API изображений для создания изображений на основе текстовой подсказки, и мы реализуем его, разработав веб-приложение на основе Flask.

Предпосылки

  1. Если у вас не установлен Python, установите его отсюда.
  2. Должна быть IDE (например, VSCode)

Шаги, чтобы следовать

  1. Создайте виртуальную среду в каталоге проекта
$ python -m venv venv
$ . venv/bin/activate

2. Создайте файлы и папки в соответствии со следующей иерархией:

openai/
├── venv
├── templates/
│ └── main.html
├── static/
│ └── index.css
├── .env
└── app.py

HTML-файл

Файл HTML содержит текстовый ввод для получения приглашения от пользователя и отправки ввода для отправки запроса на получение сгенерированного изображения. Сохраненное изображение в папке static/ также встраивается в html-страницу.

<!DOCTYPE html>
<head>
  <title>OpenAI</title>
  <link rel="stylesheet" href="{{ url_for('static', filename='main.css') }}" />
</head>
 
<body>
  <h1>Get picture</h1>
  <form action="/" method="post">
    <input type="text" name="text" placeholder="Describe image" required />
    <input type="submit" value="Get Image" />
  </form>
 
 
  <div class="image">
    <img src="{{ url_for('static', filename='im.png') }}">
  </div>
 
</body>

CSS-файл

input {
    font-size: 16px;
    line-height: 24px;
    color: #353740;
    font-family: "ColfaxAI", Helvetica, sans-serif;
  }
  body {
    display: flex;
    flex-direction: column;
    align-items: center;
    padding-top: 20px;
  }
 
  h1 {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 32px;
    line-height: 40px;
    font-weight: bold;
    color: #202123;
    margin: 16px 0 20px;
  }
  form {
    display: flex;
    flex-direction: column;
    width: 320px;
  }
  input[type="text"] {
    padding: 12px 16px;
    border: 1px solid #434bec;
    border-radius: 5px;
    margin-bottom: 24px;
  }
  ::placeholder {
    color: #8e8ea0;
    opacity: 1;
  }
  input[type="submit"] {
    padding: 12px 0;
    color: #fff;
    background-color: #434bec;
    border: none;
    border-radius: 5px;
    text-align: center;
    cursor: pointer;
  }
  .image {
    margin-top: 40px;
  }
 
  .image img{
    width: 280px;
    height: 280px;
  }

.env-файл

Чтобы использовать API изображений, нам нужен ключ API, который можно создать здесь и сохранить в файле .env, как показано ниже:

OPENAI_API_KEY= "your_api_key"

app.py

Наше веб-приложение на основе Flask должно иметь следующие функции:

  1. получить приглашение с html-страницы
  2. вызовите API, чтобы получить изображение в формате base64 в соответствии с подсказкой
  3. Расшифруйте и сохраните изображение
  4. Вставить сохраненное изображение на html-страницу
import os
from dotenv import load_dotenv
import openai
import base64
import numpy as np
import cv2
from flask import Flask, render_template, request, url_for, redirect
 
load_dotenv()
 
app= Flask(__name__)
 
openai.api_key = os.getenv("OPENAI_API_KEY")
 
@app.route("/", methods= ("GET", "POST"))
def index():
    if request.method=="POST":
        text= request.form["text"]
        response = openai.Image.create(
            prompt= text,
            n=1,
            size= "1024x1024",
            response_format= "b64_json"
        )
        im_bytes= base64.b64decode(response['data'][0]['b64_json'])
        im_arr = np.frombuffer(im_bytes, dtype=np.uint8)
        img= cv2.imdecode(im_arr, cv2.IMREAD_COLOR)
        cv2.imwrite(os.path.join("static/", "im.png"), img)
        return redirect(url_for("index"))
    return render_template("index.html")

Просмотреть код

Чтобы завершить наше приложение, нам нужно установить следующие библиотеки:

import os
from dotenv import load_dotenv
import openai
import base64
import numpy as np
import cv2
from flask import Flask, render_template, request, url_for, redirect

Как вы помните, мы сохранили наш ключ API в файле .env, загрузили и установили его как переменные среды с помощью функции load_dotenv(). После создания экземпляра Flask и присвоения ему имени с помощью app= Flask(__name__) мы устанавливаем ключ OpenAI с помощью openai.api_key = os.getenv("OPENAI_API_KEY").

Функция python index() предназначена для получения подсказки для API из текстового ввода, когда у нас есть запрос POST, который происходит при отправке ввода.

 if request.method=="POST":
        text= request.form["text"]

Чтобы получить ответ от конечной точки генерации изображений, нам нужно указать некоторые параметры: prompt — это описание изображения, n — количество изображений, которое может быть от 1 до 10, размер изображения и формат изображения, который является base64 в наш случай.

response = openai.Image.create(
            prompt= text,
            n=1,
            size= "1024x1024",
            response_format= "b64_json"
        )

Поскольку мы получаем изображение в формате base64, нам нужно преобразовать его в формат изображения. Во-первых, мы используем функцию base64.b64decode() для декодирования изображения в двоичные данные, а затем преобразуем его в одномерный массив с помощью функции numpy.frombuffer() и, наконец, функция cv2.imdecode() декодирует в формат изображения. Полученное изображение сохраняется в папке «static/» как «im.png», который встраивается в html-страницу.

im_bytes= base64.b64decode(response['data'][0]['b64_json'])
im_arr = np.frombuffer(im_bytes, dtype=np.uint8)
img= cv2.imdecode(im_arr, cv2.IMREAD_COLOR)
cv2.imwrite(os.path.join("static/", "im.png"), img)

В конце функция перенаправляет на «индекс», а затем отображает html-страницу.

Последний шаг

Мы уже завершили большую часть и пришло время творить чудеса. Для запуска приложения введите flask run в каталоге проекта, и вы получите следующее:

Наше приложение работает по адресу http://127.0.0.1:5000, и вы можете проверить это в своем браузере.

Прямо сейчас мы не можем видеть изображение, как показано ниже:

Напечатаем «белый кот на столе» и проверим еще раз.

Поздравляем!!! Вы успешно создали приложение для создания изображений. Не забудьте подписаться на меня, чтобы вместе делать новые увлекательные проекты.

Вы можете получить исходный код из репозитория GitHub.