深度模型部署:医学图像分割

深 度 模 型 部 署 : 医 学 图 像 分 割 深度模型部署:医学图像分割

# -*- coding: utf-8 -*-
#------------------------------------------------------0.引入库--------------------------------------------------------------
import base64
from PIL import Image
import os
import time
from flask import request, Flask

import  pydicom
import numpy as np
import tensorflow as tf
from scipy.misc import imsave


# 实例化Flask
app = Flask(__name__)


#------------------------------------------------------1.加载模型--------------------------------------------------------------
# 导入模型参数
def load_graph(frozen_graph_filename):  # 获取分割模型
    # We parse the graph_def file
    with tf.gfile.GFile(frozen_graph_filename, "rb") as f:
        graph_def = tf.GraphDef()

        graph_def.ParseFromString(f.read())

        # We load the graph_def in the default graph
    with tf.Graph().as_default() as graph:
        tf.import_graph_def(
            graph_def,
            input_map=None,
            return_elements=None,
            name="U-NET",
            op_dict=None,
            producer_op_list=None
        )
    return graph

graph = load_graph('/root/medical_seg_deploy/imagetest_U_93.65.pb')



#------------------------------------------------------4.模型预测--------------------------------------------------------------
def predict_image(imageFilePath):
    input_image = graph.get_tensor_by_name('U-NET/Input/image:0')
    out_image = graph.get_tensor_by_name('U-NET/prediction_layer/final_conv:0')
    with tf.Session(graph=graph) as sess:
        im = pydicom.read_file(imageFilePath).pixel_array  # 读取dcm图像
        im = np.expand_dims(im, axis=2)
        im = im[np.newaxis, ...]
        prob = sess.run(out_image, feed_dict={input_image: im})
        prob = np.squeeze(prob, axis=0)
        preb = prob.argmax(axis=2)
        imsave('preb.png', preb)  # 保存预测图像
        with open("preb.png", 'rb') as f:
            return base64.b64encode(f.read())


#------------------------------------------------------5.服务返回--------------------------------------------------------------
# 定义回调函数,接收来自/的post请求,并返回预测结果
@app.route("/", methods=['POST'])
def return_result():
    startTime = time.time()
    received_file = request.files['file']
    imageFileName = received_file.filename
    if received_file:
        received_dirPath = './resources/received_images'
        if not os.path.isdir(received_dirPath):
            os.makedirs(received_dirPath)
        imageFilePath = os.path.join(received_dirPath, imageFileName)
        received_file.save(imageFilePath)
        print('图片文件保存到此路径:%s' % imageFilePath)
        usedTime = time.time() - startTime
        print('接收图片并保存,总共耗时%.2f秒' % usedTime)
        startTime = time.time()
        print(imageFilePath)
        result = predict_image(imageFilePath)
        #print(result)
        usedTime = time.time() - startTime
        print('完成对接收图片的检测,总共耗时%.2f秒' % usedTime)
        return result
    else:
        return 'failed'
#------------------------------------------------------6.主函数--------------------------------------------------------------
if __name__ == "__main__":

    # imageFilePath = 'segmentation-0_059.dcm'
    # result = predict_image(imageFilePath)
    # print("模型获得{}元".format(result))
    app.run("127.0.0.1", port=5000)




[uwsgi]
http=:5001
wsgi-file=/root/medical_seg_deploy/serve.py
callable=app
processes=4
threads=2
daemonize=/root/flask_service/flask.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值