Я хочу прочитать текстовый файл и извлечь из него текст на немецком языке и записать его на изображение png, используя PIL и python 2.7, но при записи в изображение с помощью .text () я получаю неизвестный текст всякий раз, когда Ü или какой-либо иностранныйперсонаж приходит.Я использовал arialunicodems.ttf для шрифта.
Во-первых, я извлекал текст из изображения, используя Microsoft Azure Cognitive Vision и используя .encode ('utf-8') для каждого слова и комбинируя слова, чтобы составить предложение вАнглийский, а затем преобразование в немецкий с использованием библиотеки Python mtranslate.Затем я использовал arialunicodems.ttf в качестве шрифта и использовал функцию .text () PIL Image для рисования текста в png.Он рисовал правильно для немецкого, китайского, хинди и т. Д. Но затем я хотел добавить функциональность, чтобы пользователь мог изменять переведенный текст, если он был переведен неправильно.Для этого я сохранил исходный текст и переведенный текст в TXT-файле и отобразил содержимое TXT-файла пользователю, где пользователь изменяет его, если необходимо, и измененный текст снова сохраняется в TXT-файле.Затем с помощью другой программы на Python я добавил текст к изображению.Но на этот раз текст становится бессмысленным всякий раз, когда его «, он рисует» на изображении.Для хинди это все бред.В чем может быть проблема?
Рабочий код: часть, где я объединял слова для составления предложения (сохраненный в переменном тексте).
for word in word_infos:
bbox = [int(num) for num in word["boundingBox"].split(",")]
if bbox[0]>=x and bbox[1]>=y and bbox[0]+bbox[2]<=x+w and bbox[1]+bbox[3]<=y+h:
text = text+word["text"].encode('utf-8')+" "
часть, где я записывал текст в изображение
im = Image.open("check.png")
d = ImageDraw.Draw(im)
helvetica = ImageFont.truetype("arialunicodems.ttf",10)
d.text((x,y), mtranslate.translate(text, sys.argv[3], sys.argv[2]), font=helvetica, fill=(0,0,0))
Неработающий код: часть, в которой я сохранял извлеченный текст в текстовый файл
for word in word_infos:
bbox = [int(num) for num in word["boundingBox"].split(",")]
if bbox[0]>=x and bbox[1]>=y and bbox[0]+bbox[2]<=x+w and bbox[1]+bbox[3]<=y+h:
text = text+word["text"].encode('utf-8')+" "
file.write("orignaltext:"+text+"\n")
часть, где я извлекал текст из файла txt и записывал изображение
im = Image.open("check.png")
d = ImageDraw.Draw(im)
file2 = open("1.txt","r")
printframe = file2.readlines()
#j and traceorig is defined to extract text in loop
orig = printframe[j*6+3][traceorig:len(printframe[j*6+3])-1].encode('utf-8')
#xstr,ystr,r,g,b are extracted from image
d.text((int(xstr),int(ystr)), mtranslate.translate(orig,"de","en").encode('utf-8'), font=helvetica, fill=(int(r), int(g), int(b)))
Для «Обзор» на английском я хочу
На немецком языке: Überblick
На хинди: अवलोकन
В обновленном коде, когда я печатаю на терминале, он печатает правильно, но на изображении, которое он пишет
На немецком языке: ☐☐berblick
На хинди: Не удается найти символы, см. Ссылку на изображение Перевод на хинди .
Обновление 1:
Пример кода для получения аналогичного результата
#!/usr/bin/python
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import cv2
import numpy as np
import sys
import os
reload(sys)
sys.setdefaultencoding('utf8')
#file has only one line with text "Überblick"
file1 = open("write.txt","w+")
file1.write("Überblick")
file1.close()
file2 = open("write.txt","r")
content = file2.readlines()
file2.close()
img = np.zeros((300,300,1), np.uint8)
cv2.imwrite("stack.png",img)
im = Image.open("stack.png")
d = ImageDraw.Draw(im)
helvetica = ImageFont.truetype("arialunicodems.ttf",50)
d.text((0,100), content[0].encode('utf-8'), font=helvetica, fill="white")
im.save("processed.png")
os.remove("stack.png")
См. Файл output.png для вывода. arialunicodems.ttf file