Как я могу напечатать предложения хинди (unicode) на изображении в Python?
У меня есть файл с именем "hindi.txt". Он имеет следующее содержание. Я использую Python3.5.
कामकाजी महिलाओं के लिए देश में दिल्ली असुरक्षित, सिक्किम सबसे बेहतर: रिपोर्ट
9 साल से अटकी राफेल डील मंजूर, 59000 Cr में भारत खरीदेगा 36 फाइटर प्लेन
WhatsApp को टक्कर देने आर्टिफिशियल इंटेलिजेंस के साथ आया गूगल का Allo मैसेंजर
उड़ी हमले पर 10 खुलासे: आर्मी बेस में 150 मीटर अंदर तक घुस आए थे जैश के आतंकी
उड़ी हमलाः भारत का कड़ा रुख देखकर PAK ने LoC से सटे शहरों में कैंसल
PAK को आतंकी देश करार देने के लिए अमेरिकी संसद में पेश हुआ बिल
Я открываю этот файл и читаю строки за строкой. Затем распечатайте этот текст на изображении. Мой фрагмент кода показан ниже.
from PIL import Image, ImageDraw, ImageFont, ImageOps
import os
with open("hindi.txt", "r") as filestream:
cnum = 1
astr = filestream.read().splitlines()
font5 = ImageFont.truetype('/home/SunehraBharat/filestotweet/fonts/ARIALUNI.TTF', 26)
MAX_W, MAX_H = 1500, 1500
foreground_image = Image.new('RGB', (MAX_W, MAX_H), (0, 0, 0, 0))
draw = ImageDraw.Draw(foreground_image)
image_name = str(cnum) + "_" + "image.png"
current_h, pad = 40, 14
c = 1
for txtline in astr:
line = str(c) + "). " + txtline
#printing on console to check if lines are coming correctly.
print(line)
w, h = draw.textsize(line, font=font5)
draw.text((10, current_h), line, font=font5, fill=(255,255,255,1))
current_h += h + pad
c = c + 1
#saving image
foreground_image.save(image_name)
cnum = cnum + 1
Выход на консоль из-за печати (строка) statement- Исправить
कामकाजी महिलाओं के लिए देश में दिल्ली असुरक्षित, सिक्किम सबसे बेहतर: रिपोर्ट
9 साल से अटकी राफेल डील मंजूर, 59000 Cr में भारत खरीदेगा 36 फाइटर प्लेन
WhatsApp को टक्कर देने आर्टिफिशियल इंटेलिजेंस के साथ आया गूगल का Allo मैसेंजर
उड़ी हमले पर 10 खुलासे: आर्मी बेस में 150 मीटर अंदर तक घुस आए थे जैश के आतंकी
उड़ी हमलाः भारत का कड़ा रुख देखकर PAK ने LoC से सटे शहरों में कैंसल
PAK को आतंकी देश करार देने के लिए अमेरिकी संसद में पेश हुआ बिल
Теперь мой вывод изображения:
Как вы теперь можете сравнить, вывод не относится к вводу. Несколько слов неверны "सिक्किम", "महिलाओं".
Я пробовал разные шрифты. Но каждый раз получать одинаковый результат. Не могли бы вы мне помочь. И дайте мне знать, где я пропала.
Ответы
Ответ 1
Кажется, что открыта ошибка для отображения шрифта хинди (шрифт Деванагари).
https://github.com/python-pillow/Pillow/issues/3191
Вы можете попробовать с другой библиотекой, например: pyvips (я не считаю API очень интуитивным, но он может сработать для вас)
import pyvips
# To install 'pyvips' refers to https://pypi.org/project/pyvips/
# 1. Intall libvips shared library from https://jcupitt.github.io/libvips/install.html
# 2. Set the PATH variable.
# 3. run pip install pyvips
def generate_tweet_image():
cnum = 1
output_file = "tweet_file.png"
text = u''
with open("hindi.txt", "r", encoding='UTF-8') as filestream:
for l in filestream.readlines():
text = text + f'{cnum}) {l}'
cnum += 1
MAX_W, MAX_H = 1500, 1500
# See for API https://jcupitt.github.io/pyvips/vimage.html#pyvips.Image.text
# font file: ARIALUNI.TTF
image = pyvips.Image.text(text, width=MAX_W, height=MAX_H, font='Arial Unicode MS', dpi=96)
image.write_to_file(output_file)
print(f'File Written at : {output_file}')
generate_tweet_image()
Вывод:
Надеюсь это поможет.
Ответ 2
Когда я делаю это, я получаю сообщение об ошибке backend.load_library (путь, флаги)
Ошибка OSE: не удается загрузить библиотеку "C:\Program Files (x86)\Tesseract-OCR\libgobject-2.0-0.dll": ошибка 0xc1, пожалуйста, устраните это как можно скорее.