TensorFlow2.0结合Flask搭建服务器端处理图片修复

2 篇文章 0 订阅
2 篇文章 0 订阅

此文作为自己备份用,不做其他解释。

服务器端:

from flask import Flask, request
import json
import numpy as np
import sys
import traceback
import cv2
import tensorflow as tf
import neuralgym as ng


from inpaint_model import InpaintCAModel

checkpoint_dir = 'model_logs/release_places2_256'
output_dir = 'static/'

app = Flask(__name__)


@app.route('/ai_repaint', methods=['POST'])
def ai_repaint():
    FLAGS = ng.Config('inpaint.yml')
    result = {}
    try:
       image_file = request.files['image']
       image_file.save(output_dir+'tmp_image.png')
       mask_file = request.files['mask']
       mask_file.save(output_dir+'tmp_mask.png')

       image_input_path =output_dir+ 'tmp_image.png'
       mask_path = output_dir+'tmp_mask.png'
       image_out_path = output_dir+'temp_result.png'

       model = InpaintCAModel()
       image = cv2.imread(image_input_path)
       mask = cv2.imread(mask_path)
       # mask = cv2.resize(mask, (0,0), fx=0.5, fy=0.5)

       assert image.shape == mask.shape

       h, w, _ = image.shape
       grid = 8
       image = image[:h // grid * grid, :w // grid * grid, :]
       mask = mask[:h // grid * grid, :w // grid * grid, :]
       print('Shape of image: {}'.format(image.shape))

       image = np.expand_dims(image, 0)
       mask = np.expand_dims(mask, 0)
       input_image = np.concatenate([image, mask], axis=2)

       sess_config = tf.compat.v1.ConfigProto()
       sess_config.gpu_options.allow_growth = True
       with tf.compat.v1.Session(config=sess_config) as sess:
            input_image = tf.constant(input_image, dtype=tf.float32)
            output = model.build_server_graph(FLAGS, input_image)
            output = (output + 1.) * 127.5
            output = tf.reverse(output, [-1])
            output = tf.saturate_cast(output, tf.uint8)
            vars_list = tf.compat.v1.get_collection(tf.compat.v1.GraphKeys.GLOBAL_VARIABLES)
            assign_ops = []
            for var in vars_list:
                vname = var.name
                from_name = vname
                var_value = tf.train.load_variable(checkpoint_dir, from_name)
                assign_ops.append(tf.compat.v1.assign(var, var_value))
            sess.run(assign_ops)
            print('Model loaded.')
            temp_result = sess.run(output)
            cv2.imwrite(image_out_path, temp_result[0][:, :, ::-1])
            result['ret'] = 1
            result['msg'] = 'success'
            result['result'] = image_out_path


    except Exception as e:
        print('{} error {}'.format(sys._getframe().f_code.co_name, traceback.format_exc()))
        result['ret'] = 0
        result['msg'] = e.args[0]
    finally:
        return json.dumps(result, ensure_ascii=False, default=lambda o: o.__dict__)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5003, debug=False)

客户端:

import os
import requests

http_url = 'http://127.0.0.1:5003'


def ai_repaint(image_input_path,mask_input_path):
    files = {}
    if not os.path.exists(image_input_path):  #如果文件不存,则返回None
           return None
    if not os.path.exists(mask_input_path):  #如果文件不存,则返回None
           return None

    files['image'] = (os.path.basename(image_input_path), open(image_input_path, 'rb'))
    files['mask'] = (os.path.basename(mask_input_path), open(mask_input_path, 'rb'))

    response = requests.post(http_url + '/ai_repaint', files=files)
    result = response.json()
    result['httpcode'] = response.status_code

    if 'result' in result:
        return result['result']
    else:
        return None



if __name__ == '__main__':
    print(ai_repaint(r'examples/places2/case1_input.png',r'examples/places2/case1_mask.png')) #输入文件内容

其中所需两张图片:

 输出一张:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

了悟生死大事

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

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

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

打赏作者

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

抵扣说明:

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

余额充值