图像验证码大多出现在网站登录的地方, 通用来讲大多用于验证合法性的地方,图像识别是人工智能领域的一个研究方向,而我们这里讲的比较简单,主要是针对一些可以转换成文本信息的图片,在python中有一个专门处理类似图片的识别库 - tesserocr , 它是Python的一个OCR识别库,所谓 OCR 即Optical Character Recognition, 光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。
在安装tesserocr
前都需要先安装tesseract
-
Mac 环境 (默认是python3的环境)
- $
pip3 install tesserocr
- $
pip3 install pillow
- 注意:在mac下安装tesserocr ,需要先安装下面的软件
- $
brew install tesseract
- $
brew install imagemagick
- $
-
Ubuntu、Debian 系统下先安装:
- $
sudo apt-get intall -y tesseract-ocr libtesseract-dev libleptonica-dev
- $
-
CentOS、Red Hat 系统:
- $
yum install -y tesseract
- $
-
在windows系统下:
- tesserocr前要先安装:tesseract 他是为tesserocr提供支持的
- 下载目录:https://digi.bib.uni-mannheim.de/tesseract/ 会有很多下载文件,下载一个3.0版本的exe文件即可
- 在安装中要勾选上Additional language data(download)选项来安装OCR识别支持的语言包
测试代码如下:
# 验证识别测试
import tesserocr
from PIL import Image
# 打开图片 注意测试时你的路径保持和你的环境一致(图片位置正确)
image = Image.open("./xx/1.png") # 之后测试时分别替换为: 2.png、3.png、4.png 等其他测试图像
# 进行转换
result = tesserocr.image_to_text(image)
print(result)
测试结果显示不太准确
如转灰度、二值化等操作
代码转换如下:
import tesserocr
from PIL import Image
image = Image.open("./xx/2.png") # 保证正确的路径
# 1) 灰度处理 (将图像转化为灰色)
image = image.convert("L")
# image.save("./pic/2-1.png", None) # 此处用于保存转换后的图片进行对比测试
# 2) 二值化处理 (将图像转化为黑白色)
threshold = 128
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
image = image.point(table,'1')
# image.save("./pic/2-2.png", None) # 此处用于保存转换后的图片进行对比测试
# 将图像转化为文本
result = tesserocr.image_to_text(image)
print(result)
效果有大的提升,但仍有一些图片无法准确识别
在我们识别图像的时候,如果一些功能不能达到满意的效果,可以综合几项技能并用
- 使用图片第三方付费代理识别服务 (推荐)
- tesserocr工具(python程序,功能相对有限)
- 人工识别