我想使用tesseract进行序列号识别,我只想识别单个字符,没有单词,没有字典.因此,我想使用已经训练过的tesseract字体类型之一来获得更好的识别结果.
这些是训练有素的Tesseract字体类型:
Andale_Mono.ttf
Arial_Black.ttf
Arial_Bold.ttf
Arial.ttf
Comic_Sans_MS_Bold.ttf
Comic_Sans_MS.ttf
Courier_New_Bold.ttf
Courier_New.ttf
Georgia_Bold.ttf
Georgia.ttf
Gottf
Impact.ttf
Times_New_Roman_Bold.ttf
Times_New_Roman.ttf
Trebuchet_MS_Bold.ttf
Trebuchet_MS.ttf
Verdana_Bold.ttf
Verdana.ttf
Run Code Online (Sandbox Code Playgroud)
由于训练的字体类型也具有不同的字体设计样式,因此在区分例如"Z"和"2"字符方面存在问题.Times New Roman的设计更加圆润,而Arial只有更多的直线.

我的经验是,由于其他字体设计的相似性改变,tesseract在区分"Z"和"2"方面存在问题.
因此,如果只使用一种字体类型(例如Arial)用于使用tesseract进行字符识别,我认为我可以获得更好的识别结果.
题:
是否有可能在tesseract中指定字体类型?
类似但较旧的主题(2012年10月)链接
我有发票图片,我想检测上面的文字.所以我计划使用两个步骤:首先是识别文本区域,然后使用OCR识别文本.
我在python中使用OpenCV 3.0.我能够识别文本(包括一些非文本区域),但我还想从图像中识别文本框(也不包括非文本区域).
img = cv2.imread('/home/mis/Text_Recognition/bill.jpg')
mser = cv2.MSER_create()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #Converting to GrayScale
gray_img = img.copy()
regions = mser.detectRegions(gray, None)
hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions]
cv2.polylines(gray_img, hulls, 1, (0, 0, 255), 2)
cv2.imwrite('/home/mis/Text_Recognition/amit.jpg', gray_img) #Saving
Run Code Online (Sandbox Code Playgroud)
现在,我想识别文本框,并删除/取消识别发票上的任何非文本区域.我是OpenCV的新手,也是Python的初学者.我能够在MATAB示例和C++示例中找到一些示例,但如果我将它们转换为python,则需要花费大量时间.
有没有使用OpenCV的python的例子,或者任何人都可以帮助我吗?
您会建议从屏幕截图中识别所有字符?屏幕截图非常清晰(白色背景上只有黑色文字),我也可以为文本选择任何starndard字体(安装在Windows上).我尝试了一些OCR方式(Tesseract等),但它在识别某些字符方面犯了错误(这让我感到困惑,因为文本没有丝毫噪音,字体是最常见的字体 - Courier New,Fixedsys等),我需要它100%准确.是否有一些库可用于此特定目的,某些模式识别或其他什么?或者我应该使用一些等宽字体获取屏幕截图,并迭代通过图像移动到右+ font_size像素,然后比较捕获的东西与字母的内存表示和相同大小的相同字体的数量?解决这个问题的最佳方法是什么?非常感谢你提前.
更新:我终于通过使用monospaced字体(Courier New)训练Tesseract,以我所截取的精确尺寸设法获得100%的准确率.希望将来帮助某人:)
我想在linux中找到一个易于使用的OCR python模块,我找到了pytesser http://code.google.com/p/pytesser/,但它包含一个.exe可执行文件.
我尝试改变代码使用wine,它确实有效,但它太慢了,真的不是一个好主意.
是否有任何易用的Linux替代品?
我在iPhone上使用OpenCV,需要检测图像中的数字.我将图像分割成较小的图像,因此每个图像只有一个数字(1-9).所有数字都是打印的,不是手写的.
用OpenCV算出数字的最佳方法是什么?
更新:
我已成功找到数字并将其提取出来.它们看起来像这样:
http://img198.imageshack.us/img198/5671/101ht.jpg
http://img824.imageshack.us/img824/539/606yu.jpg
提取它们时,它们的大小相同,依此类推.我已经保存了一堆图像并将它们放在OCR目录中,在那里它们被分类为数字.喜欢:ocr/1/100.jpg 101.jpg ....和ocr/2/200.jpg 201.jpg ....
然后我将使用与Basic OCR教程相同的方法:http://blog.damiles.com/?p = 93
但是,我正在为iPhone编程,不能使用C++代码(编译时出错等),我无法访问highgui.
我尝试使用cvMatchTemplate()并匹配一堆图像,但它看起来很糟糕......
我可以尝试其他任何想法吗?
我有pytesseract的一些问题.我需要将Tesseract配置为配置为接受单个数字,同时也只能接受数字,因为数字零通常与"O"混淆.
像这样:
target = pytesseract.image_to_string(im,config='-psm 7',config='outputbase digits')
Run Code Online (Sandbox Code Playgroud)
非常感谢,
尼尔
我找到examples/image_ocr.py了OCR似乎.因此,应该可以为模型提供图像并接收文本.但是,我不知道该怎么做.如何使用新图像提供模型?需要哪种预处理?
安装依赖项:
cairocffi:sudo apt-get install python-cairocffieditdistance:sudo -H pip install editdistancetrain以返回模型并保存训练的模型.现在我有了model.h5.下一步是什么?
有关我当前的代码,请参阅https://github.com/MartinThoma/algorithms/tree/master/ML/ocr/keras.我知道如何加载模型(见下文),这似乎工作.问题是我不知道如何将带有文本的图像的新扫描提供给模型.
#!/usr/bin/env python
from keras import backend as K
import keras
from keras.models import load_model
import os
from image_ocr import ctc_lambda_func, create_model, TextImageGenerator
from keras.layers import Lambda
from keras.utils.data_utils import get_file
import scipy.ndimage
import numpy
img_h = 64
img_w = 512
pool_size = 2 …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 OCR 项目,并且正在为Tesseract使用 .Net 包装器。包装器的示例没有显示如何将 PDF 作为输入处理。使用 PDF 作为输入如何使用 c# 生成可搜索的 PDF?
如何通过保存原始 Pdf 的形状从 Pdf 获取文本
这是来自 pdf 的页面,我不想要只有文本,我希望文本的形状与原始 pdf 一样,并且英语不好
我一直在与Tesseract一起努力争取各种OCR项目,我今天发现了一个用例,我认为这会是一个扣篮,但是经过几个小时后我仍然不满意.我想在这里提出问题,看看是否还有其他人就如何解决这个问题提出了建议.
我的妻子今天早上来找我,问她是否可以轻松扫描她收到的沃尔玛收据,随着时间的推移,建立了类别和特定物品价格的历史记录,这样我们就可以做一些趋势并轻松深入研究支出在哪里.起初我觉得这是一个非常高的订单,但在做了一些挖掘后,我发现了一些让我觉得这是触手可及的事情:
沃尔玛的收据一般,结构合理,易于阅读.他们甚至包括每个项目的UPC(可能对UPC数据库进行查找?)并且似乎用F或I对食品进行分类(不确定区别是什么)并且还有一个税法代码列,这可能证明是有用的我了解代码的含义秘诀.
我进一步发现,我可能能够获得某种沃尔玛项目查找API,这对于UPC查找非常有用.
他们有一个智能手机应用程序,可以扫描每张收据上打印的二维码.该应用程序从收据中查找"TC"代码,并从其服务器中提取整个逐项收据.它向您显示收据的优秀图形表示,包括所有项目的缩略图和成本等.如果此应用程序只是分类和汇总收据,我会完成!但唉,这不是应用程序的目的....
最后一个难题是,您可以导出计算机生成的收据的PNG图像,以防您想要保存并扔掉纸质版本.这对我而言是拍摄的,因为这些PNG是由计算机创建的,因此不受拍摄照片或扫描纸质收据的问题的影响
其中一个示例(稍微编辑以淡化某些区域,但另外完全从应用程序获得)在这里:
https://postimg.cc/image/s56o0wbzf/
您可以看到文本的重要部分完全对齐在5列中,这最终是这个问题的内容.如何让Tesseract准确地将其转换成文本.我有很多想法从这里开始,但这一切都从OCR开始!
我最亲近的就是这个例子:
我使用psm6和一个字符限制集强制它只做大写+数字+几个符号:
tessedit_char_whitelist 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ#()/*@%-.
Run Code Online (Sandbox Code Playgroud)
乍一看,OCR似乎几乎匹配.但是当你深入挖掘时,你会发现整体失败的可能性非常大.3s和8s几乎总是错的.与6s和5s相同.然后有时候它会完全跳过字符或者开始分崩离析(例如示例中的第31行).它开始将2s视为1,甚至只是缺少字符.第33行的SO PIZZA应为"2.82",但为"32".
我已经尝试对图像进行一些预处理以加厚字符,并确保它是纯黑色和白色但我的努力没有比沃尔玛的原始图像+上述命令更接近.
理想情况下,因为这是一个结构良好的PNG,如果我可以按像素宽度定义列,我希望它总是宽度相同,以便Tesseract可以独立地处理每一列.我试图研究这个但是我见过的UZN文件并没有像素宽度那样转换给我,它们看起来像高度是因为高度总是变化的因素不适用于这些因素.
另外,我需要弄清楚如何训练Tesseract准确地识别数字100%(这些字母并不重要).我开始研究如何训练程序,但说实话,它很快得到了解决,因为文档中的培训范围更多的是让它识别整个语言而不仅仅是10位数.
终极游戏解决方案将是一个管道链的命令,它从应用程序中获取原始PNG,并返回一个CSV,其中包含来自收据重要部分的5列数据.我不指望这个问题,但任何指导我的帮助将不胜感激!在这一点上,我只是觉得不再被Tesseract鞭打,所以我决心找到一种方法来掌握她!
有没有办法让Tesseract只匹配用户指定的单词或模式?该手册声称它是可能的,但我无法在互联网上找到一个记录在案的实例.
以下是许多人寻求帮助的例子,因为它不起作用,而且没有一个人能得到证实.
stackoverflow.com/questions/33429143/tesseract-user-pattern-is-not-applied
stackoverflow.com/questions/31874393/tesseract-ocr-force-pattern
stackoverflow.com/questions/26856349/provide-pattern-for-tesseract
stackoverflow.com/questions/22432194/tesseract-ocr-only-detect-user-words
stackoverflow.com/questions/17209919/tesseract-user-patterns
groups.google.com/forum/#!topic/tesseract-ocr/S9CIK3jOMWw
groups.google.com/forum/#!topic/tesseract-ocr/5vFqVcJmHnM
那么我们可以得出结论,这个功能根本不起作用吗?这是否有官方声明?