当前位置:AIGC资讯 > AIGC > 正文

使用gradio部署自己的AI应用 AI对话 和 AI绘画

gradio部署自己的 AI应用 AI对话(chatglm) 和 AI绘画(stable diffusion)

前言 提前准备: 开始 1,飞浆操作 2,部署 对话 和 绘画 3,natapp操作 4,api方式启动sd和glm 5,编写gradio应用接入sd和glm接口 6,启动webui程序 并 内网穿透 7,优势

前言

1,对前端不是很熟悉,电脑没有很高的配置,又不想自己多花钱,如何自己不花一分钱搭建一个有前端页面并且接入了本地化部署的对话和绘画应用呢?

提前准备:

1,飞浆账号(免费的GPU算力)
2,natapp(免费内网穿透工具)

开始

1,飞浆操作

。进入百度飞浆主页(https://aistudio.baidu.com),我的创作-创建项目-Notebook-创建-启动环境-选择V100 16GB-确定
。进入项目之后,点击右上角的加号-选择终端进入,这里除了不能用sudo超级用户权限之外,其他的操作都没什么影响,

2,部署 对话 和 绘画

正常部署stable diffusion和chatglm即可
不会的可以参考我的主页里面,有详细的部署教程

3,natapp操作

进入natapp官网,下载natapp-linux工具,并且配置好ip和端口(不会操作的可以搜索,网上教程有很多),把下载好的natapp直接拖进飞浆项目目录(小于500m的不需要做目录挂载,直接拖入即可)回到飞浆终端
输入:

chmod +x natapp

为文件添加可执行权限

4,api方式启动sd和glm
# chatglm
python Chatglm-6B/api.py

#stable diffusion
cd stable-diffusion-webui
bash webui.sh --api --nowebui
5,编写gradio应用接入sd和glm接口

源码:

import numpy as np
import gradio as gr
import json
import requests
import sys

# import test2
import os       
# from server import StableDiffusion, Options
from IPython.display import display, clear_output
from PIL import Image  # 导入Pillow库,用于图像处理和保存

import py3langid as langid

import baidu_Translate

def glm_api(text):
    print(text)
    url = "http://127.0.0.1:8000"
    headers = {
        'Content-Type': 'application/json'
    }
    data = {
        'prompt': text,
        'history': []
    }

    response = requests.post(url, headers=headers, json=data)

    if response.status_code == 200:
        result = response.text
        data = json.loads(result)
        rep = data["response"]
        return rep
    else:
        return response.status_code


s_model = None

def select_model(text):
    # print(text)
    if text == "中国古风":
        global s_model
        s_model = "/home/aistudio/sd_model/Guofeng33"
        

def stable_diffusion_txt2img_api(prompt, model_name="/home/aistudio/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors"):
    import sd_api
    img_name = sd_api.text_img_api(prompt, model_name)
    return img_name


def stable_diffusion_img2img_api(prompt,img):
    import sd_api
    img_name = sd_api.img_img_api(prompt,img)
    return img_name



def Tra(text):
    lang_type = langid.classify(text)[0]
    if lang_type == "zh":
        text = baidu_Translate.Text_Translate(text, from_lang='en', to_lang='zh')
    elif lang_type == "en":
        text = baidu_Translate.Text_Translate(text, from_lang='zh', to_lang='en')
    else:
        text = "抱歉,目前支持支 中文 和 英文"
    return text

def run_web():
    with gr.Blocks() as demo:
        gr.Markdown("文本对话 | 文本绘图")

        with gr.Tab("回答文本"):
            with gr.Column():
                text_input_text = gr.Textbox(label="输入文本")
                text_output_text = gr.Textbox(label="等待输出")
            text_button = gr.Button("回答")

        with gr.Tab("生成图片"):
            with gr.Tab("txt2img"):
                with gr.Row():
                    text_input_img = gr.Textbox(label="输入模型")
                    text2_input_img = gr.Textbox(label="输入文本")
                    text_list.append(text_input_img)
                    text_list.append(text2_input_img)
                    image_output_img = [gr.Image(label="图片")]
                image_button = gr.Button("生成")
            with gr.Tab("img2img"):
                with gr.Row():
                    img_input_img = gr.Textbox(label="输入文本")
                    img_input_img2 = gr.Image(label="输入图片")
                    image_output_img2 = [gr.Image(label="图片")]
                image_button2 = gr.Button("生成")

        with gr.Tab("文本翻译"):
            with gr.Column():
                text_input_text2 = gr.Textbox(label="输入")
                text_output_text2 = gr.Textbox(label="翻译结果")
            text_button2 = gr.Button("翻译")


        with gr.Accordion("打开查看更多!"):
            gr.Markdown("选择 回答文本 开始对话,选择 生成图片 输入文本生成图片...")
        
        
        # text_button1.click(select_model, inputs=animal_choice, outputs=text_output_text1)# 选择模型
        text_button.click(glm_api, inputs=text_input_text, outputs=text_output_text)# glm对话 api
        image_button.click(stable_diffusion_txt2img_api, inputs=text_list, outputs=image_output_img)# sd文生图 api
        image_button2.click(stable_diffusion_img2img_api, inputs=[img_input_img,img_input_img2], outputs=image_output_img2)# sd图生图 api
        text_button2.click(Tra, inputs=text_input_text2, outputs=text_output_text2)# 百度翻译 api

    demo.launch(share=True, server_port=7870)




if __name__ == "__main__":
    run_web()


大致就是一个输入,一个输出,调用本地的对话和绘画接口,输入返回到gradio输出到页面上,可以增加切换模型的单选框,像sd的ui界面一样,自己在基础上调试就可以了

6,启动webui程序 并 内网穿透

启动程序

python gradio_run.py
# 需要提前在natapp官网创建好账号并且配置好映射的ip和端口
./natapp-authtoken=你自己的natapp token

然后浏览器访问natapp开放的域名网址即可

7,优势

不占用本地的任何gpu,不需要自己花钱买配置,飞浆每天可以领算力点,也有新手礼包,可以玩很久的免费gpu

更新时间 2023-11-24