修正docker镜像构建

This commit is contained in:
2024-09-25 16:07:12 +08:00
parent 3189caf7aa
commit 72794f699e
13 changed files with 44 additions and 46 deletions

View File

@@ -12,7 +12,7 @@ ENV PYTHONUNBUFFERED=1 \
PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
# 安装依赖
COPY ./services/paddle_services/requestments.txt /app/requirements.txt
COPY requestments.txt /app/requirements.txt
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone \
&& pip install --no-cache-dir -r requirements.txt \
&& pip uninstall -y onnxruntime onnxruntime-gpu \

View File

@@ -0,0 +1,34 @@
"""
信息抽取关键词配置
"""
# 患者姓名
PATIENT_NAME = ['患者姓名']
# 入院日期
ADMISSION_DATE = ['入院日期']
# 出院日期
DISCHARGE_DATE = ['出院日期']
# 发生医疗费
MEDICAL_EXPENSES = ['费用总额']
# 个人现金支付
PERSONAL_CASH_PAYMENT = ['个人现金支付']
# 个人账户支付
PERSONAL_ACCOUNT_PAYMENT = ['个人账户支付']
# 个人自费金额
PERSONAL_FUNDED_AMOUNT = ['自费金额', '个人自费']
# 医保类别
MEDICAL_INSURANCE_TYPE = ['医保类型']
# 就诊医院
HOSPITAL = ['医院']
# 就诊科室
DEPARTMENT = ['科室']
# 主治医生
DOCTOR = ['主治医生']
# 住院号
ADMISSION_ID = ['住院号']
# 医保结算单号码
SETTLEMENT_ID = ['医保结算单号码']
# 年龄
AGE = ['年龄']
# 大写总额
UPPERCASE_MEDICAL_EXPENSES = ['大写总额']

View File

@@ -0,0 +1,26 @@
from flask import Flask, request
from paddleclas import PaddleClas
from utils import process_request
app = Flask(__name__)
CLAS = PaddleClas(model_name='text_image_orientation')
@app.route('/clas/orientation', methods=['POST'])
@process_request
def orientation():
"""
判断图片旋转角度,逆时针旋转该角度后为正。可能值['0', '90', '180', '270']
:return: 最有可能的两个角度
"""
img_path = request.form.get('img_path')
clas_result = CLAS.predict(input_data=img_path)
clas_result = next(clas_result)[0]
if clas_result['scores'][0] < 0.5:
return ['0', '90']
return clas_result['label_names']
if __name__ == '__main__':
app.run('0.0.0.0', 5005)

View File

@@ -0,0 +1,24 @@
import json
from flask import Flask, request
from paddlenlp import Taskflow
from utils import process_request
from . import PATIENT_NAME, ADMISSION_DATE, DISCHARGE_DATE, MEDICAL_EXPENSES
app = Flask(__name__)
COST_LIST_SCHEMA = PATIENT_NAME + ADMISSION_DATE + DISCHARGE_DATE + MEDICAL_EXPENSES
COST = Taskflow('information_extraction', schema=COST_LIST_SCHEMA, model='uie-x-base',
task_path='../../model/cost_list_model', layout_analysis=False, precision='fp16')
@app.route('/nlp/cost', methods=['POST'])
@process_request
def cost():
img_path = request.form.get('img_path')
layout = request.form.get('layout')
return COST({'doc': img_path, 'layout': json.loads(layout)})
if __name__ == '__main__':
app.run('0.0.0.0', 5004)

View File

@@ -0,0 +1,28 @@
import os.path
import cv2
from flask import Flask, request
from paddle_detection import detector
from utils import process_request, parse_img_path
app = Flask(__name__)
@app.route('/det/books', methods=['POST'])
@process_request
def books():
img_path = request.form.get('img_path')
result = detector.get_book_areas(img_path)
dirname, img_name, ext = parse_img_path(img_path)
books_path = []
for i in range(len(result)):
save_path = os.path.join(dirname, img_name + '_book_' + str(i) + '.' + ext)
cv2.imwrite(save_path, result[i])
books_path.append(save_path)
return books_path
if __name__ == '__main__':
app.run('0.0.0.0', 5006)

View File

