gpt-4-miniの画像認識を試していて思ったんですが、
ChatGPTって実は結構OCR(文字認識)ができますよね。
しかも、単純なテキストじゃなくて複雑なレイアウトのPDFや歪んだ写真の文字とかも、それなりに読み取れます。
でも、ここでひとつ問題が。
たまにぜんぜんできなくなるんです。
「できないフリ」をするChatGPT
ChatGPTにOCRを命じて画像を渡すと、よくこんなやり取りになります。
ChatGPT「わかりました、いろいろインストールしてやってみます」
ChatGPT「……あれれ?できないですね」
ChatGPT「だめでした」
どうも内部的に「英語向けのOCRモード」を動かしてるらしく、日本語のOCRだと急にポンコツになることがあるみたいなんです。
なぜ「できないフリ」をするのか
ChatGPTの内部にはCode Interpreter(コードインタプリタ) とか ツール実行(function calling) と呼ばれる機能があります。
これは「Pythonで実際にコードを実行してみる」ための仕組みで、OCRを頼むとこんなコードを勝手に動かそうとします。
import pytesseract
from PIL import Image
text = pytesseract.image_to_string(Image.open("sample.png"))
ここで使われているのが、Tesseract(Google製OCR)。
多言語対応ですが、デフォルトは英語(eng)モデルなんです。
つまりChatGPTは、
「英語OCRで日本語を読もうとしてる」
ので、うまくいかずに「できません」と言ってしまうわけです。
魔法の呪文:「LLMの画像認識能力でやれ」
でもここで諦めてはいけません。
すっげえヘナチョコな結果が出ても、
「LLMの画像認識能力でやれ」
と命じると、なぜか普通に読めるようになることがあります。
これは「Python(Tesseract)を使わずに、ChatGPT自身のマルチモーダル認識能力で画像を読む」ように切り替わるためです。
実際これで、日本語OCRの精度がかなり上がることがあります。
「おい、できるだろ?知ってんだぞ。やれよ」
って言うと、ちゃんとやる。
騙されてはいけない。
まとめ
- 普通にやらせると、内部で英語用Tesseractを呼んで失敗する
- 「LLMの画像認識能力でやれ」と言うと、日本語でもかなり読める
もし日本語の画像をOCRしたい人がいたら、ぜひ試してみてください。
思ったよりも 「読めるじゃん!」 ってなるかもしれません。あいつサボってるだけだよ。