導入
OCR の練習には「文字が写った画像」が要ります。写真をアップロードしなくても、Pillow を使えばコードだけで文字入りの画像を作れます。第1章でも少し触れた方法を、もう少しくわしく見ましょう。
説明
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import matplotlib.pyplot as plt
img = Image.new("RGB", (320, 120), "white")
draw = ImageDraw.Draw(img)
font = ImageFont.load_default(size=48)
# 文字を描く
draw.text((20, 30), "Python", fill="black", font=font)
# 図形も描ける(枠線の長方形)
draw.rectangle([10, 10, 310, 110], outline="red", width=3)
plt.imshow(np.array(img))
plt.axis("off")
plt.title("draw text and shapes")
ImageDraw.Draw(img)で得たdrawが、描画の司令塔です。draw.text(位置, 文字, fill=色, font=フォント)… 文字を描きます。draw.rectangle([左, 上, 右, 下], outline=色, width=太さ)… 長方形を描きます。線・円・多角形なども同様に描けます。np.array(img)で Pillow 画像を NumPy 配列に変換し、matplotlib で表示しています。
やってみよう
draw.text の位置や文字、fill の色を変えてみましょう。draw.line([0, 60, 320, 60], fill="blue", width=2) を足すと、青い横線が引けます。
演習
画像に "OCR" という文字を描き、その下に もう1行 "2026" を描いてください(2つの draw.text を使います)。
ヒント1を見る
draw.text((20, 10), "OCR", fill="black", font=font) と draw.text((20, 60), "2026", fill="black", font=font) のように、y座標をずらして2回呼びます。
ヒント2を見る
フォントサイズが大きいと重なります。load_default(size=40) くらいに調整すると収まります。