修正带旋转的ie_result的绘制

This commit is contained in:
2024-08-12 14:00:32 +08:00
parent ba4c310000
commit 7d2112ecaa

View File

@@ -11,6 +11,7 @@ from PIL import ImageDraw, Image, ImageFont
from db import MysqlSession from db import MysqlSession
from db.mysql import ZxIeCost, ZxIeDischarge, ZxIeSettlement, ZxPhhd, ZxOcr, ZxPhrec from db.mysql import ZxIeCost, ZxIeDischarge, ZxIeSettlement, ZxPhhd, ZxOcr, ZxPhrec
from ucloud import ufile from ucloud import ufile
from util import image_util
def check_ie_result(pk_phhd): def check_ie_result(pk_phhd):
@@ -19,57 +20,26 @@ def check_ie_result(pk_phhd):
session = MysqlSession() session = MysqlSession()
phhd = session.query(ZxPhhd.cXm).filter(ZxPhhd.pk_phhd == pk_phhd).one() phhd = session.query(ZxPhhd.cXm).filter(ZxPhhd.pk_phhd == pk_phhd).one()
json_result["cXm"] = phhd.cXm json_result["cXm"] = phhd.cXm
settlement = session.query(ZxIeSettlement.pk_ie_settlement, ZxIeSettlement.name, ZxIeSettlement.admission_date, settlement = (session.query(ZxIeSettlement.pk_ie_settlement, ZxIeSettlement.name, ZxIeSettlement.admission_date,
ZxIeSettlement.discharge_date, ZxIeSettlement.discharge_date, ZxIeSettlement.medical_expenses,
ZxIeSettlement.medical_expenses, ZxIeSettlement.personal_cash_payment, ZxIeSettlement.personal_cash_payment, ZxIeSettlement.personal_account_payment,
ZxIeSettlement.personal_account_payment, ZxIeSettlement.personal_funded_amount, ZxIeSettlement.medical_insurance_type,
ZxIeSettlement.personal_funded_amount, ZxIeSettlement.medical_insurance_type, ZxIeSettlement.admission_id, ZxIeSettlement.settlement_id)
ZxIeSettlement.admission_id, ZxIeSettlement.settlement_id).filter( .filter(ZxIeSettlement.pk_phhd == pk_phhd).one())
ZxIeSettlement.pk_phhd == pk_phhd).one() settlement_result = settlement._asdict()
settlement_result = {
"pk_ie_settlement": settlement.pk_ie_settlement,
"name": settlement.name,
"admission_date": settlement.admission_date,
"discharge_date": settlement.discharge_date,
"medical_expenses": settlement.medical_expenses,
"personal_cash_payment": settlement.personal_cash_payment,
"personal_account_payment": settlement.personal_account_payment,
"personal_funded_amount": settlement.personal_funded_amount,
"medical_insurance_type": settlement.medical_insurance_type,
"admission_id": settlement.admission_id,
"settlement_id": settlement.settlement_id,
}
json_result["settlement"] = settlement_result json_result["settlement"] = settlement_result
discharge = session.query(ZxIeDischarge.pk_ie_discharge, ZxIeDischarge.hospital, ZxIeDischarge.pk_yljg, discharge = (session.query(ZxIeDischarge.pk_ie_discharge, ZxIeDischarge.hospital, ZxIeDischarge.pk_yljg,
ZxIeDischarge.department, ZxIeDischarge.pk_ylks, ZxIeDischarge.department, ZxIeDischarge.pk_ylks, ZxIeDischarge.name, ZxIeDischarge.age,
ZxIeDischarge.name, ZxIeDischarge.admission_date, ZxIeDischarge.discharge_date, ZxIeDischarge.admission_date, ZxIeDischarge.discharge_date, ZxIeDischarge.doctor,
ZxIeDischarge.doctor, ZxIeDischarge.admission_id, ZxIeDischarge.age).filter( ZxIeDischarge.admission_id)
ZxIeDischarge.pk_phhd == pk_phhd).one() .filter(ZxIeDischarge.pk_phhd == pk_phhd).one())
discharge_result = { discharge_result = discharge._asdict()
"pk_ie_discharge": discharge.pk_ie_discharge,
"hospital": discharge.hospital,
"pk_yljg": discharge.pk_yljg,
"department": discharge.department,
"pk_ylks": discharge.pk_ylks,
"name": discharge.name,
"age": discharge.age,
"admission_date": discharge.admission_date,
"discharge_date": discharge.discharge_date,
"doctor": discharge.doctor,
"admission_id": discharge.admission_id,
}
json_result["discharge"] = discharge_result json_result["discharge"] = discharge_result
cost = session.query(ZxIeCost.pk_ie_cost, ZxIeCost.name, ZxIeCost.admission_date, ZxIeCost.discharge_date, cost = session.query(ZxIeCost.pk_ie_cost, ZxIeCost.name, ZxIeCost.admission_date, ZxIeCost.discharge_date,
ZxIeCost.medical_expenses).filter(ZxIeCost.pk_phhd == pk_phhd).one() ZxIeCost.medical_expenses).filter(ZxIeCost.pk_phhd == pk_phhd).one()
cost_result = { cost_result = cost._asdict()
"pk_ie_cost": cost.pk_ie_cost,
"name": cost.name,
"admission_date": cost.admission_date,
"discharge_date": cost.discharge_date,
"medical_expenses": cost.medical_expenses,
}
json_result["cost"] = cost_result json_result["cost"] = cost_result
phrecs = session.query(ZxPhrec.pk_phrec, ZxPhrec.pk_phhd, ZxPhrec.cRectype, ZxPhrec.cfjaddress).filter( phrecs = session.query(ZxPhrec.pk_phrec, ZxPhrec.pk_phhd, ZxPhrec.cRectype, ZxPhrec.cfjaddress).filter(
@@ -80,24 +50,29 @@ def check_ie_result(pk_phhd):
response = requests.get(img_path) response = requests.get(img_path)
image = Image.open(BytesIO(response.content)).convert("RGB") image = Image.open(BytesIO(response.content)).convert("RGB")
size = image.width * image.height / 200000 font_size = image.width * image.height / 200000
font = ImageFont.truetype("./font/simfang.ttf", size=size) font = ImageFont.truetype("./font/simfang.ttf", size=font_size)
ocr = session.query(ZxOcr.id, ZxOcr.content, ZxOcr.x_offset, ZxOcr.y_offset).filter( ocr = session.query(ZxOcr.id, ZxOcr.content, ZxOcr.rotation_angle, ZxOcr.x_offset, ZxOcr.y_offset).filter(
ZxOcr.pk_phrec == phrec.pk_phrec).all() ZxOcr.pk_phrec == phrec.pk_phrec).all()
if not ocr: if not ocr:
os.makedirs(f"./check_result/{pk_phhd}/0", exist_ok=True) os.makedirs(f"./check_result/{pk_phhd}/0", exist_ok=True)
image.save(f"./check_result/{pk_phhd}/0/{img_name}") image.save(f"./check_result/{pk_phhd}/0/{img_name}")
for id, group_results in groupby(ocr, key=lambda x: x.id): for _, group_results in groupby(ocr, key=lambda x: x.id):
draw = ImageDraw.Draw(image) draw = ImageDraw.Draw(image)
for ocr_item in group_results: for ocr_item in group_results:
result = json.loads(ocr_item.content) result = json.loads(ocr_item.content)
rotation_angle = ocr_item.rotation_angle
x_offset = ocr_item.x_offset x_offset = ocr_item.x_offset
y_offset = ocr_item.y_offset y_offset = ocr_item.y_offset
for key in result: for key in result:
for value in result[key]: for value in result[key]:
box = value["bbox"][0] box = value["bbox"][0]
if rotation_angle:
box = image_util.invert_rotate_rectangle(box, (image.width / 2, image.height / 2),
rotation_angle)
if x_offset: if x_offset:
box[0] += x_offset box[0] += x_offset
box[2] += x_offset box[2] += x_offset
@@ -106,7 +81,7 @@ def check_ie_result(pk_phhd):
box[3] += y_offset box[3] += y_offset
draw.rectangle(box, outline="red", width=2) # 绘制矩形 draw.rectangle(box, outline="red", width=2) # 绘制矩形
draw.text((box[0], box[1] - size), key, fill="blue", font=font) # 在矩形上方绘制文本 draw.text((box[0], box[1] - font_size), key, fill="blue", font=font) # 在矩形上方绘制文本
draw.text((box[0], box[3]), value["text"], fill="blue", font=font) # 在矩形下方绘制文本 draw.text((box[0], box[3]), value["text"], fill="blue", font=font) # 在矩形下方绘制文本
os.makedirs(f"./check_result/{pk_phhd}/{ocr_item.id}", exist_ok=True) os.makedirs(f"./check_result/{pk_phhd}/{ocr_item.id}", exist_ok=True)
image.save(f"./check_result/{pk_phhd}/{ocr_item.id}/{img_name}") image.save(f"./check_result/{pk_phhd}/{ocr_item.id}/{img_name}")
@@ -124,4 +99,4 @@ def check_ie_result(pk_phhd):
if __name__ == '__main__': if __name__ == '__main__':
check_ie_result(3572938) check_ie_result(0)