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 中的字符识别

    OpenCV 中的字符识别通常使用 OCR 技术,OCR 可以识别图像中的字符并将其转换为可编辑的文本. 识别字符的方法有多种,以下是一些常见的方法: 基于模板匹配的字符识别方法:这种方法是将字符模板 ...

  2. 通过labview vision视觉模块写的带学习功能的OCR字符识别程序

    labview vision视觉模块写的带学习功能的OCR字符识别程序 为解决在用Labview做OCR字符识别视觉开发中每次都要用开发工具自带的学习模块,自己用VDM函数自己写了个子程序,方便嵌入带 ...

  3. ocr字符识别_Google的光学字符识别(OCR)软件适用于248种以上的语言

    ocr字符识别 Google的光学字符识别 (OCR)软件现在可用于248多种世界语言(包括所有主要的南亚语言). 它非常简单易用,并且可以检测大多数语言,且准确性超过90%. 该技术从图像中提取文本 ...

  4. Opencv之OCR识别(扫描后处理)

    OCR是指对文本资料进行扫描后对图像文件进行分析处理,获取文字及版面信息的过程.用Opencv进行OCR识别时,通常分为两步:扫描.识别. 举例说明:提取下图上的文字信息. 扫描 在扫描过程中,我们也 ...

  5. OCR字符识别,支持手写字体识别,中英文识别

    OCR字符识别,支持手写字体识别,中英文识别,基于深度学习,轻量级网络,检测进度高,支持python开发 编号:4199652712767280盐市口会玩的川乌

  6. 【深度学习】使用transformer实现OCR字符识别

    目录 1.数据集相关操作 1.1标签最长字符个数统计 1.2char和id的映射字典构建 1.3数据集图像尺寸分析 2.将transformer引入OCR 2.1准备工作 2.2数据集创建 3.模型构 ...

  7. 基于python的OCR字符识别

    官方网站:https://github.com/tesseract-ocr/tesseract 官方文档:https://github.com/tesseract-ocr/tessdoc 语言包地址: ...

  8. labview 如何实现ocr字符识别?

    labview自带vision算法库包含了ocr字符识别,与halcon的区别是需要自己建立字库,今天我们来看看如何利用labview视觉助手建立字库. ocr工具建立字库 设置参考坐标系 建立新的字 ...

  9. opencv ocr字符识别_OCR深度实践系列:图像预处理

    近一个半月时间没更了,在这段时间里针对OCR业务进行了深入研究,业务也已上线,谨以此篇作为OCR系列的开篇. 目前NLP+OCR的落地应用在市场上愈加火热,如金融领域的研报分析.司法领域的合同审核甚至 ...

最新文章

  1. 人工智能皇冠上的明珠:自然语言处理简介、最新进展、未来趋势
  2. 芯片的未来,靠这些技术了
  3. 面对 20 亿行代码,Google 如何管理?
  4. 小小知识点(十五)——origin pro 2018 安装和消除demo字样
  5. 基于InfluxDB+Grafana打造大数据监控利器--转
  6. webstorm前端调用后端接口_一篇前端同学对后端接口的吐槽
  7. oracle 10046详解
  8. 中科大计算机博士毕业条件,中国科技大学博士和硕士研究生毕业要求.doc
  9. 32位mysql安装包_MySQL安装指南(CPT103)
  10. 九、Pandas高级处理
  11. C语言之字符串探究(九):空格去除——trim系列
  12. enableEventValidation是干什么的?
  13. 自制 os 极简教程1:写一个操作系统有多难
  14. 过来人给Java初学者的建议!
  15. 利用echarts做堆积折线图
  16. css基本语法选择器
  17. 人生25句最美丽的名句
  18. 220609_Efficient Uncertainty-aware Decision-making for Automated Driving Using Guided Branching
  19. Ajax实现图片上传并预览
  20. 深入MTK平台bootloader启动之【 Pre-loader -> Lk】分析笔记

热门文章

  1. 38岁学python靠谱吗_Facebook中国软件工程师跳楼自杀:浙大毕业、年仅38岁……
  2. 教你填写有说服力的QQ号码申诉资料(转)
  3. MySQL及命令大全
  4. Linux运维工程师有“钱途”吗?
  5. 从半导体存储行业产业链看固态硬盘品牌实力
  6. 徐小平都退群了,区块链的价值何在?
  7. 性能测试工程师技术履历表
  8. 赛门铁克容灾方案VCS
  9. Vue3 mixin 选项混入 “混合“
  10. 没有理由拒绝的四款实用软件,让你办公无所不能