header_logo_2023
お気軽にお電話くださいませ
header_tel_2023
header_logo_2023
アナログエンジンのたまに書くコラム

通帳のOCRを実現した話

PHPとOCR、Almalinuxで事務作業を効率化

通帳のOCRを実現した話の目次

過去の預金通帳の処理に困っていた

決算が近づき、未入金処理に追われていました。
しばらく放っておくと未入金額が1,000万円とかになるので、日々の入金確認が大事なのですが、これを人間の手で何とかしようと思うと、「記帳に行く>入金を確認する>顧客を特定>案件を特定>システムに登録>担当者に通知>未入金顧客には営業から連絡」というフローになるのですが、通帳を全て預けるのにも不安があるし、そのプロセスに1日1時間かければ、230時間以上が事務作業に費やされるわけです。時給1200円の事務さんだとすれば、最低でも記帳と入力に276,000円の経費、担当者への通達、経営者の把握、不明入金先の確認(一部名称では顧客を特定できない)を含めるともっと多くの時間的なコストがかかります。
ちなみにCSVでの取り込みはすでにスクレイピングで自動化してるのですが、通帳を読む必要がある場合の話です。

OCRは10年前から検討していた

OCR(Optical Character Recognition:光学的文字認識)という技術は昔からあったのですが、英語のフォントを中心とした技術であり、結局のところ日本語ではなかなか使えない技術でした。
人気税理士事務所でも結局は人の目で確認する必要があるので、機械的なOCRは利用していないとのことでした。

きっかけは手書き電子カルテのOCR自動入力

Tesseract 5.0を利用したOCRをPHPで作ってみたものの、やはり近年の学習データを使ってみてもその精度は高くありませんでした。
漢字よりもカタカナの識字が苦手のようで、「カ」「ワ」「ク」「ス」「フ」の区別がつかなかったりImagemagickで画像の濃淡を変えてみても識字率の向上は写真からでは難しかったです。スキャナを利用したスキャンデータではまだマシだったのですが、通帳のOCRのためにいちいちスキャナ通すような手間をかけるのは本末転倒で、手入力の方がマシです。
しかしながら歯科技工所から手書きのカルテを電子化して、データベースに保管したいという案件をいただき、google Vision APIを利用したことで、通帳のOCRに光が差し込みました。

問題は技術ではなくフロー設計

googleの開発したAPIは多くの学習済みデータを使うことで飛躍的に識字率を上げています。
JSONでデータを送ればテキストデータを返してくれる優れものです。
でもそこじゃないんですね。
通帳全部googleのAPIに送って、全部テキストデータで帰ってきても、それをどう切り出して代入するかがとても難しい。複数の入金データだけではなく、振替、引き落としなどのデータが混在したり、OCRが画像認識しても空白部分はテキスト化をそもそもしないためテキストの並びが崩れる問題、画像の明暗で文字を読み込めないなどなどの諸問題。
要はgoogleにこちらの都合の良いデータを返させるための努力の方が必要そうです。
とりあえず、SDKはインストール決定。

				
					# vi /etc/yum.repos.d/google-cloud-sdk.repo
————————————
[google-cloud-sdk]
name=Google Cloud SDK
baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el8-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
       https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
—————————————
# dnf install google-cloud-sdk 
# gcloud init
				
			

80%削減できれば良い

「OCR取り込み範囲を自動で認識、読み込みながら顧客情報と比較して、適切な案件の入金と見なす」
のようなことが出来たらいいのですが、通帳では無理です。
弊社との口座がある顧客は1400社くらいあるのですが、「特許業務法人」「司法書士法人」「その他行政機関の医療事業部」などは通帳記帳時点で、一文字かふた文字くらいしか特定できるワードが残らないし、行政機関は「●●シイリョウジギョウガントクブ」みたいな名前になると、はてどの学部から来た案件かそれとも実事業の案件か、という判断ができません。
なので、

