【Opencv3+Python3入门(22)验证码识别】

验证码识别:

利用Opencv+Tesserct-OCR (TesseractOCR ,它是一款由HP实验室开发由 Google 维护的开源 OCR(Optical Character Recognition , 光学字符识别)引擎)因此需要借助该引擎完成识别过程。

  • 首先采用Opencv预处理,然后利用Tesserct-OCR进行验证码识别
  • 依赖于pytesseract模块以及PIL模块,需要再预先将这两个模块pip安装好。
  • 以及Tesserct-OCR文件下载:https://github.com/UB-Mannheim/tesseract/wiki

  • 注意:若模块安装好之后,在执行程序中出现问题:TesseractNotFoundError: tesseract is not installed or it's not in your path说明Tesserct-OCR文件没有安装好。

找到自己环境(每个人的不一样,看自己的python在哪个环境安装的pytesseract模块)

自己的环境下\Lib\site-packages\pytesseract\pytesseract.py文件,文本方式打开修改源码(大概在35行左右)中:

# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
tesseract_cmd = 'tesseract'

修改为下面Tesserct-OCR文件中tesseract.exe的安装位置: 

# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

步骤:

1,预处理,去除干扰线与噪声点。

2,不同的结构元素中选择。

3,image与numpy数组相互转化

4,识别与输出

### 22,验证码识别
import cv2 as cv
import numpy as np
from PIL import Image
import pytesseract as tess

def recognize_Text(image):
    #转化为灰度图像
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    #将灰度图像二值化
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
    #定义一个形态学处理的[1*2]的矩形结构核
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (1, 2))
    #对图像进行开运算去掉噪声点与干扰线
    open_out = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)
    cv.imshow("binary_image", open_out)
    ##将array形式图像变为Image
    textImage = Image.fromarray(open_out)
    #利用模块中的方法识别
    text = tess.image_to_string(textImage)
    print("识别结果: %s"%text)
src = cv.imread(r'F:\OutputResult\SrcImage\yzm1.jpg')
cv.imshow("src",src)
recognize_Text(src)
cv.waitKey(0)
cv.destroyAllWindows()

函数:

tess.image_to_string(image, lang=None, config='', nice=0, output_type='string')将输入图像识别转换为字符串输出。

程序结果:

识别结果: M8k2

注意:根据自己的需求进行不同的形态学操作对验证码预处理,而不是千篇一律的。

 

 

 

 

参考博客:

TesseractNotFoundError: tesseract is not installed or it's not in your path

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值