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

如何使用Python过滤EasyOCR识别结果,删除置信度低于0.4的低概率文本

EasyOCR低置信度识别结果过滤方案

需求说明

使用EasyOCR做文本识别时,需要删除所有识别概率低于0.4的检测结果,同时支持删除检测结果中概率最低的文本条目。

依赖安装

pip install pytesseract
pip install easyocr

运行命令

python main.py -i image1.jpg

代码修改说明

需要对原有代码做两处核心调整:

  1. 调整命令行参数--min-conf的类型为浮点型,适配0-1范围的置信度阈值,默认值设置为0.4
  2. 在获取到results识别结果后,添加过滤逻辑,先筛掉低于阈值的结果,再按需删除置信度最低的条目

修改后完整代码

# import the necessary packages
from pytesseract import Output
import pytesseract
import argparse
import cv2
from matplotlib import pyplot as plt
import numpy as np
import os
import easyocr
from PIL import ImageDraw, Image

def remove_lines(image):
    result = image.copy()
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

    # Remove horizontal lines
    horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (40,1))
    remove_horizontal = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, horizontal_kernel, iterations=2)
    cnts = cv2.findContours(remove_horizontal, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]
    for c in cnts:
        cv2.drawContours(result, [c], -1, (255,255,255), 5)

    # Remove vertical lines
    vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1,40))
    remove_vertical = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, vertical_kernel, iterations=2)
    cnts = cv2.findContours(remove_vertical, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]
    for c in cnts:
        cv2.drawContours(result, [c], -1, (255,255,255), 5)

    plt.imshow(result)
    plt.show()

    return result

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,
    help="path to input image to be OCR'd")
# 此处修改:将min-conf的类型改为float,默认值设置为0.4
ap.add_argument("-c", "--min-conf", type=float, default=0.4,
    help="mininum confidence value to filter weak text detection")
args = vars(ap.parse_args())

reader = easyocr.Reader(['ch_sim','en']) # need to run only once to load model into memory

# load the input image, convert it from BGR to RGB channel ordering,
# and use Tesseract to localize each area of text in the input image
image = cv2.imread(args["image"])
# image = remove_lines(image)

results = reader.readtext(image)

########## 新增过滤逻辑开始 ##########
# 1. 过滤所有置信度低于阈值的结果
filtered_results = [item for item in results if item[2] >= args["min_conf"]]

# 2. 如需删除置信度最低的条目,保留下方代码;不需要则直接注释掉即可
if len(filtered_results) >= 2:
    # 按置信度升序排序,弹出第一个即最低置信度的条目
    filtered_results.sort(key=lambda x: x[2])
    filtered_results.pop(0)

# 覆盖原结果
results = filtered_results
########## 新增过滤逻辑结束 ##########

print(results)

可选调整说明

如果不需要固定阈值为0.4,也可以在运行时通过参数自定义阈值,示例:

python main.py -i image1.jpg -c 0.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:09:01