@@ -0,0 +1,25 @@
import os
import cv2
from flask import Flask, request
from doc_dewarp import dewarper
from utils import process_request, parse_img_path
app = Flask(__name__)
@app.route('/dewarp', methods=['POST'])
@process_request
def dewarp():
img_path = request.form.get('img_path')
img = cv2.imread(img_path)
dewarped_img = dewarper.dewarp_image(img)
dirname, img_name, ext = parse_img_path(img_path)
save_path = os.path.join(dirname, img_name + '_dewarped.' + ext)
cv2.imwrite(save_path, dewarped_img)
return save_path
if __name__ == '__main__':
app.run('0.0.0.0', 5007)

View File

@@ -0,0 +1,26 @@
import json
from flask import Flask, request
from paddlenlp import Taskflow
from utils import process_request
from . import HOSPITAL, DEPARTMENT, PATIENT_NAME, ADMISSION_DATE, DISCHARGE_DATE, DOCTOR, ADMISSION_ID, AGE
app = Flask(__name__)
DISCHARGE_RECORD_SCHEMA = (
HOSPITAL + DEPARTMENT + PATIENT_NAME + ADMISSION_DATE + DISCHARGE_DATE + DOCTOR + ADMISSION_ID + AGE
)
DISCHARGE = Taskflow('information_extraction', schema=DISCHARGE_RECORD_SCHEMA, model='uie-x-base',
task_path='../../model/discharge_record_model', layout_analysis=False, precision='fp16')
@app.route('/nlp/discharge', methods=['POST'])
@process_request
def discharge():
img_path = request.form.get('img_path')
layout = request.form.get('layout')
return DISCHARGE({'doc': img_path, 'layout': json.loads(layout)})
if __name__ == '__main__':
app.run('0.0.0.0', 5003)

View File

@@ -0,0 +1,18 @@
from flask import Flask, request
from paddleocr import PaddleOCR
from utils import process_request
app = Flask(__name__)
OCR = PaddleOCR(use_angle_cls=False, show_log=False, gpu_id=0, det_db_box_thresh=0.3)
@app.route('/ocr', methods=['POST'])
@process_request
def ocr():
img_path = request.form.get('img_path')
return OCR.ocr(img_path, cls=False)
if __name__ == '__main__':
app.run('0.0.0.0', 5001)

View File

@@ -0,0 +1,30 @@
import json
from flask import Flask, request
from paddlenlp import Taskflow
from utils import process_request
from . import PATIENT_NAME, ADMISSION_DATE, DISCHARGE_DATE, MEDICAL_EXPENSES, PERSONAL_CASH_PAYMENT, \
PERSONAL_ACCOUNT_PAYMENT, PERSONAL_FUNDED_AMOUNT, MEDICAL_INSURANCE_TYPE, ADMISSION_ID, SETTLEMENT_ID, \
UPPERCASE_MEDICAL_EXPENSES
app = Flask(__name__)
SETTLEMENT_LIST_SCHEMA = (
PATIENT_NAME + ADMISSION_DATE + DISCHARGE_DATE + MEDICAL_EXPENSES + PERSONAL_CASH_PAYMENT
+ PERSONAL_ACCOUNT_PAYMENT + PERSONAL_FUNDED_AMOUNT + MEDICAL_INSURANCE_TYPE + ADMISSION_ID + SETTLEMENT_ID
+ UPPERCASE_MEDICAL_EXPENSES
)
SETTLEMENT_IE = Taskflow('information_extraction', schema=SETTLEMENT_LIST_SCHEMA, model='uie-x-base',
task_path='../../model/settlement_list_model', layout_analysis=False, precision='fp16')
@app.route('/nlp/settlement', methods=['POST'])
@process_request
def settlement():
img_path = request.form.get('img_path')
layout = request.form.get('layout')
return SETTLEMENT_IE({'doc': img_path, 'layout': json.loads(layout)})
if __name__ == '__main__':
app.run('0.0.0.0', 5002)

View File

@@ -0,0 +1,24 @@
import os
from flask import jsonify
def process_request(func):
"""
api通用处理函数
"""
def wrapper(*args, **kwargs):
try:
result = func(*args, **kwargs)
return jsonify(result), 200
except Exception as e:
return jsonify({'error': str(e)}), 500
return wrapper
def parse_img_path(img_path):
dirname = os.path.dirname(img_path)
img_name, ext = os.path.basename(img_path).rsplit('.', 1)
return dirname, img_name, ext