導入
OCR は「画像(写真・スキャン・スクリーンショット)に写った文字を、編集できるテキストに変換する」技術です。私たちは文字をひと目で読めますが、コンピュータにとって画像は「色のついた点の集まり」でしかありません。その点の並びから「これは A、これは 5」と当てるのが OCR です。
説明
まずは「読み取られる側」の画像を、Python で作ってみましょう。Pillow(PIL)というライブラリで、白い画像に文字を描きます。この画像が、以降のレッスンで前処理・認識していく“素材”になります。
from PIL import Image, ImageDraw, ImageFont
import matplotlib.pyplot as plt
import numpy as np
# 白い画像(幅300 × 高さ100)を作る
img = Image.new("RGB", (300, 100), "white")
draw = ImageDraw.Draw(img)
# 文字を描く(フォントは Pillow 内蔵のものを使う)
font = ImageFont.load_default(size=40)
draw.text((20, 30), "HELLO 2026", fill="black", font=font)
# 画像を表示する
plt.imshow(np.array(img))
plt.axis("off")
plt.title("input image for OCR")
Image.new("RGB", (300, 100), "white")… 幅300・高さ100の白い画像を新規作成します。ImageDraw.Draw(img)… その画像に描き込むための“ペン”を用意します。ImageFont.load_default(size=40)… Pillow に内蔵されたフォントを 40px で使います(別途フォントファイルが要らないので、どの環境でも動きます)。draw.text((20, 30), "HELLO 2026", ...)… 座標 (20, 30) から文字を描きます。plt.imshow(...)… 出来上がった画像を下の図に表示します。
注意: 画像に描く文字は英数字にします。日本語を描くと、内蔵フォントに字形が無く「豆腐(□)」になってしまうためです。
やってみよう
draw.text の文字列 "HELLO 2026" を好きな英数字に変えたり、fill="black" を "red" に変えたりして、実行してみましょう。座標 (20, 30) を変えると文字の位置が動きます。
演習
上のコードの画像サイズを 幅400・高さ120 に変え、文字列を "OCR TEST" にして表示してください。
ヒント1を見る
Image.new("RGB", (400, 120), "white") に変え、draw.text((20, 40), "OCR TEST", fill="black", font=font) のように描きます。
ヒント2を見る
数字を変えるだけで OK。plt.imshow 以降はそのままで表示されます。