验证码识别:
利用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