You need to enable JavaScript to run this app. 如何提升ICU呼吸机截图的Tesseract OCR识别准确率
优惠活动
大模型
产品
解决方案
定价
更多

如何提升ICU呼吸机截图的Tesseract OCR识别准确率

你遇到的部分字段识别失败的问题,预处理优化和Tesseract参数调整都需要做,具体优化方案如下:

原因分析

从你提供的识别结果来看,识别成功的都是长度较长、特征明显的字段(比如日期、时间、两位以上的数字),识别为空的都是短数字字段,核心是两点:一是Tesseract默认配置针对长文本优化,对短字符/纯数字的适配差;二是当前的预处理没有针对呼吸机屏幕的7段数码管字体做适配,部分字符特征不明显被判定为噪声。

优化方案

一、图像预处理优化

  • 先验证每个字段的ROI裁剪范围是否正确,避免裁剪到多余的边框、或者漏裁部分字符,建议把每个裁剪后的ROI单独存盘排查
  • 对裁剪后的ROI做以下固定处理:
    1. 等比例放大1.5-2倍:Tesseract对小尺寸字符的识别准确率极低,放大后字符特征会更明显
    2. 自适应二值化:代替全局阈值处理,适配屏幕不同区域的亮度差异,提升字符和背景的对比度
    3. 可选:做1次形态学腐蚀操作,补齐7段数码管的断笔,减少笔画断裂导致的识别失败

二、Tesseract参数调整

  • 调整识别模式(PSM参数):默认的PSM会自动做页面布局分析,对单个小区域的短文本识别效果差,建议针对单个ROI使用--psm 7(将输入视为单行文本)或--psm 8(将输入视为单个单词)
  • 限制字符白名单:呼吸机的参数都是数字、小数点、百分号等固定字符,加白名单可以直接排除无关字符的干扰,大幅提升准确率

优化后代码示例

import cv2
import pytesseract

# 针对数字字段的自定义配置:单行识别+允许的字符白名单
num_config = r'--psm 7 -c tessedit_char_whitelist=0123456789.%:'
# 针对日期时间的配置可以单独调整,允许横杠、冒号
dt_config = r'--psm 7 -c tessedit_char_whitelist=0123456789-:'

for entry in data_map1:
    # 裁剪对应字段的ROI
    roi = img[data_map1[entry][2] : data_map1[entry][3], data_map1[entry][0] : data_map1[entry][1]]
    # 预处理流程
    # 放大2倍
    roi = cv2.resize(roi, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
    # 转灰度
    gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
    # 自适应二值化,反色让字符为白色背景为黑色
    thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
    # 选择对应配置识别
    if entry in ['date', 'time']:
        res = pytesseract.image_to_string(thresh, lang='eng', config=dt_config)
    else:
        res = pytesseract.image_to_string(thresh, lang='eng', config=num_config)
    # 直接去除多余的换行、换页符
    data[entry] = res.strip()

如果优化后准确率还是达不到要求,可以找7段数码管的字体训练Tesseract自定义字库,适配性会比默认英文训练集高很多。

内容的提问来源于stack exchange,提问作者EnflamedSoul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 14:06:04