Optical Character Recognition (OCR)
光学文字認識(OCR)は、スキャン画像や写真に含まれるテキストを、機械が読み取れる文字に変換します。検出と認識の各段階をコードとともに解説します。
光学文字認識(OCR)は、スキャンしたページ、写真、スクリーンショット、動画フレームなどの画像内のテキストを、ソフトウェアで検索、編集、分析できる機械可読文字に変換する技術です。初期のシステムは、各文字を既知のフォントの保存済みテンプレートと照合していました。最新のOCRではディープラーニングを使って画像内のあらゆる場所からテキストを検出し、単語や行をまとめて読み取ります。これにより、多様なフォント、低解像度、遠近法、雑然とした背景に対応できます。OCRは、請求書や書籍などの文書テキストと、標識、商品ラベル、ナンバープレートなどのシーン内のテキストの両方を扱います。
OCRの仕組み#
ほとんどのOCRシステムは、2つのモデルを順番に実行します。
- テキスト検出: 検出器は画像内のテキスト領域を見つけ、単語または行ごとにボックスやポリゴンを出力します。EAST、CRAFT、DBNetなどのシーンテキスト検出器は、ピクセル単位でテキスト領域を予測するため、曲がった文字や回転した文字にも対応できます。
- テキスト認識: 各領域を切り出し、傾きを補正して固定の高さにリサイズし、認識器で文字を読み取ります。CRNNは、切り出した画像をCNNに通し、得られた特徴列を双方向LSTMで左から右へ読み取ります。さらに、コネクショニスト時系列分類(CTC)で、各文字の開始位置をラベル付けせずに列ごとの予測を文字列に対応付けます。MicrosoftのTrOCRなどのTransformer認識器は、代わりにテキストデコーダーで文字を生成します。
画質の悪いスキャンでは、二値化や傾き補正などの前処理が今も役立ちます。後処理では辞書、想定される形式、または言語モデルを使って出力を検証します。EasyOCRは、CRAFT検出器とCRNN認識器の両方を80以上の言語向けにパッケージ化しています。
import easyocr
# Load EasyOCR's CRAFT text detector and English CRNN text recognizer
reader = easyocr.Reader(["en"])
# Detect every text region in the photo, then read the characters inside it
results = reader.readtext("https://ultralytics.com/images/bus.jpg")
# Each result holds a 4-corner box, the recognized string, and a confidence score
for box, text, confidence in results:
if confidence > 0.5:
print(f"{text}: {confidence:.2f}")cero: 0.95とemisiones: 0.99が出力され、バスの側面に描かれた文字を示します。検出器はバスのドットマトリックス式行先表示器や窓の小さな文字も見つけますが、認識器が返す文字列は乱れており、信頼度も0.5未満のため、しきい値によって除外されます。
文書では認識の前にレイアウト処理を追加します。レイアウトモデルがページをブロックに分割し、ブロックの種類ごとに処理してから、読み順に結果を再構成します。そのため、2段組みの記事は列ごとに読み取られます。
精度は、出力を正しいテキストにするために必要な文字の挿入、削除、置換の数を正しいテキストの長さで割った文字誤り率(CER)と、単語単位で同様に算出する単語誤り率(WER)で測定します。
OCRエンジンとモデル#
オープンソースのTesseractエンジンは1980年代にHewlett-Packardで開発が始まり、2005年にオープンソースとして公開されました。2006年から2018年にはGoogleの支援を受けて開発され、バージョン4でLSTMネットワークに基づく認識エンジンが追加されました。Google Cloud VisionやAmazon Textractなどのクラウドサービスは、レイアウト、表、フォームの抽出機能を追加します。ビジョン言語モデルは、文書を最初から最後まで読み取る用途で広く利用されるようになっています。Allen Institute for AIのolmOCRは、微調整済みのビジョン言語モデルを使ってPDFページを整形されたテキストに変換します。また、OCR不要の文書モデルは、先に別個の文字起こしを生成せずにページに関する質問に回答します。
OCRと関連用語#
- 手書き文字認識: 手書きテキスト認識(HTR)またはインテリジェント文字認識(ICR)とも呼ばれ、手書き文字を読み取ります。印刷文字と比べて文字の形に大きなばらつきがあり、文字同士がつながっていることもよくあります。
- 物体検出: 検出器は一時停止標識を物体として見つけ、OCRは標識に印刷された「S-T-O-P」の文字を読み取ります。OCR独自の検出段階では、テキストを読み取らずにその位置を特定します。
- 画像分類: 画像全体に「請求書」などのラベルを1つ付けますが、OCRは画像内の文字列を抽出します。
- インテリジェント文書処理: OCRをレイアウト解析や固有表現認識(NER)と組み合わせ、請求書の日付、取引先、合計金額などの特定の項目を業務システムに取り込みます。
実際のアプリケーション#
- ナンバープレート認識: 料金徴収、駐車場、交通取締りのシステムでは各プレートを検出してから読み取ります。プレートのボックスで学習したYOLO26モデルで検出し、回転バウンディングボックス版を使って傾いたプレートに合わせた回転ボックスを適用します。これにより、認識前に各切り出し画像の傾きを補正できます。
- ドキュメントのデジタル化: 銀行、保険会社、政府機関は、フォーム、領収書、アーカイブを検索可能なテキストに変換し、図書館は印刷書籍を大規模にデジタル化します。
- アクセシビリティと翻訳: スクリーンリーダーやカメラ翻訳アプリは、標識、メニュー、ラベルを音声で読み上げたり、ライブ画像に翻訳を重ねて表示したりします。
- 製造と物流: カメラは生産ライン上のロットコード、有効期限、シリアル番号を読み取ります。輸送コンテナのコードはISO 6346に準拠し、11文字の末尾にチェックディジットがあります。このチェックディジットは最初の10文字から計算されるため、読み取りミスのほとんどをリーダーが自動的に検出して拒否できます。










