AI智能绘画-基于文心大模型

理论知识

AI 作画

国内首个技术自研、基于大模型的通用且可控的文生图系统,可基于自然语言智能生成不限定风格的图像,面向有图片创作需求的开发者提供API调用服务,为内容创作者提供灵感和高质量配图

AI作画-基础版

AI作画-基础版,基于文心ERNIE-ViLG大模型,根据用户输入的文本,自动创作图片,每次可自定义生成1张至6张图片。在使用AI作画接口服务之前,请您仔细阅读相关协议的全部内容。

AI作画-基础版涉及2个接口,分别为:提交请求、查询结果。

  • 提交请求:传入文本、分辨率、风格参数,创建AI作画任务,获得任务ID。

  • 查询结果:用于在任务创建后,查看图片生成状态。待图片生成完毕,通过查询接口即可查看生成图片的地址链接。

提交请求

接口描述

提交请求接口,根据用户输入的文本,得到图片生成任务ID。

在线调试

您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。

请求说明

请求示例

HTTP方法: POST

请求URL: https://aip.baidubce.com/rpc/2.0/ernievilg/v1/txt2img

URL参数:

参数
access_token通过API Key和Secret Key获取的access_token,参考“Access Token获取

Header如下:

参数
Content-Typeapplication/json

并发数:付费使用后默认并发数为 1

请求参数