という目標を立てました。HEIC変換が必要そうなので、またサーバにツールをインストールします。

				
					# dnf install git gcc-c++ automake libtool libjpeg-devel
# git clone https://github.com/strukturag/libde265.git
# cd libde265
# git checkout v1.0.8    
# ./autogen.sh
# ./configure
# make install

				
			
				
					# git clone https://github.com/strukturag/libheif.git
# ./autogen.sh
# PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure
# make install

				
			

そんでこのコマンドが使える

				
					# heif-convert xxxxx.HEIC xxxxxxxxx.jpg
				
			

実際の設計は下記の通りです

Vision APIがあるgoogle cloud platformは有料です。簡単に見積もるとOCRの1000読み込みで1.5ドル。上記のフロー中の読み込み数で計算したところ、大体通帳一冊読み込むコストは220円くらいでした。全然許容範囲です。銀行行って帰ってくるくらいの時間だけで、余裕でこのコストを超えます。

できた

スマートフォンから写真を撮って送信すると、レンタルサーバへの保存とともに、heicからjpegへの自動変換がなされます。 canvasに画像を投影し、1行だけ可視範囲を指定すると(画像の赤い行)、後は自動で残りの行を認識します(画像の青い行)。後はgoogle Cloud Visionに「TEXT_DETECTION」で送信します。

後は戻ってきたデータを顧客の予想名データベースと付き合わせて、確認ボタンを押せば、カルテへの反映と担当者・案件関係者に周知が自動でされます。

カスタマイズされたOCRを必要とするならぜひお問合せください。

現在は、上記のOCRのシステムを手書き対応し、医療用カルテ・指示書などのデジタル化なども行なっています。他にもさまざまな認識ができますので、システムでこんなことできないか、という思いがありましたら、ぜひ相談してください。
ものすごく適当に書いた文章読んでいただいてありがとうございました。

[related-posts-thumbnails post_number:6;]
web_eicon
WEB design
WEBサイト制作
ウェブサイトの制作を主に行なっています。自分で更新可能なCMSや通販などのシステム連動もお任せください。
graphic_icon
GRAPHICS
グラフィック
パンフレットから名刺、ロゴデザインまで、定評のあるデザイン力であなたの会社や事業をより魅力的に見せます。
system_icon
SYSTEM / APP
システム開発
顧客管理・在庫管理など、さまざまなシステムをWEBシステムで制作。二次元スキャナやRFIDとの連動、アプリ開発も。
server_icon
RENTAL SERVER
レンタルサーバ
滋賀県では最大数の顧客を自社開発サーバで運用。最高のセキュリティ&有人監視であなたの事業を止めません。

個人情報の取り扱いについて

1. 事業者の氏名又は名称
 有限会社アナログエンジン

2. 個人情報保護管理者
 管理者職名:中西 佐織
 所属部署:営業部
 連絡先:design@analogengine.jp

3. 個人情報の利用目的
 ・お問い合わせ対応(本人への連絡を含む)のため

4. 個人情報取扱いの委託
 当社は事業運営上、前項利用目的の範囲に限って個人情報を外部に委託することがあります。この場合、個人情報保護水準の高い委託先を選定し、個人情報の適正管理・機密保持についての契約を交わし、適切な管理を実施させます。

5. 個人情報の開示等の請求
 ご本人様は、当社に対してご自身の個人情報の開示等(利用目的の通知、開示、内容の訂正・追加・削除、利用の停止または消去、第三者への提供の停止)及び第三者提供記録の開示等に関して、下記の当社問合わせ窓口に申し出ることができます。その際、当社はお客様ご本人を確認させていただいたうえで、合理的な期間内に対応いたします。
【お問合せ窓口】
〒524-0032 滋賀県守山市岡町104-1
design@analogengine.jp
077-514-0220

6. 個人情報を提供されることの任意性について
 ご本人様が当社に個人情報を提供されるかどうかは任意によるものです。ただし、必要な項目をいただけない場合、適切な対応ができない場合があります。