程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

python、Tesseract的简易验证码的识别

发布于2019-11-07 10:52     阅读(1207)     评论(0)     点赞(11)     收藏(2)


因课程作业有字符识别相关题目,所以使用tesseract库试试效果

环境

Python3.6
Pycharm
Opencv-python
pillow
Pytesseract
Tesseract-OCR

环境配置可以参考:

python、opencv的安装配置
pil、tesseract的安装配置

识别的二维码:
在这里插入图片描述

图像预处理:

1.验证码图片(滤波)灰度化
在这里插入图片描述
2.二值化(使用自适应阈值的方法)
在这里插入图片描述
3.形态学操作(膨胀腐蚀开闭…)
得到白色背景较干净的图片
在这里插入图片描述

字符识别结果:

在这里插入图片描述
可以检测一些规则字体的图片,试一试其他的稍微难点的验证码,效果不是那么好,特别是一下字体。手写字体效果也不好。可以对Tesseract重新训练一些样本进行相对应图片的识别。
Tesseract的训练

代码:

import cv2 as cv
import numpy as np
from PIL import Image
import pytesseract as tess

def recognize_text():
    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
    cv.imshow("gray", gray)
    # 固定阈值二值化
    ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_BINARY)
    # 自适应二值化
    # binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 25, 10)
    cv.imshow("binary", binary)
    
    # 形态学的处理,滤除噪点
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 1))
    dilate_image = cv.dilate(binary, kernel)
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
    erode_image = cv.erode(dilate_image, kernel)
    cv.imshow("erode_image", erode_image)
    
    # 将dilate_image转为Image
    textImage = Image.fromarray(erode_image)
    # 识别
    txt = tess.image_to_string(textImage)
    print("识别结果为:", txt)


print("验证码识别:")
src = cv.imread("G:\\Python\\verification\\4.png")
cv.imshow("src", src)
recognize_text()

cv.waitKey(0)
cv.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35


所属网站分类: 技术文章 > 博客

作者:听爸爸的话

链接:https://www.pythonheidong.com/blog/article/148243/f6573885229d9cb6ff8a/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

11 0
收藏该文
已收藏

评论内容:(最多支持255个字符)