参数是否必选类型描述
textstring输入内容,长度不超过100个字(操作指南详见文档
resolutionstring图片分辨率,可支持10241024、10241536、1536*1024
stylestring目前支持风格有:探索无限、古风、二次元、写实风格、浮世绘、low poly 、未来主义、像素风格、概念艺术、赛博朋克、洛丽塔风格、巴洛克风格、超现实主义、水彩画、蒸汽波艺术、油画、卡通画
numint图片生成数量,支持1-6张

Body示例

{
    "text": "睡莲",
    "style": "油画",
    "resolution": "1024*1024",
    "num": 1
}

返回说明

返回参数

参数类型描述
log_iduint64请求唯一标识码
dataobject结果对象,返回 task id。任务完成后,作为获取图片的依据
taskIdint图片生成任务id,作为查询接口的入参

返回示例

{
    "data": {
        "taskId": 8328053
    },
    "log_id": 1583376431827547238
}

查询结果

接口描述

查询结果接口,根据图片生成任务ID(有效期一个月)查询生成状态。

在线调试

您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。

请求说明

请求示例

HTTP方法: POST

请求URL: https://aip.baidubce.com/rpc/2.0/ernievilg/v1/getImg

URL参数:

参数
access_token通过API Key和Secret Key获取的access_token,参考“Access Token获取

Header如下:

参数
Content-Typeapplication/json

并发数:付费使用后默认并发数为 2

请求参数

参数是否必选类型描述
taskIdstring从提交请求的提交接口的返回值中获取

Body示例

{
    "taskId":"8328053"
}

返回说明

返回参数

参数类型描述
dataobjecttask_id对应请求的任务状态和生成结果
+stylestring请求内容中的图片风格
+taskIdint对应任务的id(有效期一个月)
+imgUrlsarray生成结果数组(目前默认生成1张图)
++imagestring生成结果地址(有效期三个月)
+textstring请求内容中的文本
+statusint0或1。"1"表示已生成完成,"0"表示任务排队中或正在处理。
+createTimestring任务创建时间
+imgstring生成结果地址
+waitingstring预计等待时间
log_iduint64请求唯一标识码

返回示例

{
    "data": {
        "style": "油画",
        "taskId": 8328053,
        "imgUrls": [
            {
                "image": "https://wenxin.baidu.com/younger/file/ERNIE-ViLG/9eb039cab103d587ed92f52477e2f4a0ex"
            }
        ],
        "text": "睡莲",
        "status": 1,
        "createTime": "2022-11-17 16:52:10",
        "img": "https://wenxin.baidu.com/younger/file/ERNIE-ViLG/9eb039cab103d587ed92f52477e2f4a0ex",
        "waiting": "0"
    },
    "log_id": 1593165135593954136
}

AI作画-高级版

接口描述

AI 作画,基于文心大模型,根据用户输入的文本,自动创作图片。AI 作画-高级版涉及2个接口,分别为:提交请求、查询结果。

  • 提交请求:支持传入文本、分辨率、数量、参考图等参数,创建 AI 作画任务,获得任务ID。

  • 查询结果:用于在任务创建后,查看图片生成状态。待图片生成完毕,通过查询接口即可查看生成图片的地址链接。

  • 并发概念:并发数指 AI 作画高级版服务同时能处理的请求数量。上一个任务执行完,拿到结果后,并发才结束。

  • 若您对于 prompt 输入有疑问,请参考 “AI作画-高级版使用指南” 。

  • 并发数:付费使用后AI作画-高级版图片生成处理过程并发提升为2

提交请求-接口说明

在线调试

您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。

请求示例

HTTP方法: POST

请求URL: https://aip.baidubce.com/rpc/2.0/ernievilg/v1/txt2imgv2

URL参数:

参数
access_token通过API Key和Secret Key获取的access_token,参考“Access Token获取

Header如下:

参数
Content-Typeapplication/json

请求参数

POST 方式调用

注意:要求使用 JSON 格式的结构体来描述一个请求的具体内容。

参数是否必选类型描述
promptstring生图的文本描述。仅支持中文、日常标点符号。不支持英文,特殊符号,限制 200 字
versionstring模型版本,支持 v1、v2,默认为v2,v2 为最新模型,比 v1 在准确度、精细度上有比较明显的提升,且 v2 支持更多尺寸
widthinteger图片宽度,v1 版本支持:1024x1024、1280x720、720x1280、2048x2048、2560x1440、1440x2560;v2 版本支持:512x512、640x360、360x640、1024x1024、1280x720、720x1280、2048x2048、2560x1440、1440x2560
heightinteger图片高度,v1 版本支持:1024x1024、1280x720、720x1280、2048x2048、2560x1440、1440x2560;v2 版本支持:512x512、640x360、360x640、1024x1024、1280x720、720x1280、2048x2048、2560x1440、1440x2560
image_numnumber生成图片数量,默认一张,支持生成 1-8 张
image否,和url/pdf_file 三选一string参考图,需 base64 编码,大小不超过 10M,最短边至少 15px,最长边最大 8192px,支持jpg/jpeg/png/bmp 格式。优先级:image > url > pdf_file,当image 字段存在时,url、pdf_file 字段失效
url否,和image/pdf_file 三选一string参考图完整 url,url 长度不超过 1024 字节,url 对应的图片需 base64 编码,大小不超过 10M,最短边至少 15px,最长边最大8192px,支持 jpg/jpeg/png/bmp 格式。优先级:image > url > pdf_file,当image 字段存在时,url 字段失效请注意关闭 URL 防盗链
pdf_file否,和image/url 三选一string参考图 PDF 文件,base64 编码,大小不超过10M,最短边至少 15px,最长边最大 8192px 。优先级:image > url > pdf_file,当image 字段存在时,url、pdf_file 字段失效
pdf_file_numstring需要识别的 PDF 文件的对应页码,当pdf_file 参数有效时,识别传入页码的对应页面内容,若不传入,则默认识别第 1 页
change_degree否,当 image、url或 pdf_file 字段存在时,为必需项integer参考图影响因子,支持 1-10 内;数值越大参考图影响越大

请求示例

{
   "prompt": "睡莲",
   "version": "v1",
   "width": 1024,
   "height": 1024,
   "image_num": 1,
   "image": ""(base64 编码),
   "change_degree":1
}

返回说明

JSON 格式

注意:若输入为 UTF-8 编码(通过指定 charset 参数),则返回内容为 UTF-8 编码

返回参数

参数类型描述
log_iduint64请求唯一标识码
dataobject返回数据
primary_task_idlong生成图片任务long类型 id,与“task_id”参数输出相同,该 id 可用于查询任务状态
task_idstring生成图片任务string类型 id,与“primary_task_id”参数输出相同,该 id 可用于查询任务状态

返回示例

{
    "data": {
        "primary_task_id": 1659384536691865192,
        "task_id": "1659384536691865192"
    },
    "log_id": 1583376431827547238
}

查询结果-接口说明

在线调试

您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。

请求示例

HTTP方法: POST

请求URL: https://aip.baidubce.com/rpc/2.0/ernievilg/v1/getImgv2

URL参数:

参数
access_token通过API Key和Secret Key获取的access_token,参考“Access Token获取

Header如下:

参数
Content-Typeapplication/json

并发数:付费后默认并发数为 2

请求格式

POST 方式调用

注意:要求使用 JSON 格式的结构体来描述一个请求的具体内容。

请求参数

参数是否必选类型描述
task_idlong或string从提交请求的提交接口的返回值中获取,可使用task_id 查询总任务

请求示例1

{
 "task_id":  1659384536691865192
}

请求示例2

{
 "task_id":  “1659384536691865192”
}

返回格式

JSON 格式

返回参数

参数是否必选类型描述
log_iduint64请求唯一标识码
dataobject返回数据
├─task_idlong任务 Id
├─task_statusstring计算总状态。有 INIT(初始化),WAIT(排队中), RUNNING(生成中), FAILED(失败), SUCCESS(成功)四种状态,只有 SUCCESS 为成功状态
├─task_progressnumber图片生成总进度,进度包含2种,0为未处理完,1为处理完成
├─sub_task_result_listobject[]子任务生成结果列表
├─sub_task_statusstring单风格图片状态。有 INIT(初始化),WAIT(排队中), RUNNING(生成中), FAILED(失败), SUCCESS(成功)四种状态,只有 SUCCESS 为成功状态
├─sub_task_progressnumber单任务图片生成进度,进度包含2种,0为未处理完,1为处理完成
├─sub_task_error_codestring单风格任务错误码。0:正常;501:文本黄反拦截;201:模型生图失败
├─final_image_listobject []单风格任务产出的最终图列表
├─img_urlstring图片所在 BOS http 地址,默认 1 小时失效
├─heightinteger图片像素信息-高度
├─widthinteger图片像素信息-宽度
├─img_approve_conclusionstring图片机审结果,"block":输出图片违规;"review": 输出图片疑似违规;"pass": 输出图片未发现问题;

计费规则:返回图片链接计费,因审核拦截等情况导致未返回图片链接不进行计费

返回示例

{
   "log_id": 1583376431827547238,
   "data": {
     "task_id": 1659384536691865192,
     "task_status": "SUCCESS",
     "task_progress": 1
     "sub_task_result_list": [
        {
          "sub_task_status": "SUCCESS",
          "sub_task_progress": 1,

          "sub_task_error_code": 0,
          "final_image_list": [
             {  
             "img_approve_conclusion": "pass",
               "img_url": "http://aigc-t2p-dev.bj.bcebos.com/artist-
long/50601_0_final.png?authorization=bce-auth-
v1%2F166d4fe6e8164b10bc178a36df207978%2F2023-04-
03T03%3A36%3A54Z%2F1800%2Fhost%2F116f64fdd5c17dff734783cd4ee144b036fd7ea7fdaa23
7928153c2039d4ceac",
                "width": 512,
                "height": 512
           }
        ]
      }
    ]
  }
}

综合案例

需求:使用百度“AI作画-基础版”功能实现输入文字输入图片

步骤一:登录百度智能云,领取资源

AI作画-百度AI开放平台

步骤二:创建百度AI作画应用

步骤三:创建sourceai/model/draw/baidu/aidraw.py文件,内容如下:

import requests
import json
import time


API_KEY = "mLi282q9CTaDMO0aTiCWvbrm"
SECRET_KEY = "lHhsIr6Ao7nOTQZk62OyTtQS25rsEkBa"

def draw_pic(log):
    taskid = draw(log)
    import time
    time.sleep(5)
    img_url = query(taskid)
    return img_url

def draw(log):
    url = "https://aip.baidubce.com/rpc/2.0/ernievilg/v1/txt2img?access_token=" + get_access_token()

    payload = json.dumps({
        "text": log,
        "resolution": "1024*1024",
        "style": "写实风格"
    })
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }

    response = requests.request("POST", url, headers=headers, data=payload)

    print(response.text)
    tempResult = json.loads(response.text)
    taskid = tempResult['data']['taskId']
    print(taskid)
    return taskid


