「電子帳簿リネーマー」のスマホ版を作り始めました

パソコン用アプリとして公開している「電子帳簿リネーマー」の、スマホ版の開発を始めました。今日はその第一歩として、実際に領収書を読み取るところまで動かしてみたので、その記録を残しておきます。

目次

なぜスマホ版なのか

今のパソコン版は、領収書のPDFをドラッグ&ドロップすると、日付・金額・取引先を自動で読み取って、電子帳簿保存法の検索要件に対応したファイル名に付け替えてくれるアプリです。自分でも毎日使っていますし、使ってくださっている方からも「便利」という声をいただいています。

ただ、紙の領収書はどうしても残ります。お店で受け取った領収書を、家に帰ってスキャンして、パソコンに取り込んで……という流れは、やっぱり面倒です。

それなら、受け取ったその場でスマホのカメラで撮って、そのまま電子化してしまえばいいのではないか。そう考えたのがきっかけです。

どんなアプリにするか

目指しているのは、こんな流れです。

お店で領収書を受け取ったら、アプリを起動して撮影する。日付・金額・取引先が自動で読み取られるので、画面で確認して、違っていたらその場で直す。「保存する」を押すと、20261105_2763_ENEOS.pdf のような名前のPDFになって、いつも使っているクラウドのフォルダに入る。

ポイントは、保存先のフォルダを最初に一度だけ選んでおけば、二回目からはボタンひとつで同じ場所に入ることです。Google DriveでもDropboxでもOneDriveでも、スマホに入っていれば選べるようにするつもりです。

もうひとつ入れたいのが、ファイル名の形式を選べる機能です。日付と金額と取引先を並べる順番や区切り方は、税理士さんから指定されることもあるので、いくつかの形をワンタップで切り替えられるようにしたいと考えています。

今日やったこと

まず確かめたかったのは「紙の領収書を撮って、ちゃんと文字が読めるのか」でした。ここが駄目だと、他のことをいくら作っても意味がありません。

パソコン版は、お店が発行したPDFの中にもともと入っている文字情報を読んでいるので、精度が出やすい仕組みです。でもスマホは写真から文字を読み取るので、まったく別の技術になります。照明や傾き、感熱紙のかすれなど、不安要素がたくさんあります。

そこで、撮影・読み取り・結果表示だけの小さな試作を作って、手元の領収書で試してみました。

結果は、思っていたよりずっと良いものでした。ガソリンスタンドの感熱紙レシート、家電量販店のレシート、通販の明細書など5枚ほど試して、日付はすべて正しく読み取れました。処理時間も0.1秒ほどで、待たされる感じはまったくありません。

カメラを向けると領収書の輪郭を自動で認識して、まっすぐに補正した上で自動的にシャッターが切られます。この補正が効いているおかげで、感熱紙のレシートでも印刷物と同じくらい読めているようです。

つまずいたところ

とはいえ、そのまま使えるわけではありませんでした。

ひとつは、レシートの印字が左右2列になっていることです。「合計」という文字と、その金額「¥2,763」が、読み取り結果の中では離れた場所に出てきます。パソコン版は「合計 ¥2,763」が1行にそろっている前提で作っていたので、同じやり方は通用しませんでした。

もうひとつは、文字の読み間違いです。「¥」が「H」や「Y」や「4」に化けたり、「0」が「O」になったり。¥4,390 が H4, 390 になったりします。

どうしたものかと読み取り結果をじっくり眺めていて、ひとつ気づいたことがありました。本当の合計金額は、1枚のレシートの中に何度も印字されているのです。「合計」「税込価格計」「クレジット支払」といった具合に、2回から5回は出てきます。一方で、消費税額や値引き額は1回しか出てきません。

そこで、金額らしきものを全部拾い上げて「一番たくさん出てきた金額」を合計とみなす、という方法にしてみました。これが思いのほかうまくいって、手元の領収書は全部正解になりました。読み間違いでバラけた表記も、数字だけ取り出して比べれば同じものとして数えられます。

取引先の判定でも、ひとつ引っかかりがありました。ガソリンスタンドのレシートの下の方に楽天ポイントの案内が入っていて、取引先が「楽天」と判定されてしまったのです。これは「レシートの上の方に出てきた名前を優先する」ように直しました。店名は上、ポイントカードの案内は下、という並びはどのレシートでも共通のようです。

今後の課題

次に確かめたいのは、保存のところです。クラウドのフォルダを一度選んだら、それを覚えておいて次からは一発で保存できるか。年と月でフォルダを分けられるか。ここが通れば、作りたいものの難しい部分はだいたいクリアできます。

それ以外にも、手書きの領収書がどこまで読めるか、Androidでも同じように動くか、確かめることはまだたくさんあります。

パソコン版とスマホ版で、読み取りの仕組みを共通の部品にまとめられないかとも考えています。そうすれば、片方で精度を上げるともう片方も良くなります。

おわりに

一番の山場だと思っていた読み取りの精度に、初日で見通しが立ったのは幸運でした。コツコツ進めていきます。

進捗はまたこのブログで報告します。

目次