09 图形验证码识别技术

2020年07月11日 204点热度 3人点赞 1条评论
1. 光学识别介绍

一般上我们会在网页要登录的时候,会要求要输入图形验证码,而这些验证码则会阻碍我们进行爬虫,因此我们能够使用一种能将图片的文字翻译出来。而能够将图片从中翻译出来的文字,我们称为光学文字识别(Optical Character Recognition),简写为OCR。

1.1 Tesseract介绍与安装

实现OCR开源的库并不多,因为这项技术需要大量的数据、算法、机器学习、深度学习的知识等,如果做好了具有很高的商业价值,因此开源的相对来说比较少。Tesseract是一个图像识别的开源库,虽然我本身认为它识别的技术并不是很精准,但是Tesseract用在学习上还是值得我们学习的。

Tesseract目前是开源的OCR库,它具备很高的识别度,也很灵活性,可以通过它识别任何字体。

OCR开源库下载:https://github.com/tesseract-ocr/

Python中安装Tesseract:

pip install pytesseract

安装完后,如果想要在命令行使用Tesseract,那么就必须要设置环境变量。需要设置环境变量针对Windows的用户,而Linux与Mac则是在安装后默认已经设置好了。

设置完成后CMD命令查看当前版本:

tesseract --version

在命令行中使用Tesseract的方法:

tesseract demo.png a

# tesseract 图片路径 文件路径

若是想要识别中文文字的图像,则需要安装语言包:

中文语言安装地址下载:https://github.com/tesseract-ocr/tessdat

2. 在Python代码中使用Tesseract图像识别
import pytesseract
from PIL import Image
pytesseract.pytesseract.tesseract_cmd = r'D:\tesseract.exe'
tessdata_dir_config = r'--tessdata-dir "D:\tessdata"'
image = Image.open('demo.png')
print(pytesseract.image_to_string(image, lang='eng', config=tessdata_dir_config))
3. 使用第三方平台API
import json
import requests
import base64
from io import BytesIO
from PIL import Image
from sys import version_info

def base64_api(uname, pwd, img):
    img = img.convert('RGB')
    buffered = BytesIO()
    img.save(buffered, format="JPEG")
    if version_info.major >= 3:
        b64 = str(base64.b64encode(buffered.getvalue()), encoding='utf-8')
    else:
        b64 = str(base64.b64encode(buffered.getvalue()))
    data = {"username": uname, "password": pwd, "image": b64}
    result = json.loads(requests.post("http://api.xxx.com/base64", json=data).text)
    if result['success']:
        return result["data"]["result"]
    else:
        return result["message"]
    return ""

if __name__ == "__main__":
    img_path = "captcha.png"
    img = Image.open(img_path)
    result = base64_api(uname='', pwd='', img=img)
    print(result)

YenYoong☕

当你能梦的时候就不要放弃梦~😎

文章评论

  • Ryl**

    I could not refrain from commenting. Very well written!

    2020年08月01日