MatchTemplateを使った帳票の自動判定

概要

業務で利用する帳票の特徴的な部分を取り出してテンプレート画像として準備し、 MatchTemplateを使用して、Faxやスキャンされた帳票にその画像が含まれるかどうかの判定を行います。

判定により帳票の種類が判明したら、その帳票をそれぞれのフォルダに自動振り分けします。

ここでは、「請求書」および「納品書」の2種類とそれ以外の帳票を振り分ける設定を紹介します。

被探索画像
テンプレート画像
\10_振り分け前
帳票1.xdw
Tiff変換
テンプレート   画像
MatchTemplateでマッチング判定
帳票1.tif    (被探索画像)
マッチング=〇
\20_振り分け済 \請求書
\yy\mm
請求書_yyyymmdd_hhmmss.xdw
マッチング=×
\20_振り分け済 \その他
\yy\mm
その他_yyyymmdd_hhmmss.xdw

設定の前準備

フォルダの準備

フォルダ構成は以下の通りです。

  • C:\Home\Demo\テンプレートマッチング
    • 10_振り分け前
      監視フォルダ。
    • 20_振り分け済
      • その他
        その他の帳票の振り分け先フォルダ。年と月のフォルダを自動作成します。
      • 納品書
        納品書の振り分け先フォルダ。年と月のフォルダを自動作成します。
      • 請求書
        請求書の振り分け先フォルダ。年と月のフォルダを自動作成します。
    • 90_System
      • 10_Command
        matchTemplateのプログラムファイル。
        • MatchTemplate.html
          ※プログラムファイルはあらかじめ ダウンロード し、解凍したファイルをこのフォルダへ入れて下さい。
        • OpenCvSharp.Extensions.dll
        • OpenCvSharp.dll
        • OpenCvSharpExtern.dll
        • matchTemplate.exe
      • 20_画像
        • templateList.txt
          テンプレート画像のパスを1行1ファイルで記載したテキストファイル。
        • テンプレート_納品書.tif
          納品書のテンプレート画像。
        • テンプレート_請求書.tif
          請求書のテンプレート画像。
      • 30_MatchTemplate
        結果格納用一時フォルダ。
      • 90_Log
        ログの出力先。

フォルダ構成のダウンロード(Cドライブのルートに解凍してください。)

テンプレートマッチング.zip

テンプレート画像の作成

普段扱っている実際の帳票を使用して、テンプレート画像を作成します。

  1. 最初に、請求書のテンプレート画像の作成について説明をします。

    DocuWorksDeskで帳票を開き、ファイルメニュー>イメージ変換出力 をクリックします。

  2. 変換形式を「TIFFファイル」にします。保存先を適宜設定して下さい。

  3. 解像度は、普段のFax受信やスキャン時の解像度に合わせます。ここでは「200」dpiとします。

  4. OKを押し、変換します。

  5. 変換した帳票を「ペイント」アプリで開き(Windows10の場合)、帳票内の特徴的な部分(その種類の帳票に必ず存在する部分)をトリミングし、上書き保存します。

  6. トリミングした画像を、テンプレート画像として \90_System\20_画像 へ移動します。

  7. 納品書のテンプレート画像も同様の手順で作成します。

    ただし、ここでの納品書は、以下のように文字が小さく、他の帳票内でテキストとして書かれている文字との区別がつき難いことが想定されます。

    このような場合には、テンプレート画像の作成の際には注意が必要です。

  8. 上記の理由で、「納品書」という文字の部分だけでは帳票を特徴づけられないので、その下の枠の部分までトリミングし、テンプレート画像にします。

    この場合、枠にはグレーの網掛けされているので、イメージ変換出力画面の最下部の「色」の欄で「カラー」を選択します。

  9. このようなテンプレート画像となります。

  10. これでテンプレート画像の準備は完了です。

設定

ここからは、eDocArrangementが初期状態からの設定を説明しますが、以下のリンクから完成した設定をダウンロードしていただくこともできます。ダウンロードは、リンク名を右クリックし、「名前をつけてリンクを保存」を選択することで実行できます。

設定ファイルのダウンロード

eDocArrangement.zip

グローバルデータとログの設定

  1. eDocArrangementを立ち上げ、ツールメニュー>グローバルデータの設定にて、「名前」欄を「TopFolder」、「文字列」欄を「C:\Home\Demo\テンプレートマッチング」とし、追加します。

  2. また、設定画面にて、ログの設定をします。

  3. 詳しい設定方法は、 設定例(共通)グローバルデータとログの設定 を参照して下さい。

文書振り分け設定

  1. 設定一覧の下の「新規」をクリックします。「設定1」を右クリックし、設定名を変更します(ここでは「文書振り分け」とします)

  2. 基本設定タブの「フォルダ自動監視を行う」をチェックします。

  3. 「監視設定」タブにて、監視フォルダ名欄で右クリック → グローバルデータ書式 → グローバルデータ取得(TopFolder)を選び、その後に、\10_振り分け前 と入力します。

  4. 右側の「追加」ボタンを押すと、「監視フォルダ一覧」に追加されます。

前処理

  1. 右上の「処理名」より「マクロ実行」を選択し 「処理追加」を押して、文書振り分け設定に追加し、処理名を「前処理」と変更します。

  2. マクロ欄には、図のようにマクロを記入します。(画像内のマクロは、長いので右側及び下側が隠れています)

    (任意ですが、各マクロの上に「#(コメント)」で各処理の内容を書いておくと、後でわかり易いでしょう。)

  3. それぞれのマクロについて説明します。

    #テンプレートマッチング結果 初期化
    {%SET_U(wk,帳票判定,なし)}

    ↑ 帳票判定の結果を保存するユーザーデータを用意し、初期化しておきます。

    #テンプレートマッチング関連ファイル名
     {%SET_U(wk,被探索画像ファイル名,{%GET_G(TopFolder)}\90_System\30_MatchTemplate\search.tif)} 
    {%SET_U(wk,結果ファイル名,{%GET_G(TopFolder)}\90_System\30_MatchTemplate\result.txt)}

    ↑ 被探索画像のファイルの場所や結果ファイルを保存する場所のパスをユーザーデータをセットします。

    #被探索画像ファイル削除
    {%DELETE_FILE({%GET_U(wk,被探索画像ファイル名)})}

    ↑ 前回の処理で(search.tifとして)残っているファイルがあれば、削除します。

    #結果ファイル削除
    {%DELETE_FILE({%GET_U(wk,結果ファイル名)})}

    ↑ 前回の処理で(result.textとして)残っているファイルがあれば、削除します。

TIFF変換

  1. 右上の「処理名」より「マクロ実行」を選択し「処理追加」をクリックして文書振り分け設定に追加し、処理名を「TIFF変換」と変更します。

  2. マクロ欄には、図のようにマクロを記入します。(画像内のマクロは、長いので右側が隠れています)

  3. このマクロについて説明します。

  4. #tiff変換
    {%DW_OUTPUT_TIFF_IMAGE({%GET_U(wk,被探索画像ファイル名)},200,COLOR,1,1,PACKBITS)}

    ↑ 入力されたXDWファイルの1ページ目のみをTiffファイルに変換します。マクロ中「200」という数値は、画像の解像度(dpi)を表します。これは、テンプレート画像の解像度と一致している必要があります。

MatchTemplateのコマンド呼び出し

  1. 右上の「処理名」より「コマンド実行」を選択し 「処理追加」を押して、文書振り分け設定に追加します。(コマンド実行1)

  2. コマンドには以下のように記入します。

    "{%GET_G(TopFolder)}\90_System\10_Command\matchTemplate.exe" -tl "{%GET_G(TopFolder)}\90_System\20_画像\templateList.txt" -s "{%GET_U(wk,探索画像ファイル名)}" -u mm -z "{%GET_U(wk,結果ファイル名)}"
    

    コマンドの書式については、 MatchTemplate 仕様 を参照して下さい。(結果はテキストファイルで出力されます)

結果取得

  1. 右上の「処理名」より「マクロ実行」を選択し 「処理追加」を押して、文書振り分け設定に追加し、処理名を「結果取得」と変更します。

  2. マクロ欄には、図のようにマクロを記入します。(画像内のマクロは、長いので右側が隠れています)

  3. それぞれのマクロについて説明します。

    # テンプレートマッチング結果取得
    {%CSV_FILE_READ({%GET_U(wk,結果ファイル名)},結果,0)}

    ↑ 結果のCSVファイルを読み込みます。

    {%LOG_OUT(リターンコード:{%GET_U(結果_1,1)})}
    {%LOG_OUT(最も高い類似度のテンプレート画像番号:{%GET_U(結果_2,1)})}
    {%LOG_OUT(類似度:{%GET_U(結果_2,2)})}
    {%LOG_OUT(X座標:{%GET_U(結果_2,3)})}
    {%LOG_OUT(Y座標:{%GET_U(結果_2,4)})}
    {%LOG_OUT(幅:{%GET_U(結果_2,5)})}
    {%LOG_OUT(高さ:{%GET_U(結果_2,6)})}

    ↑ ログに結果を出力します。

    #--
    
    #リターンコード(1行目)の判定
    {%IF({%GET_U(結果_1,1)}=0,
      #マッチング確率のチェック
      {%IF(0.75<{%GET_U(結果_2,2)},
        #画像番号
        {%IF({%GET_U(結果_2,1)}=1,
          {%SET_U(wk,帳票判定,請求書)}
        ,
          {%SET_U(wk,帳票判定,納品書)}
        )}
      ,)}
    ,)}
    

    ↑ 結果を判定します。

文書移動(請求書・納品書・その他)

請求書

  1. 右上の「処理名」より「文書移動」を選択し 「処理追加」を押して、文書振り分け設定に追加し、処理名を「文書移動 請求書」と変更します。

  2. 「移動先フォルダ」に以下のように記入します。

    {%GET_G(TopFolder)}\20_振り分け済\請求書\{%DATE(yyyy)}\{%DATE(mm)}
    
  3. 「ファイル名をリネームする」にチェックを入れ、「ファイル名」に以下のように記入します。

    請求書_{%DATE(yyyymmdd_hhnnss)}.xdw
  4. 「文書移動の条件を指定する」にチェックを入れ、「条件」に以下のように記入します。

    {%IF({%GET_U(wk,帳票判定)}=請求書,True,False)}
  5. 後は、同様に、「納品書」と「その他」の文書移動の設定をします。

納品書

  1. (納品書)「移動先フォルダ」

    {%GET_G(TopFolder)}\20_振り分け済\納品書\{%DATE(yyyy)}\{%DATE(mm)}

    (納品書)「ファイル名をリネームする」→「ファイル名」

    納品書_{%DATE(yyyymmdd_hhnnss)}.xdw

    (納品書)「文書移動の条件を指定する」→「条件」

    {%IF({%GET_U(wk,帳票判定)}=納品書,True,False)}

その他

  1. (その他)「移動先フォルダ」

    {%GET_G(TopFolder)}\20_振り分け済\その他\{%DATE(yyyy)}\{%DATE(mm)}

    (その他)「ファイル名をリネームする」→「ファイル名」

    その他_{%DATE(yyyymmdd_hhnnss)}.xdw

    (その他)「文書移動の条件を指定する」にはチェックを入れません。

動作確認

設定が正しく動作するかどうか、テストします。

最初に「10_振り分け前」フォルダ内に、請求書と納品書(スキャンされ入力されたもの)DocuWorks文書を作ります。

納品書は、カラーでスキャンしたもの(枠の部分がグレー)と、白黒でスキャンしたもの(枠の部分が白)2種類のサンプルを用意しました。

これらのファイルは、繰り返しテスト出来るように、アーカイブしておきます。

以上の準備が整ったら、eDocArrangementの監視ボタンを押します。

処理が正しく動き、【処理後】のようなファイル・フォルダの状態になっていることを確認します。

(白黒でスキャンされたファイルは、処理後は「その他」フォルダに移動されます。ですので、スキャンは、カラーで設定して下さい)

グローバルデータ

グローバルデータの内容は以下の通りです。トップフォルダを変更する場合は、以下の定義を変更してください。グローバルデータは、メニューのツールのグローバルデータの設定から変更できます。

名前
TopFolder C:\Home\Demo\テンプレートマッチング