ZAICOでは、Android・iOS・Rubyエンジニアを絶賛募集中です! 詳しくは、採用ページをご覧ください。
こんにちは! ZAICO開発チームです。
早速ですが、ZAICOにはFedEx-WEEKという素晴らしい取り組みがあります。
これは、1週間をかけて1つ(複数も可)興味のある課題にだけ取り組める期間で、通常業務と無関係でも何か解決したい問題があれば、1週間その開発にだけ没頭することができます。
今回はFedEx-WEEKを来月(5月実施予定)に控え、事前に技術調査を行ったのでその内容を書いてみます。
何をやるか
FedEx-WEEKでは、事前にどんなことに取り組むか、各エンジニアごとに宣言してから開発に着手します。
したがって、エンジニアはある程度事前に調査を行い、1週間でやり切れる程度のテーマを選びます。
真っ先に私の頭に浮かんだのは以下のようなことでした。
- やっぱり画像認識がやりたい
- せっかくなので、ユーザーにとって便利な機能を作りたい
- 私は普段iOSアプリの開発を行っているため、iOSアプリに組み込めるものがいい
したがって、画像認識を使ったユーザーにとって便利な機能をiOSアプリに実装することにしました。
で、結局、何をやるか
実は、zaicoアプリには、画像認識を使った在庫登録の仕組みがすでにあります。
これは、いわゆるOCRという技術で、zaicoではGoogleのCloud Vision APIを内部的に利用しています。
ふと、「OCRでエクセル等の在庫管理表をスキャンし、それをzaicoに一括登録できたら便利じゃないか?」と考えました。
- zaicoアプリのカメラで帳票を撮影
- OCRで自動検出&在庫データを一括登録
- すぐにzaicoを利用開始できる!
みたいなイメージです。
テーマが決まったので調査開始です。
調査内容
まずはじめに、既存機能の在庫登録スキャンを使って、在庫管理表をスキャンしてみました。
もしかしたら、すでにいい線いってるのではないか?という淡い期待を抱きながら。
対象の帳票フォーマットは一旦こんな感じを想定。
↓スキャン結果
悪くないですね。
ただ、以下のような問題点があります。
- セルごとにブロック(青い枠)が分かれることを予想してたけど、列ごとにまとめられてしまっている
- でも、数量の見出しセルだけは個別に認識されてる
- (当然ながら)メニューとか行番号とか関係ないところも検出されている
ちなみに、各ブロックの中身は以下のようになっています。
・商品コード(A列)
・物品名(B列)
・保管場所(C列)
・数量(D列)
以下、所感です。
- 罫線はあまり考慮してくれないのかも
- 各列はちゃんと区別できてる
- ブロック内の検出テキストは改行コードで区切られてるのでこれは使えそう
- それぞれの検出テキストはかなり精度が高い
- 数量列はイレギュラーだが、見出しブロックの座標位置からある程度推測してデータのブロックを特定できそう
- ユーザーが微調整する画面は必要かも
ということで、どうやら既存機能と同様の技術を使って実装すればうまくいきそう、ということが分かりました。
もちろん精度の問題とか、帳票フォーマットの問題とか、うちの管理表は手書きだとか、いろいろ解決すべき点は出てくるかと思います。
が、今回は事前調査なのでこのくらいでやめておきます。
まとめ
来月はFedEx-WEEK!
今回得られた課題を解決して、新機能リリースのご報告ができるよう頑張ります!