图像验证码识别技术--Tesseract和ddddocr

933 阅读3分钟

阻碍我们爬⾍的。有时候正是在登录或者请求⼀些数据时候的图形验证码。因 此这⾥我们讲解⼀种能将图⽚翻译成⽂字的技术。将图⽚翻译成⽂字⼀般被称 为光学⽂字识别(Optical Character Recognition),简写为OCR。实现 OCR的库不是很多,特别是开源的。因为这块存在⼀定的技术壁垒(需要⼤量 的数据、算法、机器学习、深度学习知识等),并且如果做好了具有很⾼的商 业价值。因此开源的⽐较少。这⾥介绍两个⽐较优秀的图像识别开源库: Tesseract和ddddocr。

Tesseract

定义:Tesseract是⼀个将图像翻译成⽂字的OCR(光学⽂字识别,Optical Character Recognition),⽬前由⾕歌赞助。Tesseract是⽬前公认最优秀、最 准确的开源OCR库。Tesseract具有很⾼的识别度,也具有很⾼的灵活性,他可 以通过训练识别任何字体

Windows系统安装

在以下链接下载可执⾏⽂件,github.com/tesseract-o…

备用链接: digi.bib.uni-mannheim.de/tesseract/

在Python中调⽤Tesseract:

pip install pytesseract

图片.png

在ubuntu下通过以下命令进行安装

sudo apt install tesseract-ocr

设置环境变量

安装完成后,如果想要在命令⾏中使⽤Tesseract,那么应该设置环境变量。

Mac和Linux在安装的时候就默认已经设置好了。

在Windows下把tesseract.exe所在的路径添加到PATH环境变量中。

还有⼀个环境变量需要设置的是,要把训练的数据⽂件路径也放到环境变量 中。 在环境变量中,添加⼀个

TESSDATA_PREFIX=D:\Tesseract-OCR\tessdata

进⼊cmd输⼊下⾯的命令查看版本,正常运⾏则安装成功

tesseract --version

在命令行中使用tesseract识别图像

tesseract 图⽚路径 ⽂件路径

tesseract demo.png a

图片.png 解析单个文件test.png(第1个参数),在标准输出(命令行界面)打印解析结果(第2个参数为stdout),用-l参数带chi_sim表示使用简体中文语言

识别中⽂图像,需要下载语⾔安装包

URL地址:github.com/tesseract-o…

在代码中使用tesseract识别图像

# -*- coding: UTF-8 -*-  
# @Project :网络爬虫  
# @File :图像识别技术--Tesseract.py  
# @IDE :PyCharm  
# @Author :艳烔  
# @Date :2024/10/31 9:28  
  
import pytesseract  
from PIL import Image  
import requests  
from io import BytesIO  
  
# 图片地址: https://pic.616pic.com/ys_bnew_img/00/42/61/V3N7MK0v8e.jpg  
pytesseract.pytesseract.tesseract_cmd = 'D:/Development/tesseract/tesseract.exe'  
tessdaata_dir_config = r'--tessdata-dir D:/Development/tesseract/tessdata'  
  
# 识别本地图片  
# img = Image.open('D:/图片/test.png')  
# print(pytesseract.image_to_string(img, lang='chi_sim',config=tessdaata_dir_config))  
  
  
# 识别在线图片  
response = requests.get("https://pic.616pic.com/ys_bnew_img/00/42/61/V3N7MK0v8e.jpg")  
response.raise_for_status() # 如果请求失败, 抛出异常 HttpError  
print(response.headers['Content-Type']) # 输出图片类型  
  
img2 = Image.open(BytesIO(response.content))  
  
img2.save('yanzhengma.jpg') # 保存以验证  
print(pytesseract.image_to_string(Image.open('yanzhengma.jpg'), lang='eng', config=tessdaata_dir_config))
# -*- coding: UTF-8 -*-  
'''  
@Project :网络爬虫  
@File :图像识别Demo2.py  
@IDE :PyCharm  
@Author :慕逸  
@Date :03/11/2024 10:01  
'''  
from urllib import request  
import pytesseract  
from PIL import Image  
import time  
  
pytesseract.pytesseract.tesseract_cmd = 'D:/Development/tesseract/tesseract.exe'  
tessdaata_dir_config = r'--tessdata-dir D:/Development/tesseract/tessdata'  
  
while True:  
    url = 'https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891'  
    request.urlretrieve(url, 'captcha.png')  
    image = Image.open('captcha.png')  
    text = pytesseract.image_to_string(image, lang="eng", config=tessdaata_dir_config)  
    print(text)  
    time.sleep(2)

ddddocr

github地址:github.com/sml2h3/dddd…

安装

pip install ddddocr

图片.png

图片.png

# -*- coding: UTF-8 -*-  
'''  
@Project :网络爬虫  
@File :图像识别技术--ddddocr.py  
@IDE :PyCharm  
@Author :慕逸  
@Date :03/11/2024 10:26  
'''  
  
import ddddocr  
from urllib import request  
from PIL import Image  
import time  
  
# 关闭广告  
ocr = ddddocr.DdddOcr(show_ad=False)  
with open('captcha.png', 'rb') as f:  
image = f.read()  
yzm = ocr.classification(image)  
  
print(yzm)  
  
# 根据图片链接识别验证码  
  
while True:  
    url = 'https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891'  
    request.urlretrieve(url, 'yzm.png')  
    image = Image.open('yzm.png')  
    yzm_str = ocr.classification(image)  
    print(yzm_str)  
    time.sleep(2)

当然,ddddocr也可以识别滑块验证码,中文点选验证码等.