利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别
--------------------------------------------------低调的分割线---------------------------------------------------
Linux下有两个重要的编程准则,甚至是设计哲学,就是:模块原则(使用简洁的借口拼合简单的部件)和组合原则(设计时考虑拼接组合)。在Linux 下面有无数个小程序,体积小,功能简单。但是当我们将它们按一定的方式组合起来以后,它们 几乎无所不能。命令行的一个很大的好处就是方便组合。试想一下你要处理一万个文本文件,并替换其中的部分内容,如果是使用图形界面的Word,恐怕没有人 能够干的下来。
今天我们要用到两个开源软件:ImageMagick+tesseract-ocr。
--------------------------------------------------ImageMagick---------------------------------------------------
首先是一点简介(英文原文源于官方网站):
ImageMagick是一个适用于创建、编辑和组合位图的软件。它能够读、写和转换超过百余种格式的图片。
另外,ImageMagick针对主流的编程语言都有借口,包括G2F (Ada), MagickCore (C), MagickWand (C), ChMagick (Ch), ImageMagickObject (COM+), Magick++ (C++), JMagick (Java), L-Magick (Lisp), NMagick (Neko/haXe), MagickNet (.NET), PascalMagick (Pascal), PerlMagick (Perl), MagickWand
for PHP (PHP), IMagick (PHP), PythonMagick (Python), RMagick (Ruby), 和 TclMagick (Tcl/TK)。当然,你也可以通过命令行的方式将它与其它程序组合起来。
ImageMagick是一个开源软件,以可运行的二进制文件和源代码两种方式发布。你可以在公开和私有的程序中随意地使用、复制、修改和分发它。它基于Apache 2.0风格的协议发布。
其次,貌似ImageMagick的官方网站是被功夫墙了的(这可是纯技术的网站啊!),所以我们无法直接去获取该程序,这里是国内的下载。
最后是安装,没的什么说的,最简单一路next就可以,当然你也可以改改安装目录啥的。放心,没有捆绑百度工具栏的~
--------------------------------------------------tesseract-ocr---------------------------------------------------
先来介绍下tesseract-ocr,老规矩,英文原文源于官方网站
tesseract-ocr是一个OCR(Optical Character Recognition,光学字符识别)引擎,最初由惠普实验室在1985到1995年间开发维护,现在归Google管了。
tesseract-ocr引擎曾是1995年UNLV准确度测试中最顶尖的三个引擎之一。在1995年到2006年期间,它几乎没有什么改动,但是它可能仍然是现在最准确的开源OCR引擎之一。它(原文是source
code,源代码,应该是笔误)会读取二进制的灰度或者彩色的图像,并输出文字。一个内建的tiff阅读器让它可以读取未压缩的TIFF图像,但是如果要读取压缩过的TIFF图像,它还需要一个附加的libtiff库。
由于官方没有被封,直接在官网就可以下载了。 我们需要下载tesseract-2.04.exe.tar.gz和tesseract-2.00.eng.tar.gz。tesseract- 2.04.exe.tar.gz是主程序。tesseract-2.00.eng.tar.gz是识别英文和数字需要用的特征库,有点类似于杀毒软件的病
毒库。tesseract-ocr还可以识别荷兰语、西班牙语和德语等等等等,我们用不着就不用下了。
最后,这个软件是不用安装的,解压就可以用了。先解压tesseract-2.04.exe.tar.gz,然后解压tesseract- 2.00.eng.tar.gz的内容到tesseract的根目录,就可以了。如果解压tesseract-2.00.eng.tar.gz的位置没有 放好,运行tesseract 会出错:Unable to load unicharset file ./tessdata/eng.unicharset。
---------------------------------------------------验证码识别----------------------------------------------------
两个软件的关系:
tesseract是图盲,默认情况下只能看得懂未压缩的TIFF图像,如果直接用tesseract处理其它格式的图片,会报错如下:
Tesseract Open Source OCR Engine
name_to_image_type:Error:Unrecognized image type:code.jpg
IMAGE::read_header:Error:Can’t read this image type:code.jpg
tesseract:Error:Read of file failed:code.jpg
所以我们需要用ImageMagick来转换图片格式,当然ImageMagick还有其它用处。
假设需要识别的图片验证码为code.jpg,我们需要做的只有两步:
命令行下 convert.exe -compress none -depth 8 -alpha off code.gif code.tif
命令行下 tesseract.exe code.tif result
OK,结果就在文本文件result.txt里面了,tesseract会自动地在result后面添加上后缀名.txt。
然后再对两个命令做点解释。
convert.exe:ImageMagick套件的一部分,负责图片格式转换,各个参数的意义如下:
-compress none:转换后的图片不要压缩,如果没有加这一项,后续tesseract处理的时候会报错:read_tif_image:Error:Illegal image format:Compression
-depth 8:设置转换后图像的色深为8位,也就是bpp为8。如果没有此参数,后果如下:
Tesseract Open Source OCR Engine
check_legal_image_size:Error:Only 1,2,4,5,6,8 bpp are supported:16
Segmentation fault
-alpha off:在转换后的图像中不要添加alpha图层。如果没有此参数,后果同上。
紧跟着就是待转换的图片的文件名,最后是转换后的图片的文件名。
tesseract.exe:OCR就这样被我们“滥用”做验证码识别了~。
code.tif:待识别的图像
result:存放结果的文件的文件名,tesseract会自动在其后添加后缀.txt。
就这么简单,仅仅两个命令,验证码的内容就乖乖地在result文件中等我们了。
----------------------------------------------------优化大法-----------------------------------------------------
在黄师傅的博客看到了一些可能的优化方法(未验证),记录如下:
为提高识别率,可以先把图片转换为灰度。即弄黑白的:在convert的时候加上参数-monochrome(单色,非黑即白)或者-colorspace Gray(灰度图,黑的程度还会不一样哦,效果会好点)。
做放大处理(以150%为例):convert in.tif -scale 150% in2.tif
如果要裁剪图像,使用参数-crop从一个图片截取一个指定区域的子图片【参见这里】。 格式如下:-crop widthxheight{+-}x{+-}y{%},width 子图片宽度,height 子图片高度,x 为正数时为从区域左上角的x坐标,为负数时,左上角坐标为0,然后从截出的子图片右边减去x象素宽度,y 为正数时为从区域左上角的y坐标,为负数时,左上角坐标为0,然后从截出的子图片上边减去y象素高度。
---------------------------------------------------识别中文字符-----------------------------------------------------
此时中文识别不好,要下载一个中文包:http://code.google.com/p/tesseract-ocr/downloads/detail?name=chi_sim.traineddata.gz&can=2&q=
然后找到tessdata目录,把eng.traineddata替换为chi_sim.traineddata,并且把chi_sim.traineddata重命名为eng.traineddata
ok,现在中文识别基本达到90%以上了
利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别的更多相关文章
- tesseract ocr训练 pt验证码
识别率有问题A大概率识别为n,因此需要训练,这里讲一下 如何训练 参考 java代码里边直接使用tess4j,是对tesseract的封装,但是如果要训练,还是需要在进行安装tesseract-ocr ...
- Java使用Java OCR API进行验证码识别
Maven坐标: <!-- https://mvnrepository.com/artifact/com.asprise.ocr/java-ocr-api --> <dependen ...
- 基于pyteseract google ocr的图形验证码识别
先灰化图片,把图片二值化,利用pytesseract包的pytesseract.image_to_string转换出文字.
- Python 3.6 版本-使用Pytesseract 模块进行图像验证码识别
环境: (1) win7 64位 (2) Idea (3) python 3.6 (4) pip install pillow < >pip install pytesse ...
- tesseract ocr文字识别Android实例程序和训练工具全部源代码
tesseract ocr是一个开源的文字识别引擎,Android系统中也可以使用.可以识别50多种语言,通过自己训练识别库的方式,可以大大提高识别的准确率. 为了节省大家的学习时间,现将自己近期的学 ...
- 开源图片文字识别引擎——Tesseract OCR
Tessseract为一款开源.免费的OCR引擎,能够支持中文十分难得.虽然其识别效果不是很理想,但是对于要求不高的中小型项目来说,已经足够用了. 文字识别可应用于许多领域,如阅读.翻译.文献资料的检 ...
- Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考
在自动化测试或者安全渗透测试中,Captcha验证码的问题经常困扰我们,还好现在OCR和AI逐渐发展起来,在这块解决上越来越支撑到位. 我推荐的几种方式,一种是对于简单的验证码,用开源的一些OCR图片 ...
- Tesseract OCR使用介绍
#Tesseract OCR使用介绍 ##目录[TOC] ##下载地址及介绍 官网介绍:http://code.google.com/p/tesseract-ocr/wiki/TrainingTess ...
- [免费下载应用]iNeuKernel.Ocr 图像数据识别与采集原理和产品化应用
目 录 1..... 应用概述... 2 2..... 免费下载试用... 2 3..... 视频介绍... 2 4..... iNeuLink.Ocr图像数据采集应用... 2 5... ...
随机推荐
- Ubuntu1404 (2)
1.启动远程桌面 (1)设置桌面共享:usr->share->applications->桌面共享,勾选"允许查看桌面"和"允许控制桌面",& ...
- xfce4 启用回收站
Userspace virtual filesystem implemented as a pluggable module for gio # pacman -S gvfs
- Java class file format specfication
Java class file format spec Link: https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html Her ...
- SBCL 从REPL 中提取lisp代码
1, 在emacs C-x C-W 文件另存为保存所有REPL过程 由于 (load "foo.lisp")时只有定义语句可以正确执行, 执行语句不可正确被 (load " ...
- Docker网络详解
当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机.它会在挂载到它的网口之间进行转发. ...
- Nancy+BUI+SQLite自动更新服务端和客户端保护更新程序
写了一个自动更新服务网站和自动更新客户端.基本功能测试完毕.记录下 项目地址:https://github.com/TeemoHQ/AutoUpdate 需求 自动集成,回退版本,守护进程,服务端操作 ...
- float、double的有效位数
Java中的浮点类型有两类,分别是float和double类型,其中float取_7__位有效数据,double取_15__位有效数据
- 过渡transitioin
一,什么是过渡(transition)? 1,transition 允许 CSS 元素的属性值在一定的时间区间内平滑地过渡. 2,可以在不使用 Flash 动画或 JavaScript 的情况下,在元 ...
- Python自动化 【第十二篇】:Python进阶-MySQL和ORM
本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 外键 增删改查表 权限 事务 索引 python 操作mysql ORM sql ...
- ubuntu软件推荐
本文推荐的ubuntu工具均为笔者亲用.原则:在精不在多. 0.万能类 笔者崇尚[极简主义],常用的工具如果有网页版的就尽量不用单独的client.如网页版微信. 1.系统类 截图:Deepin-sc ...