You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tesseract OCR无法识别红色背景上的两行文本问题求助

针对红色背景多行黑字OCR识别的优化方案

一、预处理强化方案

  • 反转色彩+阈值化:红色背景黑字反转后变为黑背景白字,更适配Tesseract的识别逻辑。先定位红色区域,对该区域做色彩反转,再用自适应阈值二值化处理,抵消光照不均的影响:
    import cv2
    import numpy as np
    
    def preprocess_red_region(red_region):
        # 反转色彩
        inverted = cv2.bitwise_not(red_region)
        # 转灰度后做自适应阈值二值化
        gray = cv2.cvtColor(inverted, cv2.COLOR_BGR2GRAY)
        thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
        return thresh
    
  • 形态学降噪:用开运算清理红色区域的杂色噪点,再用闭运算填补文字内部的细小空隙,避免噪点干扰识别:
    kernel = np.ones((2,2), np.uint8)
    cleaned = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
    cleaned = cv2.morphologyEx(cleaned, cv2.MORPH_OPEN, kernel)
    

二、Tesseract参数精细化调整

  • 锁定psm模式+混合引擎:针对已定位的多行文本区域,用--psm 6(假设区域为单一文本块)或--psm 3(自动分页)比11/12更稳定,配合--oem 3(LSTM+传统引擎混合模式)提升兼容性:
    import pytesseract
    
    # 限定字符白名单(如果仅识别数字和小数点)
    custom_config = r'--oem 3 --psm 6 -c tessedit_char_whitelist=0123456789.'
    text = pytesseract.image_to_string(processed_img, config=custom_config)
    
  • 字符白名单过滤:如果目标文本只有数字、小数点这类固定字符,添加白名单可以直接过滤无关干扰,大幅提升识别准确率。

三、多行区域分割识别

  • 投影法拆分单行:既然单行红色文本能正常识别,可通过水平投影法将多行区域切割为单个行图像,逐行识别后拼接结果:
    def split_lines_by_projection(gray_img):
        # 计算每行的黑色像素总和(水平投影)
        row_sum = np.sum(gray_img == 0, axis=1)
        # 找到空白行位置作为分割点
        split_indices = np.where(row_sum < 10)[0]  # 阈值根据实际图像调整
        lines = []
        start = 0
        for idx in split_indices:
            if idx - start > 5:  # 过滤过小的无效区域
                lines.append(gray_img[start:idx, :])
            start = idx + 1
        # 处理最后一行
        if len(gray_img) - start > 5:
            lines.append(gray_img[start:, :])
        return lines
    
    # 分割后逐行识别并拼接
    line_texts = [pytesseract.image_to_string(line, config=custom_config).strip() for line in lines]
    full_text = '\n'.join(line_texts)
    

四、其他辅助技巧

  • 放大区域分辨率:将红色区域图像resize到原尺寸的2倍,模拟高DPI扫描效果,让文字边缘更清晰,Tesseract对高分辨率文本的识别精度更高。
  • 校验区域定位精度:检查extract_gravnumbers_from_red函数的红色区域提取逻辑,确保没有包含多余边缘或遗漏文本,定位误差会直接影响后续识别效果。

内容的提问来源于stack exchange,提问作者Daniel Sjöberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:15:11