本文へスキップ
BecomeCoder

Python画像認識コース · 第2章 画像をコードで扱う · レッスン5

画像を作って文字を描く ― Pillow の基本

ブラウザで完結

導入

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) くらいに調整すると収まります。

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、本物の Pillow・OpenCV(Pyodide)で画像処理をその場で試せます。処理した画像は図として下に表示されます。初回や OpenCV を使う回は読み込みに時間がかかります(数十秒かかることがあります)。しきい値やフィルタの数値を書き換えて、画像の変化を確かめましょう(画像に描く文字は表示が崩れるため英字で書きます。Tesseract などOCRエンジン本体は第5章の読み物で解説します)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。