本文へスキップ
BecomeCoder

Python画像認識コース · 第1章 OCR・画像認識の全体像 · レッスン1

OCRとは何か ― 画像から文字を取り出す

ブラウザで完結

導入

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 以降はそのままで表示されます。

実際に動かしてみよう

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

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

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