Files
EMR/create_test_image.py
BrunoGao bd9b03baab Fix dependencies and add mock services for testing
- 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
2025-09-18 22:39:34 +08:00

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()