def get_access_token():
    """
    使用 AK,SK 生成鉴权签名(Access Token)
    :return: access_token,或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))


def query(taskId):

    global img_url
    tempResult = query_task(taskId)
    status = tempResult['data']['status']
    if status == 1:
        img_url = tempResult['data']['img']
        print(img_url)
        return img_url
    elif status == 0:
        print('检查正在制作中,请等待...')
        time.sleep(1)
        img_url = query(taskId)
    return img_url



def query_task(taskId):
    url = "https://aip.baidubce.com/rpc/2.0/ernievilg/v1/getImg?access_token=" + get_access_token()

    payload = json.dumps({
        "taskId": taskId
    })
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }

    response = requests.request("POST", url, headers=headers, data=payload)

    print(response.text)
    tempResult = json.loads(response.text)
    return tempResult



if __name__ == '__main__':
    # draw("绝美壁纸,古装少女,月亮夜晚,祥云,古典纹样,月光柔美,花瓣飘落,多彩炫光,镭射光,浪漫色调,浅粉色,几何构成,丰富细节,唯美二次元")
    # query('17461266')
    draw_pic("绝美壁纸,古装少女,月亮夜晚,祥云,古典纹样,月光柔美,花瓣飘落,多彩炫光,镭射光,浪漫色调,浅粉色,几何构成,丰富细节,唯美二次元")

步骤四:创建sourceai/controller/draw_view.py文件,内容如下:

from django.shortcuts import render
from django.http import HttpResponse
from sourceai.model.imgc import app_imgc
import json
from sourceai.model.draw.baidu import aidraw_base


# Create your views here.


def draw_index(request):
    return render(request, 'draw/drawpic.html')


def draw_pic(request):
    product = request.POST.get('context')
    print('内容为:',product)
    result = ''
    code = 0
    try:
        if product.strip() != '':
            # result = aidraw_base.query("1699776106452878243")
            result = aidraw_base.draw_pic(product.strip())
            print(result)
    except Exception as e:
        result = 'static/img/nopic.jpg'
        code = -1


    return HttpResponse(json.dumps({"code":code,"res": result}))

步骤五:soft863ai/urls.py文件中添加如下内容:

from sourceai.controller import draw_view
    path('drawindex', draw_view.draw_index),
    path('drawto', draw_view.draw_pic),

全部内容如下:

from django.contrib import admin
from django.urls import path
from sourceai import views
from sourceai.controller import ocr_view
from sourceai.controller import imgc_view
from sourceai.controller import nlp_view
from sourceai.controller import draw_view

urlpatterns = [
    path('admin/', admin.site.urls),
    path('first', views.first_index),
    path('firstvalue', views.first_value),
    path('urltotext', views.url_to_text),
    path('ocrurl', views.ocr_index_url),
    path('imgtotext', views.img_to_text),
    path('ocrindex', views.ocr_index),
    path('ocrsim', ocr_view.ocr_sim),
    path('imgc', imgc_view.imgc_index),
    path('imgcto', imgc_view.img_to_text),
    path('poem', nlp_view.poem_index),
    path('poemto', nlp_view.poem_to_create),
    path('drawindex', draw_view.draw_index),
    path('drawto', draw_view.draw_pic),
]

步骤六:创建templates/draw/drawpic.html文件,内容如下:

<!doctype html>
<html>
<head>
    <meta charset=utf-8>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <link rel="icon" href="/static/img/touxiang.png"> <!-- 网页图标 -->
    <link rel="stylesheet" type="text/css" href="/static/css/index.css"/>
    <link rel="stylesheet" href="/static/css/index.css">
    <link rel="stylesheet" href="/static/css/animate.css">
    <script src="/static/js/jquery-1.11.3.min.js"></script>
    <script src="/static/js/typeit.min.js"></script>
    <script src="/static/js/rem.js" type="text/javascript" charset="utf-8"></script>
</head>
<body style="cursor: url(img/body2.png);">
<div class="canvas" style="opacity: .2">
    <iframe frameborder="0" src="/static/js/index.html" style="width: 100%; height: 100%"></iframe>
</div>
<div id="app">
    <div class="header_title">AI绘图系统</div>
    <div class="header_time"></div>
    <!-- //左侧显示信息 -->
    <div class="side_left">
            <textarea id="context1"
                      style="width: 4.2rem;min-height: 5rem;background: rgba(255, 255, 255, 0);color:#3cf7f1;border:0;outline: none;margin-top: 1rem;margin-left:0.23rem;display: inline-block;">
            </textarea>
    </div>
    <div class="face-capture" id="face-capture">
        <div class="faceCon">
            <div class="videoFaceCon">
                <div class="title">点击绘制</div>
                <div class="imgCoverCon">
                    <div class="retiveCon">
                        <img src="/static/img/1233.png" class="retiveConImg allRoteAnmi">
                        <img src="/static/img/fanyi.png" class="videoFace">
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="side_right">
        <div class="rightCon">
            <div>

                <img class="textConImg"
                     src=""
                     alt="" width="400px">
            </div>

        </div>

    </div>
    <script type="text/javascript">
        window.onload = function () {
            $('.side_left').show();
            $('.side_right').show();
            // 时间
            var timer = '';
            var taker = '';
            timer && clearInterval(_this.timer);
            timer = setInterval(function () {
                var show_day = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'];
                var nowtime = new Date();
                var year = nowtime.getFullYear();
                var month = nowtime.getMonth() + 1;
                var date = nowtime.getDate();
                var day = nowtime.getDay();
                var hour = nowtime.getHours();
                var minutes = nowtime.getMinutes();
                var second = nowtime.getSeconds();
                month < 10 ? month = '0' + month : month;
                hour < 10 ? hour = '0' + hour : hour;
                minutes < 10 ? minutes = '0' + minutes : minutes;
                second < 10 ? second = '0' + second : second;
                var show_day_s = day === 0 ? show_day[6] : show_day[day - 1];
                // _this.mytime = year + "年" + month + "月" + date + "日  " + show_day_s+ nowtime.toLocaleTimeString('chinese', { hour12: false });
                var mytimer = year + "年" + month + "月" + date + "日" + show_day_s + ' ' +
                    hour + ':' + minutes;
                $('.header_time').html(mytimer)
            }, 1000);

            //时间
            function goanimation() {
                taker = '';
                taker = new TypeIt('.rightCon', {
                    lifeLike: true,
                    cursorSpeed: 1000,
                    waitUntilVisible: false,
                    speed: 100
                }).go();
            }

            $('.videoFaceCon').click(() => {
                log = $("#context1").val()
                $('.title').html('正在绘制..');

                //创建一个存储表单数据的对象
                var fd = new FormData();
                fd.append("context", log);
                fd.append("csrfmiddlewaretoken", '{{ csrf_token }}')
                $.ajax({
                    url: '/drawto',
                    type: 'post',
                    data: fd,
                    dataType: 'json',
                    cache: false,
                    processData: false,
                    contentType: false,
                    success: function (obj) {
                        console.log(obj)
                        console.log(obj.res)
                        if (obj.code == 0) {
                            $('.textConImg').attr("src", obj.res)
                            $('.title').html('恭喜您,绘制成功!')
                            $('.rightCon').show()
                            $('.rightCon').addClass('fadeInRightBig');
                            {% comment %}   goanimation();
                               taker.reset();{% endcomment %}
                        } else {
                            $('.textConImg').attr("src", obj.res)
                            $('.title').html('绘制失败!')
                            $('.rightCon').show()
                            $('.rightCon').addClass('fadeInRightBig');
                        }

                    }
                })


            })
        }
    </script>
</body>
</html>

步骤七:替换前端资源文件static

步骤八:启动soft863ai项目

步骤九:验证,浏览器输入http://127.0.0.1:8000/drawindex

  • 33
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数智侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值