前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python下以api形式调用tesseract识别图片验证码

python下以api形式调用tesseract识别图片验证码

作者头像
黯然销魂掌
发布2018-09-27 11:04:18
1.8K0
发布2018-09-27 11:04:18
举报
文章被收录于专栏:python爬虫日记python爬虫日记

一、背景

之前在博文中介绍在python中如何调用tesseract ocr引擎,当时主要介绍了shell模式,shell模式需要安装tesseract程序,并且效率相对略低。

今天介绍api形式的调用方式,因为博主主要是基于windows环境进行开发,所以这里的api调用主要是指dll调用(linux之类是.so调用)

二、tesseract dll下载网址

https://github.com/charlesw/tesseract 这个网址中包含了编译好的exe及dll文件,而且x86,x64两种架构都有。

(特别说明:选择x86还是x64版本dll,只依赖于你的python架构,而不是操作系统的架构,即便是在64位操作系统,假如你的python是32位版本,这里也要选用x86版本dll)。

博主使用的64位Python,所以进入  tesseract/src/lib/TesseractOcr/x64/目录,分别下载 liblept172.dll、libtesseract304.dll 两个dll。(若是你想用shell形式调用,也可以下载tesseract.exe,与之前的博文改善的地方,就是免去安装tesseract。)

三、语言包 下载网址(tessdata)

注意说明里有这一段话,You will also need to download the language data files for tesseract 3.04 from tesseract-ocr.

网址:https://github.com/tesseract-ocr/tesseract ,下载其中的tessdata目录即可,跟dll放到同一目录。

 四、vc 2015++发行包下载

注意说明里这一段话:

Since tesseract and leptonica binaries are compiled with Visual Studio 2015 you'll need to ensure you have the Visual Studio 2015 Runtime installed.

意思就是,这个tesseract 的dll是使用vs 2015编译的,所以必须安装其发行包,同样分X64,X86两个版本,还是依赖于你的开发环境,不依赖于操作系统。

 五、安装pyocr for python 包

用pip就可以安装: pip install pyocr,也可以到官网下载源码,手动安装: https://github.com/jflesch/pyocr

最新的pyocr是0.4.1,其源码还是基于tesseract 3.0.2 ,而前文下载的tesseract 已经是3.0.4版本了,所以需要改下pyocr源码。 (需要说明的是pyocr包,比起以前博文提的pytesseract包要更复杂一些,同时支持shell、api 、Cuneiform 三种形式。)

修改源码文件 :C:\Python27\Lib\site-packages\pyocr\libtesseract\libtesseract_raw.py文件。

如下所示: 红色字体行,把302dll改成304dll

TESSDATA_PREFIX = os.getenv('TESSDATA_PREFIX', None)


if sys.platform[:3] == "win":
    libnames = [
        # Jflesch> Don't they have the equivalent of LD_LIBRARY_PATH on
        # Windows ?
        "../vs2010/DLL_Release/libtesseract302.dll",
        "libtesseract304.dll", #libtesseract302.dll
    ]
else:
    libnames = [
        "libtesseract.so.3",
    ]

六、编写测试程序

直接放源码 pyocr-test.py :

#coding=utf-8 

'''
当前目录必须有tessdata ,libtesseract304.dll ,liblept172.dll
'''

import os ,sys
tessdir = os.getenv('TESSDATA_PREFIX', None)
if tessdir is None  :
    tessdir = os.path.split(os.path.realpath(__file__))[0] 
    os.environ['TESSDATA_PREFIX'] = tessdir
if tessdir not in os.environ['PATH']:
    os.environ['PATH']= tessdir+';' +os.environ['PATH']
    #sys.path.append(tessdir)


print os.environ['PATH']
print os.environ['TESSDATA_PREFIX']

from pyocr import libtesseract
from pyocr.builders import TextBuilder
from PIL import Image

filename ='1.png'
img = Image.open(filename)
#不设置成单行模式,没有输出
bu = TextBuilder(tesseract_layout=7)
#lang为语言,默认使用eng
print libtesseract.image_to_string(img,lang='fontet',builder=bu)

几个注意点:

1、前文下载的dll 与tessdata语言包文件夹,默认放到 pyocr-test.py 的同一目录下;

2、必须安装vc++ 2015 发行包(vc_redist.x86.exe 或vc_redist.x64.exe),否则会ctypes.cdll.LoadLibrary(libname)会调用dll失败。

3、源码里的第一段,主要就是用来解决python找不到dll的问题,这段代码主要功能:把当前目录加到系统PATH环境变量里,以确保dll能被搜到。

这个地方容易出问题,主要是os.path.realpath 、__file__这几个内部函数和常量,貌似在不同的开发环境,甚至不同的开发工具下都会有不同的结果,跟pyocr无关,主要是python的问题。

import os
tessdir = os.getenv('TESSDATA_PREFIX', None)
if tessdir is None  :
    tessdir = os.path.split(os.path.realpath(__file__))[0] 
    os.environ['TESSDATA_PREFIX'] = tessdir
if tessdir not in os.environ['PATH']:
    os.environ['PATH']= tessdir+';' +os.environ['PATH']

4、实测时发现,bu = TextBuilder(tesseract_layout=7) 这一段不写,会导致识别出错,这个等于以前博文提到-psm 7函数,也就是单行模式。

以上

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、tesseract dll下载网址
  • 三、语言包 下载网址(tessdata)
  •  四、vc 2015++发行包下载
  •  五、安装pyocr for python 包
  • 六、编写测试程序
相关产品与服务
AI 应用产品
文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档