我有一堆来自扫描文档的PDF文件.这些文件包含图像和文本的混合.有些被扫描为没有OCR的图像,因此每个PDF页面都是一个大图像,即使整个页面完全是文本.其他人使用OCR进行扫描,并包含图像和可搜索的文本,其中包含文本.在许多情况下,甚至图像中的文字也可以搜索到.
我想使用OCR,使用Acrobat 8 Pro进行自动处理以识别所有扫描文档中的文本,但我不想重新OCR过去已经通过OCR过程的文件.有没有人知道是否有办法告诉哪些只包含图像,哪些已包含可搜索的文本?
我打算在C#或VB.NET中这样做,但我不认为能够分辨两种文件是依赖于语言的.
我搜索一个免费的.Net(C#)库,我可以使用它来扫描文档扫描仪,然后OCR文档,这样我就可以从中获取文本以保存在数据库中.
经过一些搜索,我找不到任何在Visual Studio 2010和.Net 4中工作的人,有人知道任何类似这样的库吗?
有没有人知道在服务器端ASP.Net Web应用程序(如MV4 Web API)上引用Microsoft.Windows.Ocr(/ WindowsPreview.Media.Ocr.dll)程序集的方法,并利用该程序集中的OCR功能将照片图像作为输入并从中提取文本内容.它? 如果是,请在答案中提供详细说明.
我正在构建一个Web应用程序,它将上传到服务器的图像(通过文件上传UI屏幕),然后使用OCR读取文本,并在下一页上显示文本,就在上传的图像旁边.
由于大多数商业OCR库成本一只胳膊和长度(超过$ 1,300个我最后一次检查),我想我可以尝试使用微软OCR库 Microsoft.Windows.Ocr是免费的,似乎是非常简单和容易使用.
所以我尝试将Microsoft.Windows.Ocr Nuget Package 安装到我的ASP.Net MVC4 Web API项目,并且成功了.

之后,我浏览了我的MVC4 Web API项目参考资料,令我惊讶的是,没有找到对Microsoft.Windows.Ocr.dll程序集的引用.

那么我尝试通过浏览到该\packages文件夹中的该程序集添加对Microsoft.Windows.Ocr.dll程序集的x86版本的引用,并从文件夹中选择WindowsPreview.Media.Ocr.dll\lib\win81\x86
注意:程序集名称是WindowsPreview.Media.Ocr.dll而不是Microsoft.Windows.Ocr.dll,不知道为什么!

当我这样做并单击确定时,我收到以下错误消息.
---------------------------
Microsoft Visual Studio
---------------------------
A reference to
'D:\TestProjects\packages\Microsoft.Windows.Ocr.1.0.0\lib\win81\x86\
WindowsPreview.Media.Ocr.dll' could not be added. Please make sure
that the file is accessible, and that it is a valid assembly …Run Code Online (Sandbox Code Playgroud) 和代码:
from PIL import Image, ImageEnhance, ImageFilter
import pytesseract
path = 'pic.gif'
img = Image.open(path)
img = img.convert('RGBA')
pix = img.load()
for y in range(img.size[1]):
for x in range(img.size[0]):
if pix[x, y][0] < 102 or pix[x, y][1] < 102 or pix[x, y][2] < 102:
pix[x, y] = (0, 0, 0, 255)
else:
pix[x, y] = (255, 255, 255, 255)
img.save('temp.jpg')
text = pytesseract.image_to_string(Image.open('temp.jpg'))
# os.remove('temp.jpg')
print(text)
Run Code Online (Sandbox Code Playgroud)
还不错,但打印的结果,2 WW
不是正确的文字2HHH,那么如何删除那些黑点呢?
我正在开展一个涉及提取以PDF格式存储的文本科学论文的项目.对于大多数论文而言,使用PDFMiner很容易实现,但一些较旧的论文将其文本存储为大图像.本质上,扫描纸张并且该图像文件(通常是PNG或JPEG)包括整个页面.
我尝试通过它的python-tesseract绑定使用Tesseract引擎,但结果非常令人失望.
在深入研究我对这个库的问题之前,我想提一下我对OCR库的建议持开放态度.似乎很少有本机python解决方案.
这是一个这样的图像(JPEG),我试图提取文本.我在上面链接的python-tesseract google代码页上的示例代码段中提供了确切的代码.我应该提一下,文档有点稀疏,所以我的代码中很多选项中的一个很可能配置错误.任何建议(或深入教程的链接)将不胜感激.
这是我尝试OCR的输出.
我的问题如下:
编辑: 为简单起见,这是我使用的代码.
import tesseract
api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_DEFAULT)
api.SetPageSegMode(tesseract.PSM_AUTO)
mImgFile = "eurotext.jpg"
mBuffer=open(mImgFile,"rb").read()
result = tesseract.ProcessPagesBuffer(mBuffer,len(mBuffer),api)
print "result(ProcessPagesBuffer)=",result
Run Code Online (Sandbox Code Playgroud)
这里是替代代码(其结果未在此问题中显示,尽管性能似乎非常相似).
import cv2.cv as cv
import tesseract
api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_DEFAULT)
api.SetPageSegMode(tesseract.PSM_AUTO)
image=cv.LoadImage("eurotext.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
tesseract.SetCvImage(image,api)
text=api.GetUTF8Text()
conf=api.MeanTextConf()
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这两个片段之间的差异吗?
我正在尝试检测以下类型的国民身份证并获取其详细信息.例如,签名的位置应该在人物图像的右上角找到,在本例中为"BC".

我需要在iPhone上做这个应用程序.我想过使用Opencv,但我怎样才能获得标记的细节?我是否需要使用类似卡片或OCR训练应用程序?
移动应用程序是否有任何特定的实现?
我还通过card-io检测信用卡详细信息,Card-io是否还检测到其他卡的详细信息?
更新:
我用tesseract进行文本检测.如果图像单独有文本,Tesseract工作正常.所以我裁剪了红色标记的区域并作为Tesseract的输入,它与MRZ部分一起工作.
有一个针对Tesseract 的IOS实现,我已经测试过了.
我需要做什么?
现在我正在尝试自动化文本检测部分.现在我打算自动化以下项目,
1)裁剪脸部(我已经使用了Viola-jones面部探测器).
2)需要从照片中获取此示例中的"BC".
3)从ID卡中提取/检测MRZ区域.
我正在努力做2和3,任何想法或代码片段都会很棒.
我只是想知道如果在一个表单中使用大写字母全部放在他们自己的小盒子中,那么tesseract对于手写识别有多准确.
我知道你可以训练它来识别你自己的笔迹,但我的问题是我需要在多个笔迹中使用它.谁能指出我正确的方向?
非常感谢.
我想使用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的例子,或者任何人都可以帮助我吗?