【技术】python+PIL+pytesser处理验证码环境搭建
======================================= 【提示】本文中pyteser适用于python2.X。如果用的是pyhon3.X,需要下载pytesser3. 第一个坑:?pytesser3需要搭配tesseract-ocr使用,和下文操作不同。 第二个坑:??pytesser3安装后居然需要你手动更改一个地址:__init__.py文件第11行的tesseract地址。 第三个坑:我在 下载tesseract-ocr,以为能使用。但是执行程序时候报错:[WinError 5] 拒绝访问。 我不知道哪里的问题,想来想去可能是windows问题,于是下载了windows版本的tesseract(用exe安装):。依然报错:[WinError 5] 拒绝访问。 综上,本问题本人没解决。能不用windows就别用windows。 ???????======================================= <h1 id="前言">前言: 春节期间,无法全身心投入地去写爬虫,那就玩玩验证码吧,应该比较有趣! 首次接触验证码识别,用pytesser接触一下最简单的验证码先,代码参照:。具体细节可以参见原文,里面安装和报错处理没有详细记录,我在此处主要记录一下自己的安装及处理过程。? <h1 id="效果"><a name="t1">效果: 可识别以下类型的验证码:? <h1 id="正文"><a name="t2">正文: <h2 id="代码"><a name="t3">代码: <pre class="has"> img = Image.open('验证码.jpg') threshold = 140 text = image_to_string(img_grey) # 将图片转成字符串
<h2 id="安装包"><a name="t4">安装包: 需要安装的包主要有两个:?PIL?和?pytesser?。? <h3 id="pil模块的安装"><a name="t5">PIL模块的安装: PIL 全称 “?Imaging Library”。? 我下载了 运行报错:Python version 2.7 required,which was not found in the registry.? 网上找出原因:这个 PIL 安装资源是给32位,32位和64位操作系统下的python在注册表中的路径是不一样的:? 解决方案:? 然后在命令行安装该模块:? pip install G:/For_Life/360download/Pillow-3.1.1-cp27-none-win_amd64.whl
注意:在 pillow 下载页中有一行 “Use ‘from PIL import Image’ instead of ‘import Image’” ,所以一般方法安装的 PIL 要导入 Image 模块使用 “import Image” ,而此方法安装的 PIL 要使用 “from PIL import Image” 。? <h3 id="pytesser模块的安装"><a name="t6">pytesser模块的安装: 下载地址:。(此网址有时候会加载失败,我将自己下载的放在微盘上了:?密码:DPHE) 下载后得到 “pytesser_v0.0.1.zip”,是一个压缩文件,使用方法:? 2、将 “pytesser.py” 改名为 “__init__.py”。 3、打开 “__init__.py” 文件,将 “tesseract_exe_name” 变量的值改为 “‘D:/For_Software/others/Python_PyDev/Python/Lib/site-packages/pytesser /tesseract’”(原值为 “‘tesseract’”)。 4、pytesser 模块依赖于 PIL 模块,如果是按照上面的方法安装 PIL 的话,需要把 “init.py” 文件里的 “import Image” 改成 “from PIL import Image” 。? 如果报错:WindowsError: [Error 2]? 可能的原因:python找不到 “tesseract.exe”,执行步骤3给python指定一个绝对路径就可以了。 如果报错:ImportError: No module named Image? 可能的原因:在 pytesser 中的 “__init__.py” ,导入 Image 的方式不对,见步骤4。? <h1 id="总结"><a name="t7">总结: 其实这只是处理最简单的验证码而已,代码也很简单,主要做两个工作而已。第一个是将彩色图片转成灰度图片并除噪,第二个是使用 pytesser.image_to_string() 将图片中的字符提取出来。 处理的图片也是非常有限的图片上的数字或字母必须没有变形(即使是没有变形的情况下还会出现数字跟字母混淆的情况),验证码的背景不能太复杂,允许字体加上一些颜色。? 转自:? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |