ZAICOでは、Android・iOS・Rubyエンジニアを絶賛募集中です! 詳しくは、採用ページをご覧ください。
はじめに
こんにちは! ZAICO開発チームです。
先週、ZAICOではFedEx-WEEKが開催されました。
今回はそのレポートを書きたいと思います。
今回のFedExでやりたかったこと
詳細は以前こちらで投稿した内容になります。
簡単に言うと、在庫管理表のような帳票をスマホでスキャンするだけで在庫登録できるようにしたい、将来的には納品書をスキャンするだけで入出庫処理ができるようにしたい、というのが狙いでした。
やったこと
実際に開発したものを動画にしましたのでご覧ください。
↓ 帳票スキャン → 在庫登録
↓ 入庫・出庫(仕入/納品データ作成)にも対応。
工夫したところ
- 列の手動選択
- 列見出し名の設定変更
- 二値化(画像前処理)
1. 列の手動選択
見出しとデータの位置関係によって、以下の「数量」列のように、うまく同一列と判定できないケースがありました。
この問題は列の手動選択により回避しました。
これはデータ枠のいずれかをタップして、対象列を手動選択することで自動的に近接する上下の枠も同じ列の値とみなす、というものです。
↓ 列の手動選択の例
2. 列見出し名の設定変更
帳票のフォーマットによっては、列見出しの名称が異なるケースが想定されました。
例えば、「商品コード」は事業所によっては「管理番号」のような名称で管理されるケースは多々あるかと思います。
この問題は設定画面より、検出する列見出し名の設定を変更できるようにして対応しました。
↓ 列見出し名の設定変更の例
3. 二値化(画像前処理)
二値化というのは、解析対象の画像をあるしきい値で白と黒に分ける前処理です。
これにより文字認識の精度が(たぶん)上がりました。
↓ 二値化の例
今後の課題
今回実際に動くものを開発したことで、いくつか課題も見えてきました。
一部ですがご紹介します。
・スキャン精度
フォーマットによっては近接する列のデータと誤認識してしまうケースがありました。
これは罫線(矩形)検出と今回のOCR結果とをうまく組み合わせることで改善できるのではないか、と考えています。
・UX改善
・数量列のバリデート(全角数字やカンマ区切りに対応)
・列の手動選択では、枠ごとに選択する方法もあった方がいいかもしれない
・端末横向きスキャンに対応するかどうか
など要検討。
・入庫・出庫
・取引先、単価についてもOCRで検出させたい
・バーコードの値がない納品書にも対応したい(物品名による照合が必要そう)
まとめ
今回のFedExもかなり集中して取り組めました。
正直時間は足りなかった・・というのが本音ですが、なんとか見えてきた課題点を解決して機能リリースしたいと考えています!