基于PaddleHub一键部署ernie_vilg文图生成等Web应用服务

举报
livingbody 发表于 2022/11/22 01:21:17 2022/11/22
【摘要】 一、基于PaddleHub一键部署ernie_vilg文图生成等Web应用服务 1.基本介绍之前写过基于PaddleHub的Web项目,然而晃晃悠悠2年过去了,许多hub升级了,接口改了,经常被问到报错了怎么办,这下和ernie_vilg部署一同作了。基本上只要会html基础、js基础、python基础就可以动手搭建了,属于有手就能干的入门项目。 2.基本功能抠图换背景证件照美颜OCRer...

一、基于PaddleHub一键部署ernie_vilg文图生成等Web应用服务

1.基本介绍

之前写过基于PaddleHub的Web项目,然而晃晃悠悠2年过去了,许多hub升级了,接口改了,经常被问到报错了怎么办,这下和ernie_vilg部署一同作了。基本上只要会html基础、js基础、python基础就可以动手搭建了,属于有手就能干的入门项目。

2.基本功能

  • 抠图
  • 换背景证件照
  • 美颜
  • OCR
  • ernie_vilg文图生成

3.用到的几个包

  • paddlepaddle、paddlehub包
  • flask_bootstrap,提供bootstrap支持
  • blueprint,通过Blueprint来组织URL以及处理请求

二、hub serving服务启动

1.json文件编写

主要有以下部分:

  • 模型名称
  • 模型版本
  • 模型参数(常见的batch size等,但不一定都是)
  • 端口
  • 多进程

hub serving start --config config.json

{
  "modules_info": {
    "face_landmark_localization": {
      "init_args": {
        "version": "1.0.3"
      },
      "predict_args": {
        "batch_size": 1
      }
    },
    "deeplabv3p_xception65_humanseg": {
      "init_args": {
        "version": "1.1.2"
      },
      "predict_args": {
        "batch_size": 1
      }
    },
    "ernie_vilg": {
      "init_args": {
        "version": "1.0.0"
      },
      "predict_args": {
      }
    }
  },
  "port": 8866,
  "use_multiprocess": false,
  "workers": 2
}

2.启动服务

hub serving start --config config.json
(p2) PS C:\Users\livingbody\Desktop\ernie_vilg\flaskautocut> hub serving start --config config.json
[2022-08-31 09:22:38,624] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object
[2022-08-31 09:22:38,683] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object
[2022-08-31 09:22:38,894] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object
 * Serving Flask app 'paddlehub.serving.app_compat' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
INFO 2022-08-31 09:23:02,049 _internal.py:224]  * Running on all addresses (0.0.0.0)
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://127.0.0.1:8866
 * Running on http://192.168.8.8:8866 (Press CTRL+C to quit)

如上图,在8866端口启动成功

3.其他

目前,hub会自动判断并选择显卡,所以无需特别设置。

三、页面编写

1.提交页面

主要完成2项输入

  • 图片描述
  • 风格选择
   <label class="col-sm-2 control-label">输入描述</label>
                <div class="col-sm-3">
                    <input type="text" class="form-control" name="describe" id="describe" placeholder="Text"
                           value="悠然见南山">
                </div>
                <label class="col-sm-2 control-label">背景色选择</label>
                <div class="col-sm-2">
                    <select class="form-control" name="selected_color">
                        <option value="油画">油画</option>
                        <option value="水彩">水彩</option>
                        <option value="粉笔画">粉笔画</option>
                        <option value="卡通">卡通</option>
                        <option value="儿童画">儿童画</option>
                        <option value="蜡笔画">蜡笔画</option>
                    </select>

2.展示页面

主要完成生成展示,具体是对生成的图片列表进行遍历展示。

 {% if file_list %}
        {% for filename in file_list %}
        <a href='{{ filename }}' download="mypic.jpg">
            <img class="col-md-6 img-responsive  img-thumbnail" src="{{ filename }}"
                 alt="你的图片被外星人劫持了~~" width="50%"/>
        </a>
        {% endfor %}
        {% else %}
        <h1>file_list is none</h1>
 {% endif %}

四、后端调用

1.接收页面form提交

  • 收取页面提交的图片描述、风格选择参数
  • 调用ernie_vilg_gen函数,生成图片
  • 将文件列表绑定到展示页面
# 接收页面传递参数
@index_ernie_vilg.route('/ernie_vilg', methods=['POST', 'GET'])  # 添加路由
def ernie_vilg():
    if request.method == 'POST':
        try:
            ernie_vilg_text = request.form.get('describe')
            selected_style = request.form.get('selected_style')
            # print(ernie_vilg_text)           
            file_list = ernie_vilg_gen(ernie_vilg_text, selected_style)
            # file_list = [f'static/images/target/{fff}' for fff in file_list]
            for filename in file_list:
                print(filename)
            return render_template('ernie_vilg_ok.html', file_list=file_list)
        except Exception as e:
            print(e)
            # return render_template('404.html')
    return render_template('ernie_vilg.html')

2.serving调用

调用serving的api,生成图片

# 生成
def ernie_vilg_gen(ernie_vilg_text, selected_style):
    # 发送HTTP请求
    data = {'text_prompts': ernie_vilg_text, 'style': "油画"}
    headers = {"Content-type": "application/json"}
    url = "http://127.0.0.1:8866/predict/ernie_vilg"
    r = requests.post(url=url, headers=headers, data=json.dumps(data))
    # print(r.json())
    # 获取返回结果
    file_list = []
    for i, result in enumerate(r.json()["results"]):
        image = Image.open(BytesIO(base64.b64decode(result)))
        image.save('static/images/target/result_{}.png'.format(i))
        file_list.append('static/images/target/result_{}.png'.format(i))
        print('result_{}.png'.format(i))
    return file_list

五、启动项目

  • flask bootstrap支持
pip install flask_bootstrap
  • flask blueprint
pip install flask-blueprint
  • run下
set CUDA_VISIBLE_DEVICES=0
hub serving start --config config.json
python app.py
  • 代码
    代码上传至项目根目录了【ernievilg_web.zip】,可以自行下载,有问题可以浏览一起解决

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。