uniface.hub

uniface.hub

ユニフェイスの開発者ブログ


Title RealSense F455でオフライン顔認証
  • 2021年8月16日
  • 海本 悟志
RealSense F455でオフライン顔認証

RealSense F455とは

Intelが販売している深度センサ付きカメラシリーズ「RealSense」その中でも顔認証に特化したF455型。深度センサ付きのため暗い場所でも利用できる。開発用のライブラリが提供されており、顔認証機能が簡単にアプリに組み込める。プラットフォームやライブラリが提供されている言語についてはGitHubを参照のこと。

左からプリングルス/F455/D415(三脚を取り外せばサイズ)

顔認証と顔認識の違い

顔認識は顔の位置、性別、年齢などを認識する仕組みたが、顔認証はさらに個人の特定まで行う。認証という名の通り、本人確認(デバイス/システムへのサインインなど)のために利用されることが多い。

オフラインでの利用について

顔認証というとクラウドのサービスを利用することが多い。クラウドサービスの場合インターネットが利用できることが前提になり、大抵は一回あたりいくらという料金が発生する。F455ではカメラ側の処理で顔認証を行えるため、オフラインかつデバイス代の初期費用のみで利用できる。

試す

SDKのインストール

20210814時点で最新の「rsid_sdk_v0.24.0_signed_win64.exe」をダウンロード、実行。
この後C#から利用するのでインストールオプションでは「.NET Developer Package」を最低限選択(とりあえずフルオプションでもOK)

F455動作確認

SDKをインストールすると「Intel RealSense ID Viewer」というデモアプリがインストールされるので起動。

TIPS
デモアプリ起動後、カメラがアプリと正常に接続できずDevice failed to enter standby modeというエラーが出る場合、ファームウェアのバージョンアップが必要。私のは購入時点で「1.6.1.1007」で一気に最新版にアップデートできなかったので、「2.4.2.74」(SDKも上書きインストール)→「3.1.0.29」(SDKも上書きインストール)→「4.2.1.8201」(SDKも上書きインストール)と段階的にアップデートする必要があった。(不親切)アプリ右上の歯車アイコンからアップデートが可能。

カメラと接続されたら左下の「ENROLL」ボタンから顔認証するユーザーを登録する。登録するユーザー名を入力し、よく見る案内通りに顔を左右に動かし顔情報を登録する。


ユーザー登録後、「AUTHENTICATE」ボタンを押下すると顔認証モードとなり認識された顔の位置とユーザー名が表示される。

C#から利用

試しにGitHubに公開されているソースコードを動かしてみる。

  • VisualStudio起動
  • コンソールアプリ新規作成
  • 参照の追加でライブラリを直接指定「”C:\Program Files\Intel RealSenseID SDK\bin\rsid_dotnet.dll”」
  • GitHubのC#サンプルから内容を拝借
  • COMポートが直接指定になっているので、デバイスマネージャからカメラが接続されているポートを確認し書き換え(COM9の部分)
  • 実行!エラー!
  • どうやら参照した「rsid_dotnet.dll」は内部的に、「rsid.dll」「rsid_c.dll」ライブラリを参照しているようで、実行フォルダにコピーする必要があった。ライブラリの場所は「C:\Program Files\Intel RealSenseID SDK\bin\」(実際はプロジェクトに含めてコピー)
  • 実行!

user_idが認識された。ソースコードを見ると、顔の検知が複数同時に行われてから(OnFaceDeteced)認証結果(OnAuthResult)が返ってくるよう。これにてカメラの情報によりユーザーIDを特定できるので自作のアプリにてユーザー選択などを顔認証で行うことが可能となる。(実際はuserIdにはシステムで一意のユーザー情報を設定するなど必要)ちなみに先ほどのデモアプリで登録したユーザー顔情報はカメラ側に保存されている。なので今回実行したサンプルではデモアプリで登録したユーザーを検知できた。

その他の機能

ユーザー顔情報の管理モード

F455では2つのモードが用意されている。システムの構成により以下2つのモードから選択する。

デバイスモード
デバイスモードは、ユーザーがデータベース管理やデバイスでの照合など、デバイス自体で登録および認証できるようにするAPIのセットです。

今回利用したモード。カメラ自体にユーザー顔情報を保持する。単一のデバイスで利用する場合などはこちらでよい。

サーバーモード
サーバーモードは、ホストまたはサーバー上のフェイスプリントデータベースを管理したいユーザー向けのAPIのセットです。このモードでは、F450はFaceprints-Extractionデバイスとしてのみ使用されます。

ユーザー顔情報を外部に保存し、複数のデバイスで共有することができる。複数場所の各デバイスで同一のユーザー情報を共有したい場合に利用する。(ExtractFaceprintsFor*系のメソッドを利用)顔情報の永続化はアプリ側で好きにできる(enroll時に取得できるFaceprints情報をDBなどに永続化し、MatchFaceprintsメソッドで一致判定)

プレビュー

今回はコンソールアプリのサンプルを利用したのでカメラで撮影したイメージは表示していなかったがPreviewクラスなど利用することにより判定しているイメージの取得も可能とのこと。

感想

想像してたよりシンプルなコードで実装できる。簡単にアプリに組み込めそう。
できればライブラリはもう少し.netライクな作りになってnugetで公開してほしい。
RealSenseD415も色々できそうなのでまた今度紹介。

残念なこと

USB接続なのでWEBブラウザから利用できない。(WebUSBって今どういう状況なんだろう