[开源] 病案翻拍质量自动检测器:面向病案无纸化归档的合规质检工具,支持CLI批量扫描与Web API集成
本项目是专为医院病案室、信息科和医保结算部门设计的图像级质检系统,解决病案翻拍件在无纸化归档前「缺页、模糊、非授权复印」三大合规风险。我们不依赖人工抽检,而是通过多维度图像分析(清晰度/分辨率/对比度)、OCR页码连续性校验、水印模板匹配、翻拍与复印特征识别四大核心机制,自动生成带问题定位的HTML报告、可筛选Excel清单和结构化JSON数据。它同时提供命令行(CLI)快速单图诊断、多进程批量处理、可视化Web服务(FastAPI + Uvicorn)及RESTful API接口,技术栈基于Python 3.8+、OpenCV、Tesseract/PaddleOCR、NumPy与Pandas,所有检测逻辑均可配置阈值与权重,适配不同等级医院的归档标准。
定位与能力范围
我们不做通用图像质检,只聚焦病案场景的刚性要求:必须能判断一页是否该有、是否够清、是否被翻拍过、是否带有效授权水印。因此系统边界非常明确,不处理病历文本内容理解,不替代临床质控规则引擎,也不做原始扫描仪驱动控制。它的输出永远是「这张图是否符合归档图像质量规范」的确定性结论,而非概率建议。所有检测项都对应《电子病历系统功能应用水平分级评价标准》《医疗机构病历管理规定》中关于图像完整性、可读性、来源合法性的条款。例如「缺页检测」不是简单数文件个数,而是用OCR识别每张图中的页码(支持阿拉伯数字、罗马数字、中文格式如“第1页”),再按序列逻辑校验中断、重复、乱序;「非授权复印检测」则专攻摩尔纹、屏幕边框、反光点、灰度异常等翻拍特有痕迹,而非泛泛的“图像失真”。
核心功能模块
系统能力由五个正交模块构成,彼此解耦,可独立启用或组合调用:
模块 | 输入对象 | 输出结果 | 典型使用场景 |
|---|---|---|---|
图像质量评估 | 单张图像 | 清晰度(拉普拉斯方差)、分辨率(DPI/像素尺寸)、对比度(灰度标准差)三维度分数与等级判定 | 扫描后即时筛查,过滤模糊、低DPI、过暗/过亮图像 |
页码连续性校验 | 图像集合(含OCR识别结果) | 缺页、重复页、乱序页、无法识别页四类问题标记及起止位置 | 归档前整套病案完整性核验,支撑“一页不漏”审计要求 |
授权水印识别 | 单张图像 + 水印模板PNG | 匹配得分、匹配点数、是否命中授权模板 | 判断是否为院内授权翻拍,拦截外部复印或手机拍摄件 |
非授权复印检测 | 单张图像 | 摩尔纹/屏幕边框/反光点/灰度异常四项子分,合成风险等级(无/低/中/高) | 识别手机翻拍屏幕、复印件、扫描件二次翻拍等违规来源 |
报告生成引擎 | JSON检测结果 | HTML(含图表与问题高亮)、Excel(多Sheet+条件格式)、JSON(结构化字段)三种交付物 | 向病案管理员提交归档质检台账,向信息科提供API对接数据 |
使用与配置方式
我们提供三层使用入口,按需选用:
- 命令行(CLI)
:适合日常抽检、脚本化集成、服务器批量调度
- Web服务(API)
:适合嵌入HIS、EMR、档案系统,实现归档流程自动触发
- 配置文件(YAML/JSON)
:所有检测阈值、权重、OCR语言、并发策略均可外部定义
例如调整清晰度合格线,既可在CLI中临时覆盖:
mrqa scan-single image.jpg --clarity-threshold 150也可在config.yaml中持久化:
clarity: threshold: 150.0甚至用环境变量全局生效:
export MRQA_CLARITY_THRESHOLD=150.0这种三层配置体系确保一线人员能快速上手,而信息科可统一管控全院质检标准。
环境与运行依赖
系统对运行环境要求清晰且轻量,不捆绑重型中间件:
组件 | 要求 | 说明 | 是否必需 |
|---|---|---|---|
Python | 3.8+ | 主程序运行环境 | 是 |
Tesseract OCR | 可选安装 | 仅当启用页码识别时需要 | 否(可用PaddleOCR替代) |
中文语言包 | tesseract-ocr-chi-sim或 | 支持“第1页”等中文页码格式 | 否(英文页码可不装) |
OpenCV / NumPy / Pandas | pip install -r requirements.txt | 图像处理与数值计算基础库 | 是 |
FastAPI / Uvicorn | Web服务依赖 | 提供API文档(Swagger UI)与异步任务管理 | 否(CLI模式无需) |
Windows用户安装Tesseract只需下载Mannheim版并加入PATH;Linux(Ubuntu)一行命令即可:
sudo apt-get install tesseract-ocr tesseract-ocr-chi-simmacOS用户则用Homebrew:
brew install tesseract tesseract-lang数据与扩展机制
所有检测结果均以结构化JSON为中间态,字段设计直指业务可读性:
-quality.overall_score(综合分)、quality.overall_level(优秀/良好/合格/不合格)
-page_number.page_number(识别出的页码)、page_number.confidence(OCR置信度)
-unauthorized_copy.risk_level(高/中/低/无风险)
-issues.by_type(按问题类型统计:blur/low_resolution/contrast/moire等)
这使得Excel报告能自动映射为「问题清单」「详细结果」「页码序列」三个工作表,并用颜色标注严重程度;HTML报告则内置质量分布饼图、分数柱状图、问题条形图;而JSON可直接被下游系统解析为质控看板数据源。扩展水印模板也极简:只需准备PNG文件,通过-w watermark1.png -w watermark2.png参数传入,或统一放在./watermarks/目录由配置文件指定,系统自动完成模板匹配。
限制与说明
我们坦诚说明当前能力边界,避免误用:
- OCR页码识别效果高度依赖图像质量,若页码区域模糊、倾斜或被遮挡,识别率会下降,此时建议先用CLI的--verbose参数查看原始OCR文本,再针对性优化扫描参数。
- 非授权复印检测对纯黑白复印件的判别强于彩色翻拍,因摩尔纹等特征在彩色图像中易被压缩算法削弱,建议启用reflection_threshold与gray_anomaly_threshold双校验。
- 批量处理内存占用与图像尺寸正相关,处理超大图(如A3幅面300DPI扫描件)时,建议启用--checkpoint-dir保存中间状态,防止单点失败导致全量重跑。
- 所有阈值(如清晰度100.0、DPI 200)均为行业通用起点,实际部署时请依据本院历史归档图像样本,在config.yaml中微调至最适值,而非机械套用。
项目地址:
https://github.com/nexorin9/medical-record-scanner-qa
