如果生成图的原始代码不可用,请安装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('
')
y_axis = [x for x in s if x.isdigit()]
x_axis = s.split('
')
x_axis = [x for x in x_axis if x[0].isalpha()]
x_axis = '
'.join(x_axis)
x_axis = re.split('(
[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('
') for x in x_axis]
x_axis = [x.lstrip('
') for x in x_axis]
x_axis = [ re.sub('
',' ',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之前将图像一分为二,则此代码可以变得更简单(一个用于左侧的标签,另一个用于条形和数字).