python实现图片,验证码 识别

python实现图片,验证码 识别

1. 图片识别OCR技术和Tesseract-OCR工具
2. python调用OCR技术的第三方包
3. 实例操作与实现
4. 操作过程注意事项

功能实现思路:
概述:
首先明确的是,python实现图片、验证码的OCR识别并不是python自身技术,而是通过python第三方包调用OCR工具实现。

使用的OCR工具:Tesseract-OCR
python第三方包:PIL,pytesseract

1 图片识别OCR技术和Tesseract-OCR工具

1.1 OCR技术定义
OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪 或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。
即通过识别图片的暗、亮的模式识别出图片中的文字。
1.2 Tesseract-OCR工具
使用的OCR工具:Tesseract-OCR(详细了解点击这里

windows下载地址:https://digi.bib.uni-mannheim.de/tesseract/
在这里插入图片描述
安装方法一律点击下一步即可。

1.3 Tesseract-OCR其他系统安装方式
以下是其他系统对Tesseract-OCR工具的安装方式:
对于CentOS 8,以root用户身份运行以下命令:

dnf config-manager --add-repo https://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_8/
rpm --import https://build.opensuse.org/projects/home:Alexander_Pozdnyakov/public_key
dnf install tesseract
dnf install tesseract-langpack-deu

对于CentOS 7,以root用户身份运行以下命令:

yum-config-manager --add-repo https://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_7/
sudo rpm --import https://build.opensuse.org/projects/home:Alexander_Pozdnyakov/public_key
yum update
yum install tesseract 
yum install tesseract-langpack-deu

对于Fedora 30,以root用户身份运行以下命令:

dnf config-manager --add-repo https://download.opensuse.org/repositories/home:Alexander_Pozdnyakov/Fedora_30/home:Alexander_Pozdnyakov.repo
dnf install tesseract
dnf install tesseract-langpack-deu

对于openSUSE Leap 15.0,以root用户身份运行以下命令:

zypper addrepo https://download.opensuse.org/repositories/home:Alexander_Pozdnyakov/openSUSE_Leap_15.0/home:Alexander_Pozdnyakov.repo
zypper refresh
zypper install tesseract-ocr
zypper install tesseract-ocr-traineddata-german

以上是对不同系统如何安装tesseract-ocr 如果需要更多系统的安装方式请点击这里 https://tesseract-ocr.github.io/tessdoc/Home.html

1.4 配置环境变量
windows环境工具安装结束之后需要配置环境变量。
打开控制面板—>系统和安全----->系统-----高级系统设置
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在弹出框中输入安装地址 例如: C:\Program Files\Tesseract-OCR\; 包括最后的 ;

点击【确定】

win10 环境变量配置请参考 https://www.cnblogs.com/sea-stream/p/10961580.html

点击电脑 开始 打开终端 输入 cmd
在终端输入 tesseract --list-langs
在这里插入图片描述
至此环境变量配置完成
1.5 配置语言数据包
首先下载语言数据包:
4.0.0 对应数据文件 https://tesseract-ocr.github.io/tessdoc/Data-Files.html#data-files-for-version-400-november-29-2016
然后将.traineddata文件复制到“ tessdata”目录中。如:C:\Program Files\Tesseract-OCR\tessdata
然后在终端中输入 tesseract --list-langs
根据输出内容,确定是否添加成功。

2 python调用OCR技术的第三方包

2.1 概述
python第三方包:PIL,pytesseract
2.2 第三方包描述
pytesseract 全程:Python-tesseract,Python-tesseract是一个基于google’s Tesseract-OCR的独立封装包。Python-tesseract默认支持tiff、bmp格式图片,只有在安装PIL之后,才能支持jpeg、gif、png等其他图片格式。
PIL (Python Imaging Library)是 Python 中最常用的图像处理库
Image 类是 PIL 库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法。
2.3 安装第三方包
python 安装 pytesseract和 PIL
打开 终端 输入 pip install pytesseract

pip install pytesseract

pip install PIL

3 实例操作与实现

# -*- coding: utf-8 -*-
"""
Created on Sun May 17 23:49:31 2020
@author: Zhuzi
"""
from PIL import Image
import pytesseract 
import sys

class ImageToStr:
    
    def imageToStr(self,image_url,lang):  
        im=Image.open(image_url)                     #1.打开图片
        im = im.convert('L')                        #2.将彩色图像转化为灰度图 
        im_str = pytesseract.image_to_string(im,lang=lang) 
        return im_str
    pass


its = ImageToStr() 

img_str = its.imageToStr('验证码.png','eng') #识别英文
print('验证码识别输出:',img_str)

cn_img_str = its.imageToStr('202005186.jpg','chi_sim')#识别中文
print('文字识别输出:',cn_img_str)

图片样例:
1 验证码:
在这里插入图片描述
2汉字图片:
在这里插入图片描述
执行结果
在这里插入图片描述
大家要注意验证码的干扰线对识别的字母有干扰,所以图片越清晰越好。

后续会讲解使用tenserflow 机器学习对模糊图片的识别。

4 操作过程注意事项

4.1 Tesseract-OCR工具的环境变量一定要配置成功,否则会出现异常
4.2 出现 NameError: name ‘exit’ is not defined 异常,在程序的开头增加 import sys
4.3 Python tesseract is not installed or it’s not in your path 错误处理:
修改 需要修改pytesseract.py文件
1 打开 pytesseract.py 文件
2 查找 tesseract_cmd = ‘tesseract’
3 发现上面有一行注释 # CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
**翻译:**由于 TESSERACT 所在目录不同,需要手动更改目录
将此行修改为
tesseract_cmd = r’D:\Program Files (x86)\Tesseract-OCR\tesseract.exe’
保存

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章