python - 从图像中提取统计数据/信息

标签 python image

假设我有一张带有条形图的图像,如下所示:

source: statista.com

我想提取条形图和标签的值,除了训练 ML 模型之外,还有其他方法吗?

我有一堆图像,我为其生成了图表和一些描述。我目前正尝试仅从我能够做到的描述中提取信息,但我意识到那里的信息是有限的。所以我也想从图像中提取信息。是否有可能以最简单的方式实现这一点?

浏览一些引用资料会很有帮助。语言偏好是 Python。我不知道如何处理图像。

注意:图片和描述是我创建的。

最佳答案

如果生成绘图的原始代码不可用,请安装 tesseract,然后安装 PIL 和 pytesseract。

sudo apt-get install tesseract-ocr

sudo -H pip3 install pillow pytesseract

您可能还想 download the French datafiles并将它们放在 /usr/share/tesseract-ocr/tessdata 中。

我将你的图片保存为 chart.png 然后我写了下面的代码。

import pytesseract
from PIL import Image
img = Image.open('chart.png')

print(pytesseract.image_to_string(Image.open('chart.png'),lang='fra'))

这是输出。

Château d’AzayflefRideau

Château et musée de Blois

Château des Bau>«dæProvence
Crypte archéologique de NotræDame
Théâtre antique et musée d’Orange

Château d’Angers

Château des ducs de Bretagne, musée
d'histoire de Nantes

281

271

258

223

197

184

180

2 000

4 000 6 000 8 000
Number of V|s|tors ln thousands

10 000

12

如果您所有的图像都遵循完全相同的格式,那么现在我们要做的就是使其可读。

import pytesseract
from PIL import Image
import re
img = Image.open('chart.png')
s = pytesseract.image_to_string(img,lang='fra')
y_axis = s.split('\n')
y_axis = [x for x in s if x.isdigit()]
x_axis = s.split('\n\n')
x_axis = [x for x in x_axis if x[0].isalpha()]
x_axis = '\n'.join(x_axis)
x_axis = re.split('(\n[A-Z])',x_axis)
x_axis = [x_axis[0]] + [ ''.join(x) for x in zip(x_axis[1:][0::2],x_axis[1:][1::2]) ]
x_axis = [x.rstrip('\n') for x in x_axis]
x_axis = [x.lstrip('\n') for x in x_axis]
x_axis = [ re.sub('\n',' ',x) for x in x_axis]
y_axis = y_axis[0:len(x_axis)]
result = list(zip(x_axis,y_axis))
print(result)

现在你有:

[('Château d’AzayflefRideau', '281'), ('Château et musée de Blois', '271'), ('Château des Bau>«dæProvence', '258'), ('Crypte archéologique de NotræDame', '223'), ('Théâtre antique et musée d’Orange', '197'), ('Château d’Angers', '184'), ("Château des ducs de Bretagne, musée d'histoire de Nantes", '180')]

如果在将图像传递给 pytesseract 之前将图像分成两部分(一个用于左侧的标签,另一个用于条形和数字),此代码会变得更简单。

关于python - 从图像中提取统计数据/信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51135742/

相关文章:

python - 使用 2d 键从 count 获取主元

python - 优化器返回 None

wpf - 使用 WPF 将位图复制到其他位图中

image - 在IE8/9中,缩放后的图像质量比在IE7中差

css - 如何使用 CSS 更改滚动条的背景?

html - 按钮只有一部分可点击

python - 在其他函数中重新定义python函数

python - 我如何进一步分析和优化这个字符串标记化函数?

python - "Hello World"CTC(联结时间分类)模型

带有 TouchableOpacity onpress 的图像在 React Native 中不起作用