I am LAZY bones? AN ancient AND boring SITE

开源的命令行OCR软件──tesseract

tesseract-ocr是一个跨平台开源的OCR软件(Optical Character Recognition,光学字符识别),它历史悠久,早期是HP实验室的项目,现托管于google code。
大部分常用的linux发行版,应该都在源里包含了此软件,所以ubuntu下只需要 sudo apt-get install tesseract-ocr tesseract-ocr-eng 就可以安装了,注意必须安装 tesseract-ocr-eng 这个是识别英文字符所必须的数据文件。而在gentoo下,也只需要 emerge app-text/tesseract 就可以了,但是也必须给这个包添加 linguas_en 这个use,才会安装所需要的数据文件。
关于数据文件,还得交代一下,其实tesseract在2.0版以后,已经有了学习能力了,如果你想提高某个字体的识别率,或者识别不在默认语言包里的UTF-8字符(比如中文)的话,可以安装这个方法来训练出自己的数据文件。
这个OCR软件能干嘛呢?典型地应用就是识别验证码,哈哈。所以以这个为例,来介绍一下使用方法,先来看看这几个验证码(可“图片另存为”,然后自行测试):

这几个都是用默认的数据文件能正确识别的例子,由于tesseract只识别tiff格式的图片文件,所以识别之前,需要将图片先转成tif格式,具体如下:

$ convert cnblogs.com.jpe ppm:- | ppm2tiff yzm.tif
$ tesseract yzm.tif out
Tesseract Open Source OCR Engine
$ cat out.txt 
1750

同时,也有些比较难的验证码,是程序不能正确识别的,如下几个就是例子:

虽然识别的正确性不是非常高,但是已经很不错了,哈哈。
PS: 有没有人训练个识别google验证码专用的数据文件?

最后修改时间: 2009年12月30日 08:39

本文章发表于: 2009年12月29日 22:01 | 所属分类:CLI软件. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

21 个评论 关于: “开源的命令行OCR软件──tesseract”

  1. shellex 在 2009年12月29日 22:03 说:回复

    很好。。。方便了这下

  2. Tweets that mention I am LAZY bones ? : 开源的命令行OCR软件──tesseract -- Topsy.com 在 2009年12月29日 22:04 说:回复

    […] This post was mentioned on Twitter by shellex and 骨头, topsy_top20k. topsy_top20k said: li2z新文章: 开源的命令行OCR软件──tesseract (http://cli.gs/0LTEb) […]

  3. ggarlic 在 2009年12月29日 22:06 说:回复

    而在ubuntu下,也只需要 emerge app-text/tesseract 就可以了。。。。。。。。。。

    • bones7456 在 2009年12月30日 08:36 说:回复

      呃。。写错了,哈哈~~

  4. xiooli 在 2009年12月30日 00:09 说:回复

    额,我前不久还写了个生成验证码图片的脚本呢,不过是生成数学算式的,要算出答案才算验证过关。

    • bones7456 在 2009年12月30日 08:37 说:回复

      能把算式识别出来的话,要答案有啥难的?

      • xiooli 在 2009年12月30日 11:41 说:回复

        额,我要用汉字写呢?

        • bones7456 在 2009年12月30日 12:21 说:回复

          要自己训练一个数据文件啊,呵呵,用你那生成验证码的程序,搞出所有汉字的图片给它认,估计马上就能学会了。

          • xiooli 在 2009年12月31日 11:38 说:【 】

            额,这个玩意能学习就太无敌了,估计我用篆字写都能给认出来~~

  5. shuge.lee 在 2009年12月30日 02:39 说:回复

    骨头坏,净教小孩做坏事去

    OCR不是这么用的,人家是拿来做文献数字化的……

    • bones7456 在 2009年12月30日 08:38 说:回复

      呃。。确实,不过文献数字化不太好讨论嘛~这个方便,所以以此为例喽,哈哈~~

  6. volans 在 2009年12月30日 10:27 说:回复

    OCR还是挺好玩儿的,破解验证码也很好玩儿,但现在的验证码难度越来越大了……
    去年还玩儿过这个游戏……
    _http://journeyboy.blog.sohu.com/104513800.html

    推荐一个外国人收集的验证码网站:
    http://caca.zoy.org/wiki/PWNtcha

  7. abettor 在 2009年12月30日 13:56 说:回复

    邪恶啊!
    我的口水都流下来了~~~
    这事不能说太细!

  8. marklemon 在 2010年02月04日 14:06 说:回复

    请问 好像没有现成的中文语言库下载哦

    • bones7456 在 2010年02月04日 22:34 说:回复

      没找过哦,不知道中文的识别率会怎么样。

  9. sam 在 2010年03月01日 16:36 说:回复

    你好,我在debian 5.0下试了很奇怪,无法识别出来。

    $ wget http://li2z.cn/data/yzm/cnblogs.com.jpe
    $ convert cnblogs.com.jpe ppm:- | ppm2tiff yzm.tif
    $ tesseract yzm.tif out
    Tesseract Open Source OCR Engine
    $ cat out.txt
    ;;:g;;gg:搂;;;gg:搂:g;;;g:搂:i;;g

    我看了一下软件包的版本是:
    $ ls -l /var/cache/apt/archives/tesseract-ocr*
    -rw-r–r– 1 root root 837710 2008-06-13 05:32 /var/cache/apt/archives/tesseract-ocr_2.03-2_i386.deb
    -rw-r–r– 1 root root 1374982 2007-11-12 13:26 /var/cache/apt/archives/tesseract-ocr-deu_2.00-1_all.deb
    -rw-r–r– 1 root root 1014242 2007-11-12 13:26 /var/cache/apt/archives/tesseract-ocr-eng_2.00-1_all.deb

    请问是哪儿设置有问题?

    • bones7456 在 2010年03月01日 16:41 说:回复

      其他的几个图片也都不能识别吗?多试几个好了。
      另外,deu的是什么语言的数据包?删了好了。。。

  10. python验证码识别之Discuz(二) | Observer专栏杂记 在 2010年03月07日 07:17 说:回复

    […] 承接上文,上文写道去噪,本文应该接着从切块开始写,然后到比对的。然则上文写完之后开始收集训练样本,把样本用去噪算法一做,惨不忍睹;再加上上文之后有很多人留言提了不少意见,所以有了新的方向。 ` 首先骨头兄提议说可以用tesseract来做OCR,这个确实是一个很好的建议。很多验证码其实很简单,根本用不到高级的东东,直接用tesseract就可以摆平。 ` 然而经过实验,效果不尽如人意,如图: ` 还有关于选取多角度多采样的建议,后来发现会导致样本容量太大,性能受到影响,所以也作出了一定的调整,目前来说验证码识别的部分算是写完了,绝对识别率在10%左右,如果可接受其他候选结果的话,识别率在50%左右,不能识别的主要因素是去噪效果不理想和没有成功切块。 ` 最后还有关于Discuz验证码使用反色阴影的建议,虽然可能可以大幅提高去噪成功率,但是因为不够通用被我舍弃了。 ` 我不喜欢直接写结论,我会把我的探索过程和绕圈子过程一起写出来,因为这样看了才有收获,否则也就是”又一个注册码破解器”这种东东而已,能写出来多少就写多少吧。 […]

  11. 黑传说 在 2010年05月17日 12:35 说:回复

    这个识别大文件如何?我想把大批的扫描版pdf转化为文字版。

    • bones7456 在 2010年05月17日 12:50 说:回复

      这就很难说了,估计一般吧~

  12. 用 Tesseract OCR 系统扫描中文 : 自娱者 在 2010年12月16日 19:47 说:回复

    […] 总得来说,tesseract 对中文的支持还有待加强,特别是对繁体而言(当然也可能是我测试的图片质量问题影响,不过相比简体而言确实有待提高)。tesseract 当然不只有应用于文字扫描,还有一些更好玩的应用,比如,图片识别码的扫描。这里有一篇介绍图片识别码的文章:开源的命令行OCR软件–tesseract 。 […]

发表评论