字符识别(OCR算法)

37
我正在开发一个项目,需要开发OCR算法(即从图像中读取文本并将其转换为不同的语言)。因此,我的第一个任务是从图像中获取文本。
完成第一个任务的步骤如下:
1. 从给定的源加载任何图像格式(bmp、jpg、png)。然后使用阈值(Otsu算法)将图像转换为灰度图像并进行二值化处理。//已完成(如何从输出图像中去除噪声?)
结果

Input Image

Output Image


2. 检测图像特征,如分辨率和翻转,以便最终将其转换为经过修正的图像进行进一步处理。(已完成图像旋转代码,但无法检测需要旋转的图像角度,因此仍在处理角度检测部分。) 3. 检测并删除线条。这一步是为了改善页面布局分析,提高下划线文本的识别质量,检测表格等。(决定在最后完成该部分) 4. 页面布局分析。在这一步中,我正在尝试识别图像中存在的文本区域,以便仅使用该部分进行识别,而其余区域则留空。 5. 文本行和单词的检测。在这里,我们还需要注意不同的字体大小和单词之间的小间距。 6. 字符识别。这是OCR的主要算法;必须将每个字符的图像转换为适当的字符代码。有时,该算法会对不确定的图像产生多个字符代码。例如,“I”字符的识别可以产生“I”,“|”“1”,“l”代码,最终的字符代码将在稍后选择。 7. 将结果保存到所选的输出格式中,例如可搜索的PDF、DOC、RTF、TXT。重要的是保存原始页面布局:列、字体、颜色、图片、背景等。
我需要在第六部分寻求帮助。我已经完成了行检测部分(从包含n行的段落中获取n个图像),但卡在接下来的单词和字符识别部分。如果您知道与OCR和字符识别有关的好链接,请在此处发布。
对于字符识别,我考虑使用asprise(Java库)http://asprise.com/product/ocr/index.php?lang=java

对于文档部分,您可以使用Apache POI库http://poi.apache.org/,对于txt文件,您可以编写自己的streamwriter,这不应该很难,对于PDF,您可以使用http://www.stefanochizzolini.it/en/projects/clown/ PDfClown。 - Tearsdontfalls
你能提供更多关于OCR的学习参考资料吗? - TLE
OCR是一个成熟和经过研究的主题。我一直觉得这篇关于它的文章很好读。http://www.handwritten.net/mv/papers/mori92historical_review_of_ocr_research_and_development.pdf 对于OCR分区的问题,特别是这篇文章非常有趣。 http://www.music.mcgill.ca/~ich/classes/mumt611_08/Evaluation/KanaiPAMI95.pdf - Bjoern Rennhak
为了将图像矫正,这里有一个技巧,当我开始写一些关于音乐符号OCR的东西时,我使用过:http://verens.com/2012/07/26/straightening-an-image-of-horizontal-lines/ - Kae Verens
4个回答

18

要检测旋转角度,请使用霍夫变换

为了进行降噪,请用相邻像素(北、东、南或西)中具有相同颜色(使用容差阈值的类似颜色)的任何像素替换掉没有相邻像素的像素,并以相邻像素的平均值代替。

搜索垂直白色间隙以进行布局检测。沿着垂直间隙切割。对于每个切片,现在搜索水平间隙并切割。如果切片具有相同(类似)的高度,则您处于行级别。否则重复垂直/水平分割,直到只剩下行。然后最后一步是再次垂直切割,从而得到单个字符(或在某些情况下是连字)。长而窄或短而宽的切片是行。

将字符切片与字符库进行比较。如果性能不是主要问题,请尝试在不同的字体库中查找字符,直到可以识别所使用的字体。然后使用该字体进行字符识别

在原始图像中,将每个字符替换为背景颜色,该背景颜色是通过插值不是字符的像素得出的每个字符的像素。这将给您背景图像(如果有)。


我想要一些良好的噪声去除方法。"用相同的颜色替换任何没有邻居(北、东、南或西)的像素点" 并不能有效地去除噪声。 - TLE
如果您有关于字符笔画宽度的信息,可以寻找更大的聚类。您还可以使用Hough来检测间隙,这样噪声就不会那么干扰了。 - nibra
我在字符匹配部分只得到了60%的准确率,我该如何改进呢?对于字符匹配,我正在使用自己的方法来匹配字符图像。 - TLE
如何检测字符之间的间距,在从图像中获取字符后,我们需要组成句子,为此我们需要添加空格。 - TLE
你需要根据字符的位置来计算它。 - nibra

5

3

你可能想要了解Tesseract,它可以用于字符识别部分。


1
Google Vision API也值得一试,它可以执行OCR,虽然我还没有尝试过。 - absin

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接