私はスマホをスーパーのレシートに向けた。AIは店名、品目リスト、そして合計を返してきた。
どれも本物ではなかった。
店舗名は間違っていた。品目は作り話だった。紙の上の合計と一致していなかった。モデルは領収書を誤読したのではなく、完全に架空の領収書を作り出した。
同じ画像で、別のモデルを使い、5秒後には:すべての品目が正確、店舗名も正しく、合計は端数の1セントまで正確だった。
これはビジョンモデルとレシート、そして私がOCR APIの料金を支払うのをやめた理由についての話だ。
問題
私は、スマホのカメラでレシートをスキャンできる経費追跡ツールを作った。写真を撮ると、AIが読み取り、自動的に品目が記録される。打鍵は不要。
OCR業界はこれを支払わせたい。Google Cloud Vision: 1,000ページあたり$1.50。AWS Textract: 1,000ページあたり$1.50。Azure Document Intelligence: 1,000ページあたり$1。本当に個人用の経費追跡ツールとしては、それは小さな額かもしれないが、ゼロではなく、クラウドでもなく、レシートデータはあなたの機器を離れてしまう。
私はコストゼロ、クラウドゼロ、そして作成ゼロを望んだ。初回の試みで三つのうち二つを手に入れた。
幻覚
最初にテストしたビジョンモデルは minicpm-v(8Bパラメータ、オープンソース、一般家庭用ハードウェアで動作)。私はそれにスーパーのレシートを渡した。鮮明な写真、良好な照明、標準的なレイアウト。
それは以下を返した:
- レシートにはない店舗名
- 私が買っていない品目
- 紙には存在しない価格
これは読み間違いではなかった。モデルは「7」を「1」と混同したり、二つの行の品目を結合したりもしなかった。白紙からもっともらしく見える領収書を生成した。元のレシートを手にしていなければ、私は気づかなかったかもしれない。
これはビジョンモデルに関して誰も警告してくれない失敗モードだ。皆はOCRの精度――文字誤差率、行検出、傾き補正――について語る。誰も、モデルが画像を完全にスキップして虚構を書いてしまうことについては話さない。
修正
私はqwen3-vl(8Bパラメータ、同じサイズ、同じハードウェア要件)に切り替えた。同じレシート、同じプロンプト:
「このレシートのすべての品目と価格を列挙してください。1行につき1品、形式: ITEM - $X.XX。小計、税金、合計を末尾に記載してください。さらに店舗名、日付、支払方法も明記してください。」
すべての品目が正確でした。店舗名も日付も正確。合計も一致。差はプロンプト、画像品質、またはハードウェアではなく、前にあるものを読み取るモデルの実際の読み取り能力と、そこにあるべきものを発明してしまう能力の差でした。
どちらのモデルも約6GBのVRAMで動作します。どちらもオープンソース。どちらもローカルで動作します。その間には峡谷のような差があります。
処理の流れ
スマホをレシートに向けたとき、実行されるのは以下のとおりです:
ステージ1 — 画像前処理 写真は自動回転します(EXIFデータ)、最大高さ1280pxの縦サイズにリサイズされ、JPEG 85%に圧縮されます。スマホのカメラは解像度を過剰に提供します。モデルは4000を必要としません。



