下载地址:https://www.pan38.com/share.php?code=VRjxk 提取码:8888
开发一个B超单装逼娱乐生成器,这个工具可以生成看起来非常专业的假B超单图片,用于娱乐目的。请注意,这个工具仅供娱乐,切勿用于任何非法或不道德用途。
项目概述
这个生成器将使用Python和一些图像处理库来创建逼真的B超单图片。主要功能包括:
生成随机但合理的B超数据
创建逼真的B超图像效果
添加医院信息和医生签名
输出最终的B超单图片
完整的项目代码,包含多个模块
import random
import datetime
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import os
import textwrap
from faker import Faker
class BGenerator:
def init(self):
self.fake = Faker('zh_CN')
self.font_path = "simsun.ttc"
if not os.path.exists(self.font_path):
self.font_path = None
# 初始化模板图片
self.template = Image.new('RGB', (800, 1000), color='white')
self.draw = ImageDraw.Draw(self.template)
# 医院信息
self.hospitals = [
"北京协和医院",
"上海瑞金医院",
"广州中山医院",
"成都华西医院",
"武汉同济医院"
]
# 医生姓名
self.doctors = [
"张伟", "王芳", "李娜", "刘强", "陈静",
"杨光", "赵敏", "周涛", "吴晓", "郑华"
]
# 检查项目
self.exam_items = [
"胎儿超声检查", "腹部超声检查", "心脏超声检查",
"甲状腺超声检查", "乳腺超声检查", "妇科超声检查"
]
# 诊断结果
self.diagnoses = [
"宫内早孕,活胎", "胎儿发育正常", "未见明显异常",
"建议复查", "轻度脂肪肝", "胆囊息肉"
]
def generate_patient_info(self):
"""生成患者信息"""
gender = random.choice(["男", "女"])
age = random.randint(18, 60)
patient_id = self.fake.ssn()
exam_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
return {
"name": self.fake.name(),
"gender": gender,
"age": age,
"patient_id": patient_id,
"exam_date": exam_date
}
def generate_ultrasound_data(self):
"""生成B超数据"""
gestational_weeks = random.randint(5, 40)
fetal_heart_rate = random.randint(120, 160)
biparietal_diameter = round(random.uniform(2.0, 9.5), 2)
femur_length = round(random.uniform(1.5, 7.5), 2)
amniotic_fluid_index = round(random.uniform(5.0, 20.0), 1)
return {
"gestational_weeks": gestational_weeks,
"fetal_heart_rate": fetal_heart_rate,
"biparietal_diameter": biparietal_diameter,
"femur_length": femur_length,
"amniotic_fluid_index": amniotic_fluid_index
}
def generate_ultrasound_image(self):
"""生成B超图像效果"""
# 创建一个灰色背景
width, height = 400, 300
image = np.zeros((height, width), dtype=np.uint8)
image.fill(128)
# 添加一些随机噪声
noise = np.random.normal(0, 25, (height, width))
image = np.clip(image + noise, 0, 255).astype(np.uint8)
# 添加一些"器官"形状
for _ in range(random.randint(3, 7)):
center_x = random.randint(50, width-50)
center_y = random.randint(50, height-50)
radius = random.randint(20, 80)
for y in range(height):
for x in range(width):
dist = np.sqrt((x-center_x)**2 + (y-center_y)**2)
if dist < radius:
val = int(255 * (1 - dist/radius))
image[y, x] = np.clip(image[y, x] + val, 0, 255)
# 转换为PIL图像
return Image.fromarray(image)
def draw_text(self, text, position, font_size=12, bold=False):
"""在图片上绘制文本"""
if self.font_path:
font = ImageFont.truetype(self.font_path, font_size)
else:
font = ImageFont.load_default()
if bold:
# 简单模拟加粗效果
self.draw.text((position[0]-1, position[1]), text, font=font, fill="black")
self.draw.text((position[0]+1, position[1]), text, font=font, fill="black")
self.draw.text((position[0], position[1]-1), text, font=font, fill="black")
self.draw.text((position[0], position[1]+1), text, font=font, fill="black")
self.draw.text(position, text, font=font, fill="black")
def generate_report(self):
"""生成完整的B超报告"""
# 生成随机数据
patient = self.generate_patient_info()
ultrasound_data = self.generate_ultrasound_data()
hospital = random.choice(self.hospitals)
doctor = random.choice(self.doctors)
exam_item = random.choice(self.exam_items)
diagnosis = random.choice(self.diagnoses)
# 绘制医院标题
self.draw_text(hospital, (50, 30), font_size=24, bold=True)
self.draw_text("超声检查报告单", (300, 35), font_size=20, bold=True)
# 绘制患者信息
self.draw_text(f"姓名: {patient['name']}", (50, 80))
self.draw_text(f"性别: {patient['gender']}", (250, 80))
self.draw_text(f"年龄: {patient['age']}", (400, 80))
self.draw_text(f"检查日期: {patient['exam_date']}", (50, 110))
self.draw_text(f"病历号: {patient['patient_id']}", (400, 110))
self.draw_text(f"检查项目: {exam_item}", (50, 140))
# 绘制分隔线
self.draw.line([(50, 170), (750, 170)], fill="black", width=2)
# 绘制超声数据
y_pos = 190
self.draw_text("超声所见:", (50, y_pos), bold=True)
y_pos += 30
if "胎儿" in exam_item:
# 如果是胎儿检查,显示胎儿数据
text = f"宫内见一胎儿,头位,胎心搏动规律,胎心率{ultrasound_data['fetal_heart_rate']}次/分。"
text += f"双顶径{ultrasound_data['biparietal_diameter']}cm,股骨长{ultrasound_data['femur_length']}cm,"
text += f"羊水指数{ultrasound_data['amniotic_fluid_index']}cm。"
text += "胎盘位于子宫前壁,成熟度0级。脐动脉血流频谱正常。"
# 自动换行
lines = textwrap.wrap(text, width=60)
for line in lines:
self.draw_text(line, (70, y_pos))
y_pos += 25
else:
# 其他检查的通用描述
text = "检查部位图像清晰,结构正常,未见明显异常回声。"
text += "血流信号正常,未见明显占位性病变。"
lines = textwrap.wrap(text, width=60)
for line in lines:
self.draw_text(line, (70, y_pos))
y_pos += 25
y_pos += 10
# 绘制超声图像
ultrasound_img = self.generate_ultrasound_image()
self.template.paste(ultrasound_img, (200, y_pos))
y_pos += ultrasound_img.height + 20
# 绘制诊断意见
self.draw_text("超声提示:", (50, y_pos), bold=True)
y_pos += 30
self.draw_text(diagnosis, (70, y_pos))
y_pos += 50
# 绘制医生签名
self.draw_text(f"检查医生: {doctor}", (500, y_pos))
self.draw_text("报告日期: " + datetime.datetime.now().strftime("%Y-%m-%d"), (500, y_pos + 30))
# 绘制医院印章(模拟)
self.draw.ellipse([(600, y_pos-20), (700, y_pos+80)], outline="red", width=3)
self.draw_text(hospital.split("医院")[0], (620, y_pos+10), font_size=12, fill="red")
self.draw_text("超声科", (640, y_pos+35), font_size=12, fill="red")
return self.template
def save_report(self, filename="ultrasound_report.png"):
"""保存生成的报告"""
report = self.generate_report()
report.save(filename)
print(f"报告已生成并保存为 {filename}")
if name == "main":
generator = BGenerator()
generator.save_report()
代码语言:txt
AI代码解释
Pillow==9.0.0
numpy==1.22.0
faker==13.3.0
这个B超单生成器包含以下主要功能:
患者信息生成:使用Faker库生成随机的患者姓名、性别、年龄和病历号。
B超数据生成:生成合理的B超检查数据,包括孕周、胎心率、双顶径等参数。
B超图像生成:使用NumPy创建模拟的B超图像效果,包含随机噪声和器官形状。
报告排版:将生成的所有信息排版到一张图片上,包括医院信息、患者信息、检查结果和医生签名。
输出功能:最终将生成的B超单保存为PNG图片文件。