我正在尝试从图像中提取文本。目前我得到的输出是空字符串。以下是我的pytesseract代码,尽管我也对Keras OCR持开放态度:-
from PIL import Image
import pytesseract
path = 'captcha.svg.png'
img = Image.open(path)
captchaText = pytesseract.image_to_string(img, lang='eng', config='--psm 6')
我不确定如何使用svg图像,所以我将它们转换为png。下面是一些示例图像:-
编辑1 (2021-05-19):我可以使用cairosvg将svg转换为png。仍然无法读取验证码文本
编辑2(2021-05-20):Keras OCR也不会为这些图像返回任何内容
Keras-ocr不工作或不返回任何东西的原因是因为灰度图像(我发现它不工作)。请参见下面:
from PIL import Image
a = Image.open('/content/gD7vA.png') # return none by keras-ocr,
a.mode, a.split() # mode 1 channel + transparent layer / alpha layer (LA)
b = Image.open('/content/CYegU.png') # return result by keras-ocr
b.mode, b.split() # mode RGB + transparent layer / alpha layer (RGBA)
在上文中,a
是您在问题中提到的文件;如图所示,它必须具有通道,例如灰度和透明层。b
是我转换为RGB
或RGBA
的文件。透明层已经包含在您的原始文件中,我没有删除它,但是如果需要的话,保留它似乎没有用。简而言之,要使您的输入在keras-ocr
上工作,您可以先将文件转换为RGB
(或RGBA
)并保存在磁盘上。然后将它们传递给ocr。
# Using PIL to convert one mode to another
# and save on disk
c = Image.open('/content/gD7vA.png').convert('RGBA')
c.save(....png)
c.mode, c.split()
('RGBA',
(<PIL.Image.Image image mode=L size=150x50 at 0x7F03E8E7A410>,
<PIL.Image.Image image mode=L size=150x50 at 0x7F03E8E7A590>,
<PIL.Image.Image image mode=L size=150x50 at 0x7F03E8E7A810>,
<PIL.Image.Image image mode=L size=150x50 at 0x7F03E8E7A110>))
完整代码
import matplotlib.pyplot as plt
# keras-ocr will automatically download pretrained
# weights for the detector and recognizer.
pipeline = keras_ocr.pipeline.Pipeline()
# Get a set of three example images
images = [
keras_ocr.tools.read(url) for url in [
'/content/CYegU.png', # mode: RGBA; Only RGB should work too!
'/content/bw6Eq.png', # mode: RGBA;
'/content/jH2QS.png', # mode: RGBA
'/content/xbADG.png' # mode: RGBA
]
]
# Each list of predictions in prediction_groups is a list of
# (word, box) tuples.
prediction_groups = pipeline.recognize(images)
Looking for /root/.keras-ocr/craft_mlt_25k.h5
Looking for /root/.keras-ocr/crnn_kurapan.h5
prediction_groups
[[('zum', array([[ 10.658852, 15.11916 ],
[148.90204 , 13.144257],
[149.39563 , 47.694347],
[ 11.152428, 49.66925 ]], dtype=float32))],
[('sresa', array([[ 5., 15.],
[143., 15.],
[143., 48.],
[ 5., 48.]], dtype=float32))],
[('sycw', array([[ 10., 15.],
[149., 15.],
[149., 49.],
[ 10., 49.]], dtype=float32))],
[('vdivize', array([[ 10.407883, 13.685192],
[140.62648 , 16.940662],
[139.82323 , 49.070583],
[ 9.604624, 45.815113]], dtype=float32))]]
陈列
# Plot the predictions
fig, axs = plt.subplots(nrows=len(images), figsize=(20, 20))
for ax, image, predictions in zip(axs, images, prediction_groups):
keras_ocr.tools.drawAnnotations(image=image, predictions=predictions, ax=ax)
假设我的用户去了他们办公室的扫描仪。扫描仪能够生成扫描文档的PDF。这基本上就是我拥有的文件类型。 我想做的是从这个PDF中提取文本。这不是“第一代”pdf,因为文本没有嵌入到pdf中。文本嵌入在PDF中的图像中。 PDFBox的iText中是否有允许检索此数据的功能?如果可能的话,我正在尝试避免对图像进行OCR。我希望IText或PDFBox中有一些内置的东西可以做到这一点。 请注意,我不是在谈
我知道以前也有人问过类似的问题,但是这些问题已经过时了(有些问题可以追溯到2006年)。 我有一个. net 3.5应用程序(w/iTextSharp 5),我正在转换为. net核心(iText 7),它从联邦快递跟踪文档中提取签名,通过SOAP服务以字节[]数组发送。这段代码多年来一直运行良好,只是略有更新。从联邦快递返回的PDF文档中有几个图像,但签名块不是110x46图像(这是pdf文件中
让我们以whalesay图片为例<代码>docker history显示以下内容: 我想提取显示为的层。有这样做的工具/方法吗?
我有车牌图像(图像像这些示例图像一样被裁剪)。我只想从输入图像中提取印版。 我已经应用了OpenCV Canny边缘检测器,但我不能再进一步了。有人能帮我吗? 我的最终目标是用我的公司标志替换这个标牌。 车牌图像示例:
我需要循环一些word文档,并从word文档中提取图像,并将其保存在单独的文件夹中。我尝试过将它们保存为超文本标记语言文档的方法,但它不太适合我的需求。 现在,我使用inlineshapes对象循环浏览图像,然后将它们复制粘贴到publisher文档上,然后将它们保存为图像。但是,在运行脚本时,我会遇到运行时自动化错误。对于使用Publisher运行时库,我尝试了早期绑定和晚期绑定,但都遇到了错误
问题内容: 我需要从服务器上的PDF文件中提取所有图像。我不想要PDF页面,只想要原始尺寸和分辨率的图像。 如何使用Perl,PHP或任何其他基于UNIX的应用程序(我将使用PHP的exec函数调用它)来做到这一点? 问题答案: pdfimages就是这样做的。它是poppler- utils和xpdf-utils软件包的一部分。 从联机帮助页: Pdfimages将可移植文档格式(PDF)文件中