3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Teachable Machine × MAKE × スプレッドシートで請求書画像から仕訳入力に挑戦!

Posted at

みなさま、お疲れさまです!
今回で 4回目の投稿 となります。

今回は Teachable Machine × MAKE × Googleスプレッドシート を組み合わせて、
請求書の画像から仕訳入力を行うシステムの構築に挑戦してみました!

まだまだ改良の余地はありますが、なんとか土台を作ることに成功しました。
ぜひ最後までご覧ください!

目次

現時点での動きはこちら!

▼ 簡単な仕組みの概要

  1. Teachable MachineのモデルをHTMLリンクで公開
      画像をブラウザ上でアップロード&分類できます。

 
 2. MAKEで分類結果をスプレッドシートに連携
   Teachable Machineからスプレッドシートへは直接送信できないため、
    間にMAKEを挟みました!

作成手順

1. Teachable Machineのモデルを作成

 

①サンプルを作成します。今回は「固定営業料」という項目に限定して作成しております。
 サンプルをインポート後、「モデルをトレーニング」を選択します。
image.png

②「モデルをエクスポートする」より「アップロードする」を選択
 ○で囲っているURLが表示されればOK
image.png

2. MAKEでワークフローを作成

①MAKEの「New Scenario」を選択、「Webhooks」→「Custom Webhook」を選択
 下図の○の箇所です。
image.png

②「Create a webhook」から「Webhook name」を入力(任意)
 その後右下の「Save」を選択します。
image.png

③○で囲ったURLが表示されればOKです
image.png

3. HTMLリンクを作成・共有

①「メモ」を開き、以下のコードを貼り付け、一部編集します。

こちらを「メモ」等に貼り付けます
<!DOCTYPE html>
<html>
<head>
  <title>請求書分類</title>
  <!-- 必須:TensorFlow.js本体 -->
  <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@3.3.0/dist/tf.min.js"></script>
  <!-- Teachable Machine用ラッパー -->
  <script src="https://cdn.jsdelivr.net/npm/@teachablemachine/image@0.8/dist/teachablemachine-image.min.js"></script>
</head>
<body>
  <h2>請求書分類アプリ</h2>
  <input type="file" id="imageUpload" accept="image/*" />
  <p id="labelResult">推論中…</p>

  <script>
    const MODEL_URL = "ここにTeachable MachineのURLを貼付";
    let model;

    async function init() {
      const modelURL = MODEL_URL + "model.json";
      const metadataURL = MODEL_URL + "metadata.json";
      model = await tmImage.load(modelURL, metadataURL);
    }

    document.getElementById("imageUpload").addEventListener("change", async (e) => {
      const file = e.target.files[0];
      const img = new Image();
      img.src = window.URL.createObjectURL(file);
      await img.decode();

      const prediction = await model.predict(img);
      const top = prediction.sort((a, b) => b.probability - a.probability)[0];
      const label = top.className;
      const prob = (top.probability * 100).toFixed(1);
      document.getElementById("labelResult").textContent = `${label}(${prob}%)`;

      // MAKEのWebhookへ送信
      fetch("ここにWebhookのURLを貼付", {
        method: "POST",
        headers: {
          "Content-Type": "application/json"
        },
        body: JSON.stringify({
          label: label,
          confidence: prob,
          filename: file.name
        })
      });
    });

    init();
  </script>
</body>
</html>

メモ等に上記を貼り付けていただいた後は
先ほどの説明にて作成いただいた2つのURLを上書きします。
”https ://○○○○” ←このように貼り付けます。

②貼付後、名前を付けて保存をします。この時に拡張子を「html」に変更します。
image.png
 
ここまで上手くできると、このようなWEBページが表示されます。
この時点でファイルを選択すると判定ができます。
image.png

4. スプレッドシートとMAKEを連携させる

①以下のようなスプレッドシートを作成します
image.png

①MAKEにて「Google Sheet」→「Add a Row」を選択

image.png

②上の項目にてファイルのアドレスを選択、下の「value」は画像のように入力します

image.png

③最後に「Immediately as data arrives」をONにします
 
image.png

これでなんと、

画像をアップするだけで、自動で仕訳データがスプレッドシートに記録される!

という仕組みが完成しました!(操作は上の動画の通りです!)

課題点

① フォーマットの異なる請求書に弱い

  • レイアウトの違いや金額の位置などにより、分類がうまくいかない場合あり
    より多くのサンプルデータの収集とモデル再学習が必要です。

② スプレッドシートを経由する必要がある

  • 社内規定やセキュリティポリシーで懸念が出る可能性あり

さいごに

請求書の読み取り〜仕訳作成までを自動化する外部ツールを調べたところ…

月額約30,000円 + 請求書1枚ごとに約100円 のコストがかかるとのこと。
(※とあるサービスより)

正直、なかなかのお値段です…。

しかし!
今回の仕組みをベースに改良を重ねていけば、
より安価に、あるいは無料で運用できる可能性もあると感じています。

今回は現時点での成果をまとめましたが、
進展があればまたQiitaにて共有いたします!

最後までお読みいただき、ありがとうございました😊

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?