- 2021年8月16日
RealSense F455とは
Intelが販売している深度センサ付きカメラシリーズ「RealSense」その中でも顔認証に特化したF455型。深度センサ付きのため暗い場所でも利用できる。開発用のライブラリが提供されており、顔認証機能が簡単にアプリに組み込める。プラットフォームやライブラリが提供されている言語についてはGitHubを参照のこと。
顔認証と顔認識の違い
顔認識は顔の位置、性別、年齢などを認識する仕組みたが、顔認証はさらに個人の特定まで行う。認証という名の通り、本人確認(デバイス/システムへのサインインなど)のために利用されることが多い。
オフラインでの利用について
顔認証というとクラウドのサービスを利用することが多い。クラウドサービスの場合インターネットが利用できることが前提になり、大抵は一回あたりいくらという料金が発生する。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って今どういう状況なんだろう