3
与えられた文字をnumpy配列にレンダリングする簡単な方法があるかどうか尋ねます。私が望むのは、文字を入力として受け取り、plt.imshow()
関数の引数として使用できるnumpy配列を返す関数です。それは簡単な仕事のように思える、多くの依存関係を必要とする解決策の2つを除けば、カンツは実際にインターネット上でそれを見つけます。ユニコード/アスキー文字をnumpy配列にレンダリング
与えられた文字をnumpy配列にレンダリングする簡単な方法があるかどうか尋ねます。私が望むのは、文字を入力として受け取り、plt.imshow()
関数の引数として使用できるnumpy配列を返す関数です。それは簡単な仕事のように思える、多くの依存関係を必要とする解決策の2つを除けば、カンツは実際にインターネット上でそれを見つけます。ユニコード/アスキー文字をnumpy配列にレンダリング
ODLにはtext_phantomがあり、これはいくつかの鐘や笛で正確に行われます。
簡略化された実装を提供するために、PIL
ライブラリを使用できます。具体的には、イメージサイズとフォントサイズを決定する必要がありますが、それはやや簡単です。
from PIL import Image, ImageDraw, ImageFont
import numpy as np
def text_phantom(text, size):
# Availability is platform dependent
font = 'arial'
# Create font
pil_font = ImageFont.truetype(font + ".ttf", size=size // len(text),
encoding="unic")
text_width, text_height = pil_font.getsize(text)
# create a blank canvas with extra space between lines
canvas = Image.new('RGB', [size, size], (255, 255, 255))
# draw the text onto the canvas
draw = ImageDraw.Draw(canvas)
offset = ((size - text_width) // 2,
(size - text_height) // 2)
white = "#000000"
draw.text(offset, text, font=pil_font, fill=white)
# Convert the canvas into an array with values in [0, 1]
return (255 - np.asarray(canvas))/255.0
これは、例えば、与え:
import matplotlib.pyplot as plt
plt.imshow(text_phantom('A', [100, 100]))
plt.imshow(text_phantom('Longer text', 100))
を私はこれを行うには、既製の方法を知っていませんが、私の提案は見つけることであろうアスキー文字のいくつかの画像は、 'scikit-image'を使ってバイナリ(閾値処理)に変換してからnumpy配列を自動的に取得します。 –