アップフロンティアの R&D 統合新カテゴリー「超技研」のxR分科会活動から生まれた、受付システム「超受付さん」。
訪問先の人を呼び出すために、いつも同じ手順を踏まなければいけない今までの受付システムとは違って、初回の受付登録さえしてしまえば、次回の受付では「顔パス」を実現できます。
縦長ディスプレイ+PC・カメラ・マイク。
組み合わせや見た目は地味かもしれませんが、そこには開発メンバーの英知が詰まった、技術のインテグレーションとなっています。
今回は、本業の合間を見ながら長い長い時間をかけて生まれたこのシステム開発の裏側をお届けします。
第5回 「画像認識?個人認識?」
出演
ギャップロ編集部:G
「超受付さん」開発チームリーダー: N
お客さまの認識はどう実現してるの?
G: 超受付さんの一番のウリは、「2回目以降に来訪のお客さまは超受付さんが勝手に覚えていてくれる、いわば顔パス対応」というところですが、この個人を認識する技術はどのように実現しているんですか?
N: 個人を認識するまでのプロセスでは、いくつか段階を踏む必要があるんですが、まず「人が来たな」というところを認識する必要があるんです。
G:人の検知?
N: そうです、人の検知ですね。
「人感センサー」として働く仕組みをハードとしてもソフトとしても用意する必要がありまして…。
難航したカメラ選び
N: 最初は会社に転がっていた「Kinect v2」を使ってみたんです。
Unity用のライブラリも用意されてたものがそのまま使えたので。
G: 話が早そうですよね。
N: はい。
ただ、開発当初はサービスとしてのリリースは予定していなかったのでそれで良かったんですが、サービスが前提となると
・Kinect用のSDKやライブラリなどの運用/管理が手間
・筐体が大きい
・生産終了品なので入手不可能
といった問題がありまして、最初から考え直すことにしました。
N: 人の検知のソフト部分は開発メンバーのY君の提案もあって、OpenCVのC++ライブラリから必要機能だけをUnity様にラップする方向で進めることにしました。
一方でハードは、OpenCVを使うなら一般的なWebカメラで十分かなと思ったんですが色々試していくと、
・レンズは広角が好ましい
・HD以上のカメラクオリティが求められる
・レスポンスの良いオートフォーカスがほしい
といったポイントが、人の検知や顔認識(後述)の精度を担保するのに大事な要素であることも分かってきて、最終的にはLogicoolの4K Webカメラに決めました。
専用のツールでフォーカスや露出やゲインをいじって、カメラパフォーマンスの最適化をしています。

Logicool BRIO ULTRA HD PRO WEBCAM 4Kウェブカメラ
だれの顔を認識しよう?
N: 次に顔認識ですね。
顔認識では、まず来訪されたお客さまが一人なのか複数人なのかで処理を考える必要があります。
一人の時はいいのですが、複数人で来た場合だと、応対すべきお客さまの顔がどれなのかを推測しないといけないのですが、これは結構かんたんに、顔の面積が一番大きく映っている…
G: つまりカメラから一番近くにいる人ですか?
N: おっしゃる通りです。
そこから、「受付応対すべき方はこの人だろう」と推定する事ができます。
G: たしかにそうですね。
さいごの関門、個人の認識
N: OpenCVで、複数人の顔の認識、さらにその中から応対するべき人を推定することが出来るようになりました。ここからようやく、個人の認識を行います。
N: 個人の認識には、OpenCVではなくてMicrosoft AzureのFaceというクラウドサービスを使っています。
最初の顔認識で、一番顔面積を大きかった顔の画像をFaceに送ると、その顔がこれまでに登録した顔画像のうち、どの顔にどのくらい一致するかを判定して結果を返してくれます。ただ、このままだと僕らはそれが山田さんなのか鈴木さんなのかもまだ分かりません。
あくまでもFaceが以前登録したことのある「この顔画像かもしれないよ?」という結果を扱っています。

N: さらに別のサーバでお客さまや社員の情報をプロフィールとともに登録・管理しておき、ここにFaceからの判定情報を返して紐付けることでようやく山田さんか鈴木さんかが判別できるようになります。
G: 個人照合データベースが存在するということですよね。
N: そうですね。
ここまでが個人情報を認識するまでの一通りのプロセスなんですが、これを実現するためには仕込みが必要で、顔画像をあらかじめ管理サーバに登録しておく必要があります
G: まあ、手がかりになるところですもんね。
N: そうですね。
実は、新規で来たお客さまに対して受付対応をしている裏側では、常にカメラでお客さまの顔を撮り続けています。
撮影された一連の顔画像は、管理用のサーバに新規のお客さまプロフィールとして登録すると同時にAzureへも送り、AIを使って機械学習をさせています。
(※編集部注:顔画像の登録はご本人(被写体)の承認をいただいて行っております)
G: なるほど。
必要な画像枚数は…?

N: そしてAzureから返ってきた個人の顔情報と管理サーバに登録されているプロフィールとを紐付けることで個人を認識しています。
G: ちなみに最初に顔画像を登録する時って、どのくらいの枚数を登録しているんですか?
N: そうですね。今は10枚程度でいけていますね。
G: え、そんなもんでいけるんですか??
N: はい。
G: へぇー、10枚程度とはすごいですね。苦労したんじゃないですか?
N: そうですね、結論を出すまでの道のりは結構長かったです。
最初は1枚しか登録してなかったんですよ。
G: それでもできたんですか?
N: いやさすがにできなかったです。(笑)
誰を撮っても「鈴木さん」と認識されてしまって。(笑)
G: そりゃダメだ。 (笑)
N: Faceのリファレンスを読んでいくと、やっぱり数十枚は登録しないとダメらしいという事が分かりました。そこから開発が進んで、Face自体の性能も向上したので、今では10枚程でいけるようになりましたね。
G: なるほど、地道な調整があったんですね。
N: はい。(笑)
次回
第6回「ハードウェア、どうしてる?」 へ続く
前回
第4回「「超受付さん」の音声UIはどうしてる?その3」はこちら
関連リンク
超受付さん: https://chouketsuke.upft.jp/