我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 项目源码 > tesseract-ocr 实现图片识别功能
总共48086条微博

动态微博

查看: 74226|回复: 83

tesseract-ocr 实现图片识别功能

  [复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2015-03-25 16:48:17 |只看该作者 |倒序浏览

    不久前因为项目需要,接触了一下关于图像识别的相关内容,比如Tesseract,这里就在这里分享下。

    1、Tesserac-ocr简介
    * C) ^- G, Y" |* \* ?& F9 g& P

    [一个Google支持的开源的OCR图文识别开源项目。去持多语言(当前3.02 版本支持包括英文,简体中文,繁体中文),支持Windows,Linux,Mac OSX 多平台。使用中Tesseract 的识别率非常高。可以在项目网站下载:http://code.google.com/p/tesseract-ocr,新版本支持中文,中文语言包定义http://code.google.com/p/tesseract-ocr/downloads/detail?name=chi_sim.traineddata.gz。]

    2、Tesseract安装: q, d3 `4 H$ s; S0 J; h* A8 c$ ~( u7 c

    这里使用的版本为Tesseract3.02。直接点击上面的链接,下载windows下的安装文件tesseract-ocr-setup-3.02.02.exe。由于上面的链接经常很难打开,因此在这里提供百度云链接:http://pan.baidu.com/s/1mg21nMK

    安装tesseract-ocr-setup-3.02.02.exe。安装成功后会在相应磁盘上生成一个Tesseract-OCR目录。如图我是安装到了如下位置


    8 ]% b6 T% [/ N) U4 h

    安装完成打开命令行,输入tesseract,展现如下图说明已经安装成功

    + u  ^5 h6 Y' U

    3、命令行测试使用

    接下来就可以使用tesseract进行图片识别了。准备一副待识别的图像,这里用画图工具随便写了一段字,然后定义成1.jpg

    1 h" E+ R" \1 A/ v

    8 U/ T1 r$ d* [2 k, V
    在命令行中定位到图片路径然后输入命令:

      tesseract 1.jpg result -l eng

         其中result表示输出结果文件txt名称,eng表示用以识别的语言文件为英文。会发现图片当前目录下生成了1个result.txt文件里面结果为

    9 t! f% y1 }+ }. j

      

    4、增加中文语言库

    安装目录下的tessdata目录存放的是语言识别包,如果想增加中文识别功能,可以将中文的语言库放到此目录下,下载链接在下面地址:http://pan.baidu.com/s/1hqnGq4c,下载后将解压出的chi_sim.traineddata放到此目录下。然后调用的时候指明语言库即可,例如:tesseract xxx.jpg result -l chi_sim

    照样,我们搞一个2.jpg图片,来测试下中文识别下的识别率怎么样。


    ( u& }# Z$ X8 Y

    执行后结果


    + n# }% y& q! x5 F. p* `) m$ t

    ,可以看到,识别率并不是十分令人满意。而且这边使用的例子都是十分正规的字体。如果遇到验证码那种不规则的字体,识别率也会大打折扣的。

    当然可以参考网上的相关资料进行对Tesseract字符识别进行样本训练,通过使用训练后的语言库会提高识别精度。这里就不做演示了。参考地址:

    http://blog.csdn.net/yasi_xi/article/details/8763385 。但是遗憾的是使用的工具jTessBoxEditor不支持中文训练。附带jTessBoxEditor1.0 下载地址:http://pan.baidu.com/s/1sjBe5el

    5、使用java调用tesseract

    那如何使用java程序调用相应的tesseract进行操作呢?

    这里介绍2种方式。

    一种是使用cmd方式,另外一种就是使用tess4j。tess4j的源码地址 http://sourceforge.jp/projects/sfnet_tess4j/ 中文首页

    感兴趣的自己下载查看源代码。

    由于范例代码较多就不一一贴出来了,会在文章结尾提供一个下载链接,大概讲下结构,

    : O( r5 r9 U; b$ ?9 t5 W! P

      

    如上图,tess4j包下是使用tess4j调用tesseract,src下的dll文件是需要使用到的。同时,加载的语言库文件也要放到tessdata目录下。而cmd 包下是使用cmd方式调用的范例,额外需要swingx-1.6.1.jar,调用时直接配置使用的安装的路径,并配置语言库即可。


    / d$ J# n! n: G- i$ P2 q) g7 w- X

      

    代码下载地址,由于附带了data文件,jar包等,所以会比较大,接近50M。导入到工程即可。各个包下都有测试的Test类,直接右键就可以运行。前提是对应目录下有相应图片。

    在cmd包下ClearImageHelper这个类是对图片进行处理的类,比如灰度转换,二值化,缩放等等,对于复杂图片可以先进行处理,来提高图片识别率。而tess4j下也封装了图片处理的工具类,基本都包含这些功能,例子中也给出了部分样例。

    Bty,话说使用原生态识别调用,跟tess4j得到的结果还是有所差别的。


    # B0 G6 R% W5 @6 ?& A" i+ p

    代码下载地址

    游客,如果您要查看本帖隐藏内容请回复

    ( r6 D5 R8 k4 k( @1 d8 o

    如果对图像识别感兴趣的同学可以学习下opencv等

    4 I3 X  V  d8 d# r! f4 |; W

    我的日常 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与我的日常享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和我的日常的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、我的日常管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    0

    主题

    0

    听众

    228

    金钱

    四袋长老

    该用户从未签到

    -1#
    发表于 2016-01-29 13:15:41 |只看该作者
    学习了,正好解决问题
    回复

    使用道具 举报

    2

    主题

    0

    听众

    128

    金钱

    三袋弟子

    该用户从未签到

    沙发
    发表于 2015-05-06 01:01:35 |只看该作者
    哈哈,留着用; U. Y7 c! z) Y: ?7 Q: r
    回复

    使用道具 举报

    2

    主题

    0

    听众

    31

    金钱

    二袋弟子

    该用户从未签到

    板凳
    发表于 2015-12-05 00:15:17 |只看该作者
    学习了,以后留着用
    回复

    使用道具 举报

    107

    主题

    0

    听众

    1341

    金钱

    六袋长老

    该用户从未签到

    地板
    发表于 2015-12-05 11:25:22 |只看该作者
    收藏了待用
    回复

    使用道具 举报

    3

    主题

    0

    听众

    73

    金钱

    二袋弟子

    该用户从未签到

    5#
    发表于 2015-12-21 22:10:49 |只看该作者
    头好痛,麻烦楼主大发慈悲
    回复

    使用道具 举报

    2

    主题

    0

    听众

    91

    金钱

    三袋弟子

    该用户从未签到

    6#
    发表于 2016-01-05 15:39:29 |只看该作者
    学习了,正好解决问题
    回复

    使用道具 举报

    2

    主题

    0

    听众

    91

    金钱

    三袋弟子

    该用户从未签到

    7#
    发表于 2016-01-05 16:16:05 |只看该作者
    *               *                          / A$ c. ]& q2 f
                      * * * *           *      
    4 \9 B4 v: b: A7 ~7 z% O       *                                    8 l; }  V* x4 X9 r
                                                ; _( R5 ]! M, {  B# f( ?
       *****       ***    ********    ****      2 o; F+ O4 i# O8 F' J) R- ^
      **   **     *** *         **   **  **     
    2 D  J; u( t; ]7 H, o     *  **   ****          *** *** *  **    / C- \: `% V4 p; i" `6 a4 Z0 n
           **      **          **         **    8 M( Z# B+ Y6 j5 \/ L3 t
         ***       **         **         **     : o3 \* \2 I( {- E% r* A+ ^1 S
           **      **        **         **      
    7 E) W+ |# I+ W       ***     **       ** *   * * **    *  
    4 ]7 S% k. j, h( p& U        **     **   *  **         **        / d2 k7 D% G2 ]7 R" ^) m8 _/ Y
    ***   **      **     **         **         + F3 F) S* n) A) N  B7 g" s
      *******    ******   **        ********    - Z% v' N5 X( Z( @1 }* `: O% z% g
                   *                            - X0 j. _3 \6 ?( Y( j
        * *               *                     . a$ P! E& ~2 L) P
                               *               
    % D: p0 Z: x4 D4 i0 v& }                                            0 e/ ?( k4 w. f+ b" W
    [[C@e77781. b% C' l; T% k' l4 p  g
    java.io.IOException: Cannot run program "C://ProgramFiles//Tesseract-OCR//tesseract" (in directory "E:\temp"): CreateProcess error=2, ϵͳÕҲ»μ½ָ¶. g1 L& K  p/ U1 I) v2 V
            at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
    8 o4 @+ ^* c  f! k. |+ i3 c4 B        at acts.songer.cmd.OCR.recognizeText(OCR.java:54)9 j6 y# j+ x& u: J* A2 h
            at acts.songer.cmd.TestOcr.getValCode(TestOcr.java:28)
    # z0 R* ]2 M7 T' F" A        at acts.songer.cmd.TestOcr.main(TestOcr.java:22)! ^+ p/ P# f9 H5 |% I0 e8 x) o
    Caused by: java.io.IOException: CreateProcess error=2, ϵͳÕҲ»μ½ָ¶
    5 s& n. t* v0 ^6 i        at java.lang.ProcessImpl.create(Native Method)6 G8 A$ q" M# x7 `
            at java.lang.ProcessImpl.<init>(ProcessImpl.java:385)
    6 \5 V, ~' ~0 E) D1 F0 q8 r        at java.lang.ProcessImpl.start(ProcessImpl.java:136)
    8 C3 H# x0 a1 _6 F' T        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
    3 @( X1 q; p/ O. B% a        ... 3 more' l1 n: ?: ~: J# T. N/ C8 ^) ]) [! W

      W) n) W1 `( }/ d1 w( x! M  @! p. n; s9 d
    我运行报错,这个是怎么回事啊。好像也没输出我想要的
    回复

    使用道具 举报

    1

    主题

    0

    听众

    50

    金钱

    一袋弟子

    该用户从未签到

    8#
    发表于 2016-01-14 14:30:22 |只看该作者
    好东西
    回复

    使用道具 举报

    admin    

    1244

    主题

    544

    听众

    1万

    金钱

    管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    9#
    发表于 2016-01-14 17:35:54 |只看该作者
    gytmtc 发表于 2016-1-14 06:30
    # e1 b- c0 C1 [0 P1 C$ F好东西

    6 h; l" X/ ^2 j1 [哈哈哈 好好学习
    回复

    使用道具 举报

    2

    主题

    0

    听众

    66

    金钱

    二袋弟子

    该用户从未签到

    10#
    发表于 2016-01-15 17:23:51 |只看该作者
    太棒了  非常好这个
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表