python3.5 tesseract-ocr 验证码识别错误解决方案


在通过python3.5爬取大众点评商户数据和用户数据的时候,由于请求频繁,中间会出现高频次的验证码的输入,使用了tesseract,然后就是各种问题,对于在使用python3.5 的tesseract-ocr识别时候常见的两个错误总结一下,这两个问题解决的我心力憔悴啊。后来兄弟520号结婚我就回家了,回到公司的第一天然后解决好了,要写点把这个记录下


1.FileNotFoundError:[WinError 2] 系统找不到指定的文件The system cannot find the file specified

解决方案:

方案1.看了很多网上的贴吧,将tesseract.exe添加到系统的环境变量path中


添加tesseract环境变量

;C:\Program Files (x86)\Tesseract-OCR; 分号不能少,添加环境变量之后说是重启cmd或者pycharm,这个对我的是没有任何效果。折腾的我都重启电脑了,还是不行,然后采取其他方案。

方案2: 修改pytesseract.py文件,指定tesseract.exe安装路径

打开pytesseract的安装目录(这是我的目录:C:\Users\Administrator\venv\Lib\site-packages\pytesseract)找到 pytesseract.py文件

pytesseract.py

打开这个文件,找到

# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY

注释掉原本的

#tesseract_cmd='tesseract'

新增tesseract_cmd 为tesseract.exe的安装路径

tesseract_cmd= 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe‘

这样系统找不到指定的文件这个错误就可以解决了。



这是第二个错误


2.解决上面的问题后运行代码又出错

pytesseract.pytesseract.TesseractError: (1, 'Error opening data file C:\\Program Files (x86)\\Tesseract-OCR;/eng.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory. Failed loading language \'eng\' Tesseract couldn\'t load any languages! Could not initialize tesseract.')

方案1:在网上各种游荡,添加 TESSDATA_PREFIX的环境变量,我也添加了,还是不可以,一直报上面的错误


TESSDATA_PREFIX添加环境变量

虽然没有解决问题,但是是个经验,所以留下了。

方案2:配置中指定tessdata-dir

在代码中添加

pytesseract.pytesseract.tesseract_cmd = 'c://Program Files (x86)//Tesseract-OCR//tesseract.exe'

tessdata_dir_config = '--tessdata-dir "c://Program Files (x86)//Tesseract-OCR//tessdata"'

然后在指定的image_to_string配置下

image_to_string(image, lang = 'eng', config=tessdata_dir_config)

这个方式非常有效



下面贴识别简单验证码的代码及结果:

需要识别的验证码:

需要识别的验证码

代码:

#! -*- coding:utf-8 -*-

import pytesseract

from PILimport Image

pytesseract.pytesseract.tesseract_cmd ='c://Program Files (x86)//Tesseract-OCR//tesseract.exe'

tessdata_dir_config ='--tessdata-dir "c://Program Files (x86)//Tesseract-OCR//tessdata"'

def main():

#这个图片路径是自己定义的

image = Image.open('E:\pycharmWorkspace\image\yanzhengma.png')

code = pytesseract.image_to_string(image, lang ='eng', config=tessdata_dir_config)

print (code)

if __name__ =='__main__':

main()

识别结果:


验证码识别结果

由于像素的影响,这个识别还不是很精确,会慢慢优化提高识别精度,大众点评是一块难啃的骨头啊,这篇文章到此为止,干活!

推荐阅读更多精彩内容

  • 1、简介 ​ a、Python-tesseract 是一个基于 google's Tesseract-OCR ...
    慢慢慢慢热阅读 6,882评论 1 5
  • 1. 为啥用? 当一个网站的反扒机制做的很好,需要耗费大量精力去研究,而且对数据爬取速度没太紧的时间要求时,可以通...
    依旧丶森阅读 307评论 0 1
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 7,518评论 1 18
  • 万里春风遇旧颜, 两厢惬意绕山还。 情燃昼夜飞鸽处, 宕逸今生半世缘。
    李三中阅读 230评论 0 10
  • 我只是个普通人,普通到一天到晚除了上班就是睡觉。我也有梦想,只是每个人都有实现梦想的方法。我的方法很简单,那就是...
    北国爱人阅读 186评论 0 0
  • 格局,是遇事时表现出来的优秀心态和品质。《格言联璧》中提及:“处难处之事愈宜宽, 处难处之人愈宜厚, 处至急之事愈...
    洁瑜悦阅读 205评论 0 0
  • 一巴巴爸爸
    卜卜星卜卜阅读 80评论 0 0