opencv自带一个字符识别的例子,它的重点不是OCR字符识别,而主要是演示机器学习的应用。它应用的是UCI提供的字符数据(特征数据)。

DAMILES在网上发布了一个应用OpenCV进行OCR的例子, http://blog.damiles.com/2008/11/basic-ocr-in-opencv/

这些例子都只能用于学习OpenCV或熟悉OCR的简单流程,因为它们与当前比较专业的OCR引擎的识别率相去甚远。

这里写下OpenCV下OCR的流程:

1. 特征提取

2. 训练

3. 识别

特征提取

1. 在图像预处理后,提取出字符相关的ROI图像,并且大小归一化,整个图像的像素值序列可以直接作为特征。damiles是直接将整个字符图像转换化为vector向量特征作为特征输入的。

2. 但直接将整个图像作为特征数据维度太高,计算量太大,所以也可以进行一些降维处理,减少输入的数据量。拿到字符的ROI图像,二值化。将图像分块,然后统计每个小块中非0像素的个数,这样就形成了一个较小的矩阵,这矩阵就是新的特征了。

UCI就是这么处理,详见其说明http://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits

OpenCV中letter_recog例子就是使用的其特征数据。

训练与识别

训练与识别一般都采用同一种机器学习方法:

DAMILES应用了KNearest方法,对输入数据进行训练和识别。

1. 数据输入:

getData()函数中:

为trainData和trainClasses设置数据。

2. 初始化机器学习算法,及其训练

knn=new CvKNearest( trainData, trainClasses, 0, false, K );

trainData, trainClasses数据已得到。

而K是分类的数目。

训练在CvKNearest算法初始化中已经完成

3. 识别

获取识别测试的数据,testData

result=knn->find_nearest(testData,K,0,0,nearest,0);

result为识别的结果。

而OpenCV自带例子中,提供了boost,mlp,knearest,nbayes,svm,rtrees这些机器学习方法,进行训练和识别。

处理的步骤和方式都类似。

这些例子的识别率不是很高,OCR识别率在90%以上才有较好的使用意义,所以,OCR还需要更多特征和分析方法,来提高识别率,tesseract是一个不错的开源OCR引擎。

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

在tesseract最初的字体库里,一种字体的字符样本库包括:94个字符,8种大小,4种字体(正常,粗体,斜体,斜粗体),每种20个样本,共60160个样本。

与UIC提供的字体库不同的是,tesseract提供的是标准印刷体字体库的识别,而UIC提供是手写体handwriting的特征数据。

数据之美提到,G公司(应该就是google了)的研究结果表明,在自然语言与机器翻译领域,简单模型加上大量有效样本数据,比复杂模型加上小样本数据,有效的多。 这个结论应该适用机器学习的很多领域。运算足够快,样本足够大,即使简单的模型,效果可能会出人意料。

由此可见,收集有效的、大量的样本库是多么的重要。

应用OpenCV进行OCR字符识别的更多相关文章

  1. 【实战】基于OpenCV的水表字符识别(OCR)

    目录 1. USB摄像头取图 2. 图像预处理:获取屏幕ROI 2.1. 分离提取屏幕区域 2.2. 计算屏幕区域的旋转角度 2.3. 裁剪屏幕区域 2.4. 旋转图像至正向视角 2.5. 提取文字图 ...

  2. Build OpenCV text(OCR) module on windows

    Background. AOI software needs to use the OCR feature to recognize the texts on the chips. Because o ...

  3. HALCON示例:BOTTLE.HDEV 光学字符识别(分割OCR)

    * * bottle.hdev: Segment and read numbers on a beer bottle 分割读取啤酒瓶上的数字* * Step 0: Preparations* Spec ...

  4. 使用Python基于OpenCV和Tesseract的OCR

    OCR OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方法将形 ...

  5. zw版·Halcon与delphi(兼谈opencv)

    zw版·Halcon与delphi(兼谈opencv) QQ群 247994767(delphi与halcon) <Halcon与delphi>系列,早两年就想写,不过一方面,因为Halc ...

  6. [收藏夹整理]OpenCV部分

    OpenCV中文论坛 OpenCV论坛 opencv视频教程目录(初级) OpenCV 教程 Opencv感想和一些分享 tornadomeet 超牛的大神 [数字图像处理]C++读取.旋转和保存bm ...

  7. [收藏转载链接]Opencv部分

    转载自-柳如风-http://www.cnblogs.com/rongfangliu/p/opencvlink.html [收藏夹整理]OpenCV部分   OpenCV中文论坛 OpenCV论坛 o ...

  8. opencv 视觉项目学习笔记(二): 基于 svm 和 knn 车牌识别

    车牌识别的属于常见的 模式识别 ,其基本流程为下面三个步骤: 1) 分割: 检测并检测图像中感兴趣区域: 2)特征提取: 对字符图像集中的每个部分进行提取: 3)分类: 判断图像快是不是车牌或者 每个 ...

  9. 【转】腾讯OCR—自动识别技术,探寻文字真实的容颜

    文字,一种信息记录的图像符号,千年来承载了太多的人类文明印记.OCR,一种自动解读这种图像符号的技术,一直以来都备受关注.尤其在信息时代的今天,数字图像纷繁复杂,如何便捷高效的获取其中的文字信息,更有 ...

随机推荐

  1. activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建

    项目中需要整合activiti-modeler自定义流程,找了很多资料后,终于成功的跳转到activiti-modeler流程设计界面,以下是记录: 一.整合基础:eclipse4.4.1.tomca ...

  2. Nginx_地址重写(rewrite)_日志管理(log_format)_压缩输出_Nginx设定限速_Nginx设置反向代理及反向代理缓存

    Nginx地址重写 Nginx rewrite rewrite语法规则1).变量名可以使用 "=" 或 "!=" 运算符~ 区分大小写~* 不区分大小写^~ 禁 ...

  3. 我的Android最佳实践之—— Android更新UI的两种方法:handler与runOnUiThread()

    在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外的线程中直接更新页面 显示常会报错.抛出异常:android.view.ViewRoo ...

  4. [物理学与PDEs]第3章习题参考解答

    [物理学与PDEs]第3章习题1 只有一个非零分量的磁场 [物理学与PDEs]第3章习题2 仅受重力作用的定常不可压流理想流体沿沿流线的一个守恒量 [物理学与PDEs]第3章习题3电磁场的矢势在 Lo ...

  5. C语言中,数组名作为参数传递给函数时,退化为指针

    C语言中,数组名作为参数传递给函数时,退化为指针   C语言中,数组名作为参数传递给函数时,退化为指针:需要数组大小时, 需要一个参数传数组名,另一个传数组大小. 数组名做函数参数时,就相当于指针了. ...

  6. 如何利用svn自动同步更新到网站服务器

    我们最终的目的是:当本地提交后,SVN服务器自动更新服务器端指定WEB目录内的文件 实现方法: 找到服务器端 SVN版本库所在的目录(目录名称是Repositories),这个目录是在安装Visual ...

  7. 【jQuery】关于选择器中的 :first 、 :first-child 、 :first-of-type

    [:first] <!DOCTYPE html><html lang="zh-CN"><head>    <title>test&l ...

  8. android之SeekBar控件用法

    MainActivity.java package com.example.mars_2400_seekbar; import android.support.v7.app.ActionBarActi ...

  9. .NET 验证码/验证图片

    /// <summary> /// 验证码类 /// </summary> public class Rand { #region 生成随机数字 /// <summary ...

  10. jsp标准标签库

    抄袭自:http://www.cnblogs.com/hongten/archive/2011/05/14/2046005.html JSP标准标签库     Pass by xkk ,and aut ...