当前位置: 移动技术网 > IT编程>脚本编程>Python > python爬虫opencv+pytesseract 验证码识别实例

python爬虫opencv+pytesseract 验证码识别实例

2020年08月01日  | 移动技术网IT编程  | 我要评论
利用python实现验证码识别,先配置所需环境,安装pillow和pytesseract 这两个库,之后关键的还需要配置好引擎,安装好Tesseract-OCR.exe之后,搜索找到pytesseract.py,打开该.py文件,找到 tesseract_cmd,改变它的值为刚才安装 tesseract.exe 的路径。最后利用python,opencv+pytesseract进行验证码识别,需要先对图像进行预处理,去除会影响识别准确度的线条或噪点,提高识别准确度。



一、环境配置

  • 需要 pillow 和 pytesseract 这两个库,pip install 安装就好了。
pip install pillow -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install pytesseract -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 
  • 安装好Tesseract-OCR.exe
  • pytesseract 库的配置:搜索找到pytesseract.py,打开该.py文件,找到 tesseract_cmd,改变它的值为刚才安装 tesseract.exe 的路径。

在这里插入图片描述

二、验证码识别

识别验证码,需要先对图像进行预处理,去除会影响识别准确度的线条或噪点,提高识别准确度。

实例1

import cv2 as cv import pytesseract from PIL import Image def recognize_text(image): # 边缘保留滤波  去噪 dst = cv.pyrMeanShiftFiltering(image, sp=10, sr=150) # 灰度图像 gray = cv.cvtColor(dst, cv.COLOR_BGR2GRAY) # 二值化 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) # 形态学操作   腐蚀  膨胀 erode = cv.erode(binary, None, iterations=2) dilate = cv.dilate(erode, None, iterations=1) cv.imshow('dilate', dilate) # 逻辑运算  让背景为白色  字体为黑  便于识别 cv.bitwise_not(dilate, dilate) cv.imshow('binary-image', dilate) # 识别 test_message = Image.fromarray(dilate) text = pytesseract.image_to_string(test_message) print(f'识别结果:{text}') src = cv.imread(r'./test/044.png') cv.imshow('input image', src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows() 

运行效果如下:

识别结果:3n3D

Process finished with exit code 0 

在这里插入图片描述

实例2

import cv2 as cv import pytesseract from PIL import Image def recognize_text(image): # 边缘保留滤波  去噪 blur =cv.pyrMeanShiftFiltering(image, sp=8, sr=60) cv.imshow('dst', blur) # 灰度图像 gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY) # 二值化 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) print(f'二值化自适应阈值:{ret}') cv.imshow('binary', binary) # 形态学操作  获取结构元素  开操作 kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 2)) bin1 = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel) cv.imshow('bin1', bin1) kernel = cv.getStructuringElement(cv.MORPH_OPEN, (2, 3)) bin2 = cv.morphologyEx(bin1, cv.MORPH_OPEN, kernel) cv.imshow('bin2', bin2) # 逻辑运算  让背景为白色  字体为黑  便于识别 cv.bitwise_not(bin2, bin2) cv.imshow('binary-image', bin2) # 识别 test_message = Image.fromarray(bin2) text = pytesseract.image_to_string(test_message) print(f'识别结果:{text}') src = cv.imread(r'./test/045.png') cv.imshow('input image', src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows() 

运行效果如下:

二值化自适应阈值:181.0 识别结果:8A62N1

Process finished with exit code 0 

在这里插入图片描述

实例3

import cv2 as cv import pytesseract from PIL import Image def recognize_text(image): # 边缘保留滤波  去噪 blur = cv.pyrMeanShiftFiltering(image, sp=8, sr=60) cv.imshow('dst', blur) # 灰度图像 gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY) # 二值化  设置阈值  自适应阈值的话 黄色的4会提取不出来 ret, binary = cv.threshold(gray, 185, 255, cv.THRESH_BINARY_INV) print(f'二值化设置的阈值:{ret}') cv.imshow('binary', binary) # 逻辑运算  让背景为白色  字体为黑  便于识别 cv.bitwise_not(binary, binary) cv.imshow('bg_image', binary) # 识别 test_message = Image.fromarray(binary) text = pytesseract.image_to_string(test_message) print(f'识别结果:{text}') src = cv.imread(r'./test/045.jpg') cv.imshow('input image', src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows() 

运行效果如下:

二值化设置的阈值:185.0 识别结果:7364 Process finished with exit code 0 

在这里插入图片描述

本文地址:https://blog.csdn.net/fyfugoyfa/article/details/108160915

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网