初心者プログラマ向け

食堂に顔認証システムを導入した話。

投稿日:2018年12月18日 更新日:

どうも。ゲーム三昧の生活をしている新米データサイエンティストのゴン太です。
先日食堂管理システムの体験レポが公開されました。
ということで、今回は食堂管理システムについてもう少し詳細にお話ししたいと思います。

背景

弊社では、外部スタッフが運営している食堂があり、プレート料理、丼、麺など、豊富なメニューを提供しています。その中で、誰がどんな料理を食べたのかを管理するシステムが欲しいという提案がありました。

[これまでの食堂]

これまでは、事前に配布された食券を、専用の箱にちぎって入れることで利用者を管理していました。しかし、管理している部署の方に話を聞くと、提出しない社員が散見されたり、そもそも手作業で管理する事が面倒だったりすることが分かりました。

また、一社員である私も、食券をちぎって入れるのは面倒で、使わなかった日の食券が手元に残るなど、何かと不便でした。それに加え、職場と食堂のフロアが違う社員も多くおり、食堂の混雑具合を確認できず、フロアを往復するような状況をよく目にしました。

食券

スタッフさんに関しても、アナログなメニュー表を毎日用意し、売り切れた際には手動でメニューを消すなど、混雑時にバタバタしている様子を見かけていました。

[食堂をどう変えるか]

こうした問題を抱えていた弊社の食堂に対しですが、我々は、3つの目標を達成することで解決へと導きました。

  • 管理部署の手を煩わせることなく、誰が食堂を利用したか記録する
  • 社員が自分のデスクで混雑状況を確認できるようにし、ハンズフリーで食堂に行けるようにする
  • スタッフが運営時間中にバタバタすることなく、業務を全うする

管理部署の社員、一般社員、食堂スタッフの3者全員が幸せになるような構成を考えました。

システムの内部構成

食堂管理システムは、大きく分けて2つのシステムから構成されています。それは顔認証システムと混雑管理システムです。

[顔認証システム]

「ハンズフリーで食堂を利用する」ことを考えた際に、以下の方法が挙げられます。

  • 紙などを置き名前を書かせるアナログな方法
  • 生体認証を使ったデジタルな方法

生体認証とは、身体的特徴(指紋や顔)や、行動的特徴(筆跡や歩行動作)などで、個人を認証する方法です。
今現在では、スマホやパソコンといった身近なところに加え、高い精度が必要になる入国管理局や犯罪捜査など、様々な場面で使われています。

今回は「管理部署の手を煩わせることなく」という要件を満たすために、生体認証には顔認証を用い、取得した結果をDB(データベース)に蓄積する方法を取りました。生体認証は、登録が手軽で精度が高いと話題のNECの顔認証システムを使うことにしました。

顔認証はタブレット端末で行い、認証後そのままディスプレイをタッチすることで、注文出来るようにしました。その結果「アナログなメニュー表」を取り払うことが出来ました。

流れとしては、次のようになります。

① 利用者が画面をタッチし、顔の写真を撮影。
② 取得した写真をバイナリデータに変換し、顔認証を実行。
③ 認証した人の名前を画面に表示。
④ ③と同時にBに入れておいたメニューが表示されるので、利用者はメニューを選択。
⑤ 確認画面で確認した後、完了画面に遷移し、全てのデータがDBに送信。
⑥ ①の待機状態に戻る。

 

このシステムによって、誰がいつ何を注文したのかを管理でき、メニューの需要や、社員それぞれの傾向が分析可能になりました。

食堂顔認証システムの具体的な流れを見たい際は体験レポを参照してください。

顔認証システムは、プログラミング言語にPHP,JavaScript,HTML/CSS,Python,DBMSにPostgreSQLを用いて作成しました。

[混雑管理システム]

誰がいつ何を注文したかをDBに蓄積できるようになったので、「社員が自分のデスクで混雑状況を確認できるように」という要件を満たすために、新たに混雑管理システムを作成しました。実は作り始めたのはこっちのが先だったりするのは内緒・・・

言語はRubyonRails5(以下rails)を用いて作成しました。なぜ顔認証システムと言語が違うのかといいますと、私事ですが色々な言語を勉強したかったからですね。他意はないです、はい。

railsの特徴はなんといっても実装の速さですね。ほぼコマンドを打つだけでシステム画面が完成してしまいます。その当時DB初心者だったこともあり、DB自体をrailsで作ってしまって、それを顔認証システムにも活用しました。

具体的には、顔認証した人のデータがDB内に存在すると、社員テーブルのstayフラグが立つことで、混雑状況がわかるというシステムです。stayフラグはwheneverというパッケージを使い、時間経過でOFFになるようにしました。そのため、退室する際にもう一度顔認証をする必要がありません。(Linuxの勉強をしているなら、crontabコマンドを用いて自力でやるのもよいかもしれません)

この場を借りて、改訂3版基礎RubyonRailsの著者様に感謝を申し上げます。この本なしではシステムは完成しませんでした。
ありがとうございました。

あとがき

今回は食堂に導入したシステムについてお話ししました。
入社してから初めて形にしたシステムで、ヒアリングから設計、開発まで一通りの流れに関わることが出来たので、私にとって大きな経験となりました。
これからも何か作った際に報告していくので、よろしくお願いします。

投稿者プロフィール

ゴン太
ゴン太
新米データサイエンティスト。ゆとり世代の最後の砦1995年生まれ。

-初心者プログラマ向け
-, , , ,

Copyright© ZAIZEN Engineering Blog , 2019 All Rights Reserved Powered by STINGER.