RealSense F455製品レビュー(2)

目次

開発環境

顔認証が行える RealSense F455のSDKはIntelがGitHubで提供しています。他のRealSenseシリーズのSDKとは異なります。今回はSDKについて解説します。

https://github.com/IntelRealSense/RealSenseID

サポートOS

Linux(ubuntu 18、gcc 7.5以降でテスト)
Windows(Windows 10、msvc 2019でテスト)
Android(Android 6.0でテスト)

サポート言語

C/C++
C#
Java
Python

モード

RealSense F455は2つのモードを持ち、用途に応じて切り替えて使用します。

デバイスモード

ユーザーのデータベース管理やデバイスでの照合など、デバイス自体でユーザーの登録や認証を行う場合に使用するモードです。小規模な環境でRealSense F455を1台で使用する場合に適しています。

realsense

サーバーモード

PCやクラウドサーバー上のデータベースを用いてユーザーを認証したい場合に使用するモードです。大規模な環境で複数台で連携してユーザー認証する場合に適しています。

realsense

アーキテクチャ

RealSenseID SDKはRealSenseID(API)とPacket Manager(セキュア通信)に分かれます。
RealSenseID APIはカメラプレビュー、顔認証、デバイス制御を担当しており、主にこのAPI呼び出して、RealSense F455を操作します。
Packet Manager(セキュア通信)はRealSenseID APIとRealSense F455の通信処理を担当し、通信経路をセキュアに保ちます。

f450

https://github.com/IntelRealSense/RealSenseID から引用

API解説

顔認証する際に基本となるAPIを解説します。

デバイスの接続・切断

デバイス接続する場合はセキュアに接続するため、以下のようにECDSAキーで認証します。

class MySignatureCallback : public RealSenseID::SignatureCallback
{
public:
    bool Sign(const unsigned char* buffer, const unsigned int buffer_len, unsigned char* out_sig) override
    {
      // ホスト ECDSA 秘密鍵を使用して、バッファに署名
    }

    bool Verify(const unsigned char* buffer, const unsigned int buffer_len, const unsigned char* sig,const unsigned int sign_len) override
    {
      // デバイス ECDSA 公開鍵でバッファを確認します。
    }
};

MySignatureCallback signature_callback;
RealSenseID::FaceAuthenticator authenticator {&signature_callback};

// デバイスに接続
Status connect_status = authenticator.Connect({RealSenseID::SerialType::USB, "COM9"});

// デバイスを切断
authenticator.Disconnect();

ユーザーの登録


カメラで撮影したユーザーの顔を、ニューラルネットワークアルゴリズムで処理を行い、顔の特徴量を取得します。これを暗号化してデータベースに保存します。デバイスモードの場合、このデータベースをRealSense F455本体にセキュリティに保護されたストレージに保存します。

class MyEnrollmentCallback : public RealSenseID::EnrollmentCallback
{
public:
    void OnResult(const RealSenseID::EnrollStatus status) override
    {
        std::cout << "結果:  ステータス: " << status << std::endl;
    }

    void OnProgress(const RealSenseID::FacePose pose) override
    {
        std::cout << "進捗: 姿勢:" << pose << std::endl;
    }

    void OnHint(const RealSenseID::EnrollStatus hint) override
    {
        std::cout << "ヒント: " << hint << std::endl;
    }
};

const char* user_id = "ASTINA";
MyEnrollmentCallback enrollment_callback;

// ユーザーを登録
Status status = authenticator.Enroll(enrollment_callback, user_id);

ユーザーの認証

カメラで撮影したユーザーの顔を、ニューラルネットワークアルゴリズムで処理を行い、顔の特徴量を取得します。この結果とデータベースに登録されている全ての特徴量と比較を行い結果を得ます。

class MyAuthenticationCallback : public RealSenseID::AuthenticationCallback
{
public:
    void OnResult(const RealSenseID::AuthenticateStatus status, const char* user_id) override
    {
        if (status == RealSenseID::AuthenticateStatus::Success)
        {
            std::cout << "ユーザー認証成功 ユーザーID: " << user_id << std::endl;
        }
        else
        {
            std::cout << "ユーザー認証失敗: ステータス:" << status << std::endl;
        }
    }

    void OnHint(const RealSenseID::AuthenticateStatus hint) override
    {
        std::cout << "ヒント: " << hint << std::endl;
    }
};

MyAuthenticationCallback authentication_callback;

// ユーザーを認証
Status status = authenticator.Authenticate(authentication_callback);

まとめ

顔認証という一見複雑なプログラミングが必要に思える機能も、RealSense F455とRealSense ID SDKを使用することで、少ないコード量で精度の高い顔認証が可能です。

お手持ちのシステムに顔認証を組み込んでみてはいかがでしょうか?

現行のシステムに顔認証機能を付けたいが、どのように実現できるのか分からないといった場合は、お気軽にASTINAへご相談ください。

この記事をシェアする
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

エレキを担当してます。
基板、組み込みソフト、通信技術。

目次