こんにちは、KIYONOエンジニアです。
突然ですが、Geminiを使って文書を読み取らせたことはありますか?
今月私はGeminiを用いたOCRに取り組んだので紹介いたします。
1. OCRとは?
OCRとは、「Optical Character Recognition(オプティカル・キャラクター・レコグニション)」の略称で、日本語では「光学文字認識」と訳されます。手書き文字や印刷された文字をスキャナーなどで読み取り、コンピューターが扱える文字データに変換する技術です。
iphoneのカメラを書類にかざすと文字が浮き出てくるのをイメージするとわかりやすいと思います。
2. 用いたGeminiのモデル
今回私が用いたのはgemini-2.5-flashです。
2025年10月時点での結果であるため、現在のモデルではより精度が高まっているかもしれません。
3. OCRのやり方
以下のコードは私が作ったGeminiAPIと通信するクラスを簡略化したものです。
import os
import google.generativeai as genai
class GeminiOCR:
def __init__(self, api_key=None, model_name="gemini-2.5-flash"):
# APIキーの設定
if api_key is None:
api_key = os.getenv("GEMINI_API_KEY")
genai.configure(api_key=api_key)
self.model = genai.GenerativeModel(model_name)
def extract_text(self, file_path, prompt="このドキュメントの文字を全て書き起こしてください。"):
"""
ファイル(PDF/画像)を読み取り、テキストを抽出する
"""
# 1. Geminiのサーバーへファイルを一時アップロード
# PDF, JPEG, PNG, WEBPなどに対応
uploaded_file = genai.upload_file(file_path)
# 2. ファイルとプロンプトを渡して生成
response = self.model.generate_content([prompt, uploaded_file])
return response.text
このコードはざっくりというと、
「書類のファイルパスを渡すと、Geminiが中身を読んで、文字だけ返してくれるクラス」です。
私の場合は、文字を起こすだけでなく、その情報をjson形式で出力するように指定しました。
{
"名前":山田太郎,
"誕生日":2025-12-11
}
のようなイメージです。GeminiのAPIキーを設定して試してみてください。
4.読み取り結果
いくつかの書類で検証した結果…
基本的に文字起こしが可能!
ただし、読み取れない文字がいくつか存在しました。
大まかな分類を紹介します。
①印影と重なっている画像

画像はイメージとなります。
Geminiを用いたOCRでは、このような陰影と重なっている文字の読み取り精度が急激に低下しました。
また、手描き文字が重なっている場合も同様に精度が下がりました。
②画像の境界で切り離された文字列

書類の中には、複数の画像を一つに繋げたものがありました。そのような書類の境界に位置する文字は読み取れない傾向にありました。
③漢数字で書かれた数字

書類の中には、縦書きで書かれていて日付が漢数字で書かれたものがありました。
出力形式をYY-MM-DDに指定していたため、AIの中で漢数字から日付に変換できなかったと思われます。
④潰れやすい漢字

このような潰れやすい漢字は読み飛ばす傾向にありました。
4.結論
結論として、
GeminiでのOCR完全自動化はまだ難しい
と言えます。
ただし、これらの条件以外では正常に読み取りが可能です。つまり、基本の文字起こし作業はGeminiに任せて、正確に読み取れているかどうかを自身で検証するという方向性で効率化は可能そうです。
しかし、Geminiは瞬く間に次世代への進化を遂げているので、完全自動化も遠い未来ではないでしょう。
ここまでご覧いただきありがとうございました。


コメント