最近接触OCR,先收集一些资料,包括成熟软件、SDK、流行算法。

1. 一个对现有OCR软件及SDK的总结,比较全面,包括支持平台、编程语言、支持字体语言、输出格式、相关链接等

http://en.wikipedia.org/wiki/List_of_optical_character_recognition_software

以此为索引,比较、选择你想要的OCR SDK。

2. 另外一个OCR SDK 网站链接,商用,号称high performance,未深入了解,链接如下:

http://asprise.com/home/

3. 一个大学UCI 给出的handwriting数字的 training及testing数据:

http://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits

其每个数字近550个样本,出自43个人,30个人的用于training,13个人的用testing。其网站上有详细介绍。

4. 一个哥们对开源的OCR 库的总结:

http://blog.csdn.net/yzm888/article/details/5352423

5. 网上有很多OCR的online service,这里给出一个:

http://www.free-ocr.com/

是以tesseract为OCR引擎。

----------------------------------------------------------------------------------------------------

OCR常用算法:

OCR重要的是识别率,专家说达到90%以上才有意义。

OCR重要的两点:特征提取与匹配能力。

特征提取与图像处理算法的好坏密切相关。

匹配算法:

1. 模板匹配

包括多模板匹配、关键点模板匹配

2. 人工神经网络训练

3. 结构化分析、特征统计

---------------------------------------------------------------------------------------------------

tesseract是google开源的OCR,很流行。

这里记录下其应用方法及原理。

单个字符tesseract 测试:

命令行: tesseract  input.jpg out  -psm  10

输入图像应该遵守一定的规则,这样才能提高识别率:

其结果是M,错的结果。

而对

其结果是H,正确。

两个图片的区别就在于宽度不同,一个大小是(29,55),另外一个是(55,55),原以为图片是需要归一化,或宽高相等。后查看tesseract FAQ,提到改善结果的要素:

  1. please check DPI of your image and size of text
  2. try to set different segmentation mode (-psm option for command line) if you try to OCR small part of text (line, text)
  3. try to add border (see issue 398)
  4. try to pre-process image (increase DPI, resize, blur/sharpen image) before OCR (see issue 191)
  5. try to remove noise dewarp (so there are straight text lines) image and binarize image

这里是第三点add border,使结果改善。

经批量测试,确是如此。

其他,设置识别白名单,如只识别数字,或大写字母,可以大大提高识别率

将tessedit_char_whitelist 0123456789 放在config/digits中,数字可被替换。

测试200多个单个字符(200张图片),识别率达到90%,字符为黑体印刷体。

目前测试中增加字体宽度,对识别率,无明显影响。

为进一步提高识别率,对错误识别的字符再次进行训练学习

OCR学习及tesseract的一些测试的更多相关文章

  1. C++ primer学习记录(个人猜想未测试版本)

    学习版本:第五版. 本博文主要记录个人曾经并不知晓知识细节. 因为linux下的编译环境还未进行学习.所以实际代码测试将在今后完成. 红色:需确认. 蓝色:重点. 1)const对象设定为仅在文件内有 ...

  2. 学习使用TestNG进行数据驱动测试

    转自: https://mp.weixin.qq.com/s/8Bd8LEhiC2pu2VMcyNMGlQ 学习使用TestNG进行数据驱动测试 赵吃饭 51Testing软件测试网 前天   学习使 ...

  3. Tessnet2 a .NET 2.0 Open Source OCR assembly using Tesseract engine

    http://www.pixel-technology.com/freeware/tessnet2/ Tessnet2 a .NET 2.0 Open Source OCR assembly usin ...

  4. 转 Python3 错误和异常/ Python学习之错误调试和测试

    ########sample 0 https://www.cnblogs.com/Simon-xm/p/4073028.html except: #捕获所有异常 except: <异常名> ...

  5. Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建;学习Python语言,利用Python语言来写测试用例。加油!!!

    Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建:学习Python语言,利用Python语言来写测试用例.加油!!!

  6. 学习使用Jmeter做压力测试(一)--压力测试基本概念

    学习使用Jmeter做压力测试(一)--压力测试基本概念 一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测 ...

  7. 【转】OCR识别引擎tesseract使用方法——安装leptonica和libtiff

    原文来自:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c4224 ...

  8. 开源OCR识别库-Tesseract介绍

    最近在github上面看到一个开源的ocr文字识别库,感觉效果还可以,所以在这里介绍一下,这个项目的原地址在:https://github.com/tesseract-ocr/tesseract. t ...

  9. [机器学习] 深度学习之caffe1——软件配置与测试

    caffe的编译配置真的是很让人头疼啊,不知道试过多少次了~~~ 重装系统了七八次,搞得linux的一些常用命令倒是很熟悉了~~~ 我有洁癖~~~某一个点上出了错,我一定要把它搞好了,再重新来一次,我 ...

随机推荐

  1. rc.sysinit 解析

    $# :它可抓出 positional parameter 的數量,即脚本后面的参数有几个 $@和$*表示全部参数,但不包含脚本名,即$0,如果在command line上跑 my.sh p1 “p2 ...

  2. Docker 容器管理:rancher

    Rancher:https://www.cnrancher.com/ 是一个开源的企业级全栈化容器部署及管理平台. 定位上和 K8s 比较接近,都是通过 web 界面赋予完全的 docker 服务编排 ...

  3. VC++组合框——学习笔记1(组合框选项的添加和无法显示下拉选项)

    VC++控件 ---组合框  环境VC2003 1.组合框添加下拉菜单选项  现在有尝试了两个命令 (m_com为组合框控control类型的变量.) 方法一  m_com.AddString(&qu ...

  4. 【CF633H】Fibonacci-ish II 莫队+线段树

    [CF633H]Fibonacci-ish II 题意:给你一个长度为n的序列$a_i$.m个询问,每个询问形如l,r:将[l,r]中的所有$a_i$排序并去重,设得到的新数列为$b_i$,求$b_1 ...

  5. Java虚拟机三 Java堆和栈

    Java堆是和Java应用程序关系最为紧密的内存空间,几乎所有的对象都存放在堆中.并且堆是完全自动化管理的. 根据垃圾回收机制的不同,Java堆有可能有不同的结构.最为常见的一种就是将整个Java堆分 ...

  6. thinkphp---设置路由

    在做一个项目,在项目完成之后,配置一下路由,让URL更容易美观. 下面是具体的配置: Common / Conf / config.php // 路由处理 'URL_HTML_SUFFIX'=> ...

  7. Linux 常用命令标记

    1.linux 服务器之间拷贝文件 scp 本地用户名@IP地址:文件名1 远程用户名@IP地址:文件名2 该命令可以变型为目的服务器204上输入如下命令:红色部分是需要接受目的地,-r是递归复制该文 ...

  8. TFS二次开发04——工作区(Workspace)和映射(Mapping)

    在前面几节介绍了怎样读取TFS服务器上的项目以及文件的信息,这一节将介绍怎么建立服务器和本地的映射(Mapping). 引用命名空间 usingMicrosoft.TeamFoundation.Cli ...

  9. Python之shutil模块

    shutil 高级的 文件,文件夹,压缩包 处理模块 正常把一个文件的内容拷贝到另外一个文件 s = file("test.py")d = file("test_copy ...

  10. poj1066 Treasure Hunt【计算几何】

    Treasure Hunt Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8192   Accepted: 3376 Des ...