pytesseract 识别率低提升方法

pytesseract 识别率低提升方法

一.跟换识别语言包

下载地址https://github.com/tesseract-ocr/tessdata

二.修改图片的灰度

复制from PIL import Image
from PIL import ImageEnhance
import pytesseract
img = Image.open('sanyecao.jpg')
img = img.convert('RGB')  #这里也可以尝试使用L
enhancer = ImageEnhance.Color(img)

enhancer = enhancer.enhance(0)
enhancer = ImageEnhance.Brightness(enhancer)
enhancer = enhancer.enhance(2)
enhancer = ImageEnhance.Contrast(enhancer)
enhancer = enhancer.enhance(8)
enhancer = ImageEnhance.Sharpness(enhancer)
img = enhancer.enhance(20)
text=pytesseract.image_to_string(img)

三.结合cv2,np对于图片处理后在进行读取

这个情况有很多种,也不说了,可以自己去尝试,简单写个调整图片亮度

复制#调整亮度
filename = "sanyecao.jpg"
img = cv2.imread(filename, 0)
print(np.shape(img))
kernel = np.ones((1,1), np.uint8)
dilate = cv2.dilate(img, kernel, iterations=1)
cv2.imwrite('new_dilate.jpg', dilate)

#还有些常用的方法
cv2.Canny
cv2.erode
cv2.rectangle


original_img = cv2.imread("qingwen.png", 0)

# canny(): 边缘检测
img1 = cv2.GaussianBlur(original_img,(3,3),0)
canny = cv2.Canny(img1, 50, 150)

# 形态学:边缘检测
_,Thr_img = cv2.threshold(original_img,210,255,cv2.THRESH_BINARY)#设定红色通道阈值210(阈值影响梯度运算效果)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))         #定义矩形结构元素
gradient = cv2.morphologyEx(Thr_img, cv2.MORPH_GRADIENT, kernel) #梯度

cv2.imshow("original_img", original_img) 
cv2.imshow("gradient", gradient) 
cv2.imshow('Canny', canny)

### 如何优化 Pytesseract OCR 以提高验证码识别准确性 为了提升 `pytesseract` 的识别精度,可以采取多种方法来预处理图像并调整配置参数。以下是几种有效的策略: #### 图像预处理技术 通过 OpenCV 对输入图片进行适当变换能够显著改善最终的识别效果。 - **灰度化**:将彩色图转换成单通道灰度图有助于减少不必要的颜色干扰。 ```python import cv2 img = cv2.imread('captcha.png', cv2.IMREAD_GRAYSCALE) ``` - **二值化**:设定阈值使像素点要么完全黑色要么白色,从而增强对比度。 ```python _, binary_img = cv2.threshold(img, thresh=128, maxval=255, type=cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU) ``` - **去噪平滑**:去除噪声点可让文字轮廓更清晰。 ```python denoised_img = cv2.fastNlMeansDenoising(binary_img, h=10) ``` 这些操作均能有效清理背景杂乱因素,使得目标字符更加突出易于辨认[^1]。 #### 调整 Tesseract 参数设置 合理配置 tesseract 命令行选项同样重要,特别是针对特定类型的 CAPTCHA 可定制专属模板。 - 使用 `-psm (Page Segmentation Mode)` 来指定页面分割模式;对于简单水平排列的文字推荐使用 mode 7 或者 8 表示假设为单一文本行/块。 ```python custom_config = r'--oem 3 --psm 7' text = pytesseract.image_to_string(denoised_img, config=custom_config) ``` - 如果已知待测对象仅限于某些特殊字符集,则可通过定义 whitelist 进一步缩小搜索空间。 ```python digits_only_config = '--psm 7 -c tessedit_char_whitelist=0123456789' digit_text = pytesseract.image_to_string(cleaned_image, lang='eng', config=digits_only_config) ``` 上述措施共同作用下往往可以获得更好的解析质量[^2]。 #### 训练自定义模型 当遇到非常规字体或是高度扭曲变形的情况时,考虑构建个性化训练样本库可能是必要的选择之一。借助工具如 jTessBoxEditor 创建新的 `.traineddata` 文件,并将其放置在 Tesseract 安装路径相应位置即可启用新字形的支持[^3]。 ```bash # 将 num.traineddata 移动至 Tesseract-OCR/tessdata/ mv path/to/num.traineddata /usr/local/share/tessdata/ ``` 完成以上步骤之后再次尝试调用 `pytesseract` 函数读取经过充分准备后的验证图形,预期会得到更为理想的输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值