• web网站验证码自动识别


    验证码自动识别

    在很多WEB网站登录的时候,都需要输入验证码,Python提供了一些库(例如常用的OCR库)来识别和使用在线图片中的文字。

    将图像翻译成文字一般被称为光学文字识别(Optical Character Recognition, OCR)。可以实现OCR的底层库并不多,目前很多库都是使用共同的几个底层 OCR 库,或者是在上面 进行定制。

    1.1   ORC库概述

    在读取和处理图像、图像相关的机器学习以及创建图像等任务中,Python 一直都是非常出色的语言。虽然有很多库可以进行图像处理,但在这里我们只重点介绍:Tesseract

    1.2   Tesseract

    Tesseract 是一个 OCR 库,目前由 Google 赞助(Google 也是一家以 OCR 和机器学习技术闻名于世的公司)。Tesseract 是目前公认最优秀、最精确的开源 OCR 系统。 除了极高的精确度,Tesseract 也具有很高的灵活性。它可以通过训练识别出任何字体,也可以识别出任何 Unicode 字符。

    1.3   tesseract-ocr4.0安装

    tesseract-ocr4.0安装步骤如下:

    1.软件下载。

    软件下载网址:https://github.com/tesseract-ocr/tesseract/wiki/4.0-with-LSTM#400-alpha-for-windows

     

    选择4.0.0-alpha for Windows下面 Windows Installer made with MinGW-w64 from UB Mannheim,点击UB Mannheim 进入另一网页。

     

    进入得网址为 https://github.com/UB-Mannheim/tesseract/wiki

     

    点击tesseract-ocr-w64-setup-v4.0.0-beta.1.20180608.exe,下载4.0版本的软件。

    备注:Window系统的版本不一样下载对应的版本。

     

    2. 双击安装软件,安装过程按照下面的图片指示进行。

    注意:选择安装语言包,包含英文(默认安装)、中文、数学公式等,可以根据需要自己下载。

     

    安装完后打开软件安装的目录。

     

    备注:

    如果不是做英文的图文识别,还需要下载其他语言的识别包https://github.com/tesseract-ocr/tesseract/wiki/Data-Files。

    简体字识别包:https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/chi_sim.traineddata

    1.4   tesseract-ocr 的环境变量配置

    安装完成之后,只能在软件所在的目录中才能够使用该软件,为了能将该软件在cmd下任意目录中调用,需要把 C:Tesseract-OCR essdata 配置到系统环境变量中。

    我的计算机->右键属性打开界面->点击高级系统设置->在打开的系统属性界面,点击"环境变量"->在环境变量界面选择"系统变量"中选中path,然后点下面的编辑,打开编辑环境变量界面,把 C:Tesseract-OCR 添加到变量中,点"确定"。

     

    配置完成,打开命令终端,输入:tesseract -v,可以看到版本信息。

     

    如果出现报错,估计是环境变量没配置好。

    到这里,我们就算安装完成了,但是,我们的系统还是无法识别中文的,我们要去下载简体汉字、繁体汉字语言包(上面提供了下载地址),下载好之后放到安装目录的tessconfigs目录下即可。

    注意:因为没有配置全局变量,无法跨盘执行数据转换,这里我们在环境变量那增加一个配置信息。

    在系统变量下面点击“新建”,变量名TESSDATA_PREFIX,变量值 C:Tesseract-OCR essdata,然后点击确定,之后界面依次点击确定,完成设置。

     

    1.5   tesseract-ocr 的使用

    tesseract-ocr没有窗口界面,只能通过命令调用,调用需要 cmd 或 powershell。

    Cmd 打开可以通过,开始->Windows系统->命令提示符或者按快捷键 win+r 输入cmd 后回车调用。

    1.先制作2张图片。T_jpg1 和 T_png1。

    2.在cmd命令行里面输入:

    格式: tesseract 图片名称 生成的结果文件的名称  字库

    例子:

    tesseract C:imageT_jpg1.jpg C:imageT_jpg.txt -l chi_sim

    然后回车。

    【T_jpg1】是 C:image目录下的T_jpg1图片。

    【T_jpg.txt】是指定结果输出到C:imageT_jpg.txt文本文件中。

    -l是指定使用的包。

    【chi_sim】是中文识别包。

    回车后,稍等运行结果,运行完成后,在目录C:image中看到T_jpg.txt文件,打开如图。

     

    1.6   安装pytesseract

    如果需要在Python上识别图片,需要安装Python版本的pytesseract库,安装pytesseract库之前,需要先 Pillow 库,使用命令:pip install Pillow。

     

    接着再安装 pip install pytesseract,安装成功。

     

    如果不安装Pillow库,就会报如下错误。

     

    1.7   处理规范文字案例

    新建一个test.png图片,保存在当前程序目录下。

     

    例子:

    import pytesseract

    from PIL import Image

    #如果不修改pytesseract.py文件,可以在程序中指定tesseract_cmd的运行文件

    #tesseract_cmd = 'C:/Tesseract-OCR/tesseract.exe'

    image = Image.open('test.png')

    text = pytesseract.image_to_string(image)

    print(text)

    报错:

     

    需要修改 C:Python35Libsite-packagespytesseract下的 pytesseract.py 文件。

     

    修改pytesseract.py文件里的tesseract_cmd 值。

     

    tesseract_cmd = 'C:Tesseract-OCR esseract.exe'

     

    修改完之后,运行程序,如下:

     

    1.8   识别简易的登录验证码

    大多数网站生成的验证码图片都具有以下属性:

    1.它们是服务器端的程序动态生成的图片。验证码图片的 src 属性可能和普通图片不太一 样,比如 <img src="WebForm.aspx?id=8AP85CQKE9TJ">,但是可以和其他图片一样进行下载和处理。

    2.图片的答案存储在服务器端的数据库里。

    3.很多验证码都有时间限制,如果你太长时间没解决就会失效。

    4.常用的处理方法就是,首先把验证码图片下载到硬盘里,清理干净,然后用 Tesseract 处理图片,最后返回符合网站要求的识别结果。

    例子:登录验证码图片

     

    程序:

    import pytesseract

    from PIL import Image

    #如果不修改pytesseract.py文件,可以在程序中指定tesseract_cmd的运行文件

    #tesseract_cmd = 'C:/Tesseract-OCR/tesseract.exe'

    image = Image.open('yzm1.png')

    text = pytesseract.image_to_string(image)

    print(text)

     

    运行结果:

     

    通过例子,可以看出,识别是有误差的,这就需要机器的自我学习,需要我们训练Tesseract。

     -------------------------

    个人今日头条账号: 听海8   (上面上传了很多相关学习的视频以及我书里的文章,大家想看视频,可以关注我的今日头条)

     

  • 相关阅读:
    电子发烧友 车用总线
    Leetcode 303. 区域和检索 数组不可变(中等) 304. 二维区域和检索 矩阵不可变(中等) 560. 和为K的子数组(中等) 前缀和数组求窗口和
    Leetcode 496. 下一个更大元素I(简单) 503. 下一个更大元素II(中等) 739. 每日温度(中等) 单调栈
    Leetcode 48. 旋转图像(中等) 54. 螺旋矩阵(中等) 59. 螺旋矩阵 II(中等) 旋转遍历二维数组
    Leetcode 76. 最小覆盖子串(困难) 567. 字符串的排列(中等) 438. 找到字符串中所有字母异位词(中等) 3. 无重复字符的最长子串(中等) 滑动窗口算法
    Leetcode 704. 二分查找(简单) 34. 在排序数组中查找元素的第一个和最后一个位置(中等) 二分查找以及边界查找
    Leetcode 239. 滑动窗口最大值(困难) 单调队列解决滑动窗口最大值
    Leetocde 370. 区间加法(中等) 1109. 航班预订统计(中等) 1094. 拼车(中等) 差分数组求频繁区间增减问题
    Leetcode 875. 爱吃香蕉的珂珂(中等) 1011. 在D天内送达包裹的能力(中等) 二分查找高级用法
    Leetcode 167. 两数之和 II 输入有序数组(中等) 344. 反转字符串(简单) 两端指针夹逼
  • 原文地址:https://www.cnblogs.com/tinghai8/p/9219724.html
Copyright © 2020-2023  润新知