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

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

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


image.png


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】,可以自行下载,有问题可以浏览一起解决


目录
相关文章
|
8月前
|
开发框架 监控 安全
Windows Defender 导致 Web IIS 服务异常停止排查
某日凌晨IIS服务异常停止,经查为Windows Defender安全补丁KB2267602触发引擎更新,导致系统资源波动,进而引发应用池回收。确认非人为操作,系统无重启。通过分析日志与监控,定位原因为Defender更新后扫描加重负载。解决方案:将IIS及.NET相关路径添加至Defender排除列表,避免业务影响。
899 116
|
10月前
|
运维 数据可视化 C++
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
2025年热门Web化容器部署工具对比:Portainer与Websoft9。Portainer以轻量可视化管理见长,适合技术团队运维;Websoft9则提供一站式应用部署与容器管理,内置丰富开源模板,降低中小企业部署门槛。两者各有优势,助力企业提升容器化效率。
629 1
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
|
11月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
1001 0
|
11月前
|
Java 应用服务中间件 Docker
java-web部署模式概述
本文总结了现代 Web 开发中 Spring Boot HTTP 接口服务的常见部署模式,包括 Servlet 与 Reactive 模型、内置与外置容器、物理机 / 容器 / 云环境部署及单体与微服务架构,帮助开发者根据实际场景选择合适的方案。
654 25
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
人工智能 安全 程序员
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
1588 12
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
695 35
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
460 19
|
应用服务中间件 Linux nginx
部署使用 CHAT-NEXT-WEB 基于 Deepseek
本文介绍如何在阿里云轻量服务器上部署基于 `Deepseek` 的 `CHAT-NEXT-WEB` 项目。首先,准备一台 Linux 服务器并安装 Docker,确保防火墙允许特定端口访问。接着,通过阿里云容器镜像服务解决国内网络限制问题,将镜像推送到私有仓库并拉取到本地。配置并启动 `chat-next` 项目,使用 Deepseek API 进行优化。最后,安装 Nginx 和 Certbot 配置 HTTPS 访问,确保安全性和自动续签。整个过程需严格遵循官方文档,以避免因网络问题导致的安装失败。
2294 9