- Add mock OCR service for testing without PaddleOCR dependency - Fix pydantic settings import issues - Create minimal requirements files for easier installation - Add test HTML page and sample report image - System now runs successfully with core functionality - API endpoints working: upload, status, health check - Rule engine and template interpretation working properly
122 lines
4.4 KiB
Python
122 lines
4.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
创建测试用的体检报告图片
|
|
"""
|
|
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
import os
|
|
|
|
def create_test_report():
|
|
# 创建一个白色背景的图片
|
|
width, height = 800, 1000
|
|
img = Image.new('RGB', (width, height), 'white')
|
|
draw = ImageDraw.Draw(img)
|
|
|
|
# 尝试使用系统字体,如果没有就使用默认字体
|
|
try:
|
|
# macOS 系统字体
|
|
font_title = ImageFont.truetype('/System/Library/Fonts/PingFang.ttc', 24)
|
|
font_normal = ImageFont.truetype('/System/Library/Fonts/PingFang.ttc', 16)
|
|
font_small = ImageFont.truetype('/System/Library/Fonts/PingFang.ttc', 14)
|
|
except:
|
|
try:
|
|
# 备选字体
|
|
font_title = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 24)
|
|
font_normal = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 16)
|
|
font_small = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 14)
|
|
except:
|
|
# 默认字体
|
|
font_title = ImageFont.load_default()
|
|
font_normal = ImageFont.load_default()
|
|
font_small = ImageFont.load_default()
|
|
|
|
y = 50
|
|
|
|
# 标题
|
|
draw.text((width//2 - 100, y), "体检报告", font=font_title, fill='black')
|
|
y += 60
|
|
|
|
# 个人信息
|
|
draw.text((50, y), "姓名:张三", font=font_normal, fill='black')
|
|
draw.text((200, y), "性别:男", font=font_normal, fill='black')
|
|
draw.text((300, y), "年龄:45岁", font=font_normal, fill='black')
|
|
y += 40
|
|
|
|
draw.text((50, y), "检查日期:2025-09-18", font=font_normal, fill='black')
|
|
draw.text((300, y), "医院:XX体检中心", font=font_normal, fill='black')
|
|
y += 60
|
|
|
|
# 表格标题
|
|
draw.text((50, y), "检查项目", font=font_normal, fill='black')
|
|
draw.text((200, y), "结果", font=font_normal, fill='black')
|
|
draw.text((300, y), "单位", font=font_normal, fill='black')
|
|
draw.text((400, y), "参考值", font=font_normal, fill='black')
|
|
draw.text((550, y), "提示", font=font_normal, fill='black')
|
|
|
|
# 画线
|
|
draw.line([(50, y+25), (650, y+25)], fill='black', width=1)
|
|
y += 40
|
|
|
|
# 检查数据
|
|
test_data = [
|
|
("收缩压", "138", "mmHg", "<120", "偏高"),
|
|
("舒张压", "88", "mmHg", "<80", "偏高"),
|
|
("空腹血糖", "6.3", "mmol/L", "3.9-6.1", "偏高"),
|
|
("总胆固醇", "5.8", "mmol/L", "<5.2", "偏高"),
|
|
("甘油三酯", "2.1", "mmol/L", "0.56-1.7", "偏高"),
|
|
("高密度脂蛋白", "1.2", "mmol/L", ">1.0", "正常"),
|
|
("低密度脂蛋白", "3.5", "mmol/L", "<3.4", "偏高"),
|
|
("谷丙转氨酶", "45", "U/L", "9-50", "正常"),
|
|
("谷草转氨酶", "38", "U/L", "15-40", "正常"),
|
|
("肌酐", "85", "μmol/L", "57-111", "正常"),
|
|
]
|
|
|
|
for item, result, unit, ref, status in test_data:
|
|
color = 'red' if status == '偏高' else 'black'
|
|
draw.text((50, y), item, font=font_small, fill='black')
|
|
draw.text((200, y), result, font=font_small, fill=color)
|
|
draw.text((300, y), unit, font=font_small, fill='black')
|
|
draw.text((400, y), ref, font=font_small, fill='black')
|
|
draw.text((550, y), status, font=font_small, fill=color)
|
|
y += 30
|
|
|
|
y += 40
|
|
|
|
# 检查所见
|
|
draw.text((50, y), "检查所见:", font=font_normal, fill='black')
|
|
y += 30
|
|
|
|
findings = [
|
|
"腹部彩超:轻度脂肪肝",
|
|
"胸片:未见明显异常",
|
|
"心电图:窦性心律,正常"
|
|
]
|
|
|
|
for finding in findings:
|
|
draw.text((70, y), finding, font=font_small, fill='black')
|
|
y += 25
|
|
|
|
y += 40
|
|
|
|
# 建议
|
|
draw.text((50, y), "健康建议:", font=font_normal, fill='black')
|
|
y += 30
|
|
|
|
suggestions = [
|
|
"1. 控制饮食,减少高脂高糖食物摄入",
|
|
"2. 适量运动,每周至少150分钟有氧运动",
|
|
"3. 定期监测血压血糖",
|
|
"4. 建议3个月后复查相关指标"
|
|
]
|
|
|
|
for suggestion in suggestions:
|
|
draw.text((70, y), suggestion, font=font_small, fill='black')
|
|
y += 25
|
|
|
|
# 保存图片
|
|
output_path = '/Users/brunogao/work/codes/AI/EMR/static/test_report.jpg'
|
|
img.save(output_path, 'JPEG', quality=95)
|
|
print(f"测试报告图片已创建: {output_path}")
|
|
|
|
if __name__ == "__main__":
|
|
create_test_report() |