
前回、レシートは名刺よりずっと読みにくい、と書きました。今日は、その正体の話です。感熱紙の薄い印字や、小さな文字も手強かったのですが、いちばん手こずったのは、明細の「表」でした。
数字が、品名と別の行で返ってくる
レシートの明細は、たいてい、左に品名、右に金額が並んでいます。「Insalata(サラダ)」と、その右に「¥1,300」。人の目には、これは一行です。
ところが、iPhone の文字認識は、ときどき、この「Insalata」と「¥1,300」を、別々の断片として返してきます。左の列と右の列を、それぞれ別の行として読んでしまう。紙の上では並んでいたものが、データになると、ばらばらにほどけてしまうのです。
だから、明細が崩れた
私の最初の作りは、「同じ行にある品名と金額を、ペアにする」という前提でできていました。だから、品名と金額が別の行で返ってくると、ペアが作れない。あるレストランのレシートでは、明細が、全部おかしくなりました。
AI に任せてみると、今度は、別の壊れ方をしました。存在しない数字を、作ってしまう。七件の明細が、全部「¥100・軽減税率 8%」になって返ってきたことがありました。実際には、Bresaola が ¥1,300、Insalata が ¥1,300 と、ちゃんと印刷されているのに。ばらけた断片を前に、AI は、それらしい数字で、隙間を埋めてしまっていました。
視覚的な行を、組み直す
直し方は、機械の都合ではなく、紙の上の「見え方」に立ち返ることでした。
文字認識が返してくる断片には、それぞれ、紙のどの高さにあったか、という位置の情報がついています。そこで、縦の位置が重なっている断片を、もう一度ひとつの行に束ね直すことにしました。「Insalata」と、その右で同じ高さにある「¥1,300」を、つなぐ。人の目が最初から一行として見ていたものを、座標の上で、もう一度、一行に戻す。私はこれを「視覚的な行の再構築」と呼んでいます。
全部、その上にのせ直した
AI も、ルールベースも、元の文章も、すべてこの束ね直した行の上で読むように変えました。読む対象を、ばらけた断片ではなく、組み直した一行にそろえたのです。
すると、明細が、ちゃんと一件ずつ立つようになりました。Insalata ¥1,300、Bresaola ¥1,300。バラバラだった断片が、もう一度、一行ぶんの意味を取り戻しました。
教わったのは、こういうことでした。機械が読みやすいように人が合わせるのではなく、人が見ていた通りに、機械の側を組み直す。レシートを読むというのは、文字を拾うことよりも、紙の上のレイアウトを、もう一度立ち上げることのほうに近かったのです。
次回
これで、表は読めるようになりました。けれど、数字には、まだ別の落とし穴がありました。AI もルールも、ときどき、税率や税額の数字を取り違える。次は、その取り違えを、数学で直した話をします。
STIL.RECEIPT は App Store で公開しています。