深
度
模
型
部
署
:
医
学
图
像
分
割
深度模型部署:医学图像分割
深度模型部署:医学图像分割
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
app = Flask(__name__)
def load_graph(frozen_graph_filename):
with tf.gfile.GFile(frozen_graph_filename, "rb") as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
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')
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
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())
@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)
usedTime = time.time() - startTime
print('完成对接收图片的检测,总共耗时%.2f秒' % usedTime)
return result
else:
return 'failed'
if __name__ == "__main__":
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