Golang版ライブラリのPaPeRo i 顔認証サービス(NeoFace)対応

 PaPeRo i 制御用Golangライブラリにも弊社ライブラリのPaPeRo i 顔認証サービス(NeoFace)対応とPython版デモアプリと同様にNeoFaceに対応するための修正を行い、GolangアプリでもPaPeRo i 顔認証サービスを利用できる様にしました。

PaPeRo i 制御用WebSocket通信アドオンシナリオ

 使用するアドオンシナリオはPython版と同じです。

PaPeRo i 制御用Golangライブラリ

  • Python版と同様、NeoFace用に追加したGolang版ライブラリのAPIは、C++のPaPeRo i 顔認証サービスライブラリAPIと1対1で対応し、引数も同一になっていますので、APIの動作の詳細についてはPaPeRo i 顔認証サービスライブラリAPI 仕様書をご参照ください。
  • API名は従来通り、Golangの命名規則に合わせSendNeofaceInit(param *ApiParam)の様にパスカルケースになっており、頭に”SendNeoface”を付加しています。
  • 省略可能引数を渡すための引数param *ApiParamが、実際に省略可能引数が存在するかに関わらず、全てのAPIに付いています。指定不要の場合nilとしてください。
  • C++のPaPeRo i 顔認証サービスライブラリAPIで省略可の引数の内、以下のAPIのUserName、UserStr1、UserStr2、UserStr3については必須に変更しています。
    (1) SendNeofaceRegisterUser() NeoFaceユーザー登録
    (2) SendNeofaceUpdateUserInfo() NeoFaceユーザー情報更新
  • レスポンスはGolang版ではチャネルpapero.Chにyapapero.MsgIfインタフェースのデータとして送られてきます。
    追加したNeoFaceレスポンス判定メソッドは以下の通りです。
    (1) IsNeofaceInitRes() NeoFaceライブラリ初期化レスポンス判定
    (2) IsNeofaceTerminateRes() NeoFaceライブラリ使用終了レスポンス判定
    (3) IsNeofaceRegisterUserRes() NeoFaceユーザー登録レスポンス判定
    (4) IsNeofaceCountUserRes() NeoFaceユーザー数取得レスポンス判定
    (5) IsNeofaceGetUserInfoRes() NeoFaceユーザー検索レスポンス判定
    (6) IsNeofaceUpdateUserInfoRes() NeoFaceユーザー情報更新レスポンス判定
    (7) IsNeofaceDeleteUserRes() NeoFaceユーザー削除レスポンス判定
    (8) IsNeofaceRegisterFaceRes() NeoFaceユーザー顔登録レスポンス判定
    (9) IsNeofaceGetFaceIndicesRes() NeoFaceユーザー顔画像インデックス情報取得レスポンス判定
    (10) IsNeofaceGetFaceImageRes() NeoFaceユーザー顔画像取得レスポンス判定
    (11) IsNeofaceUpdateFaceRes() NeoFaceユーザー顔画像更新レスポンス判定
    (12) IsNeofaceDeleteFaceRes() NeoFaceユーザー顔画像削除レスポンス判定
    (13) IsNeofaceAuthenticateRes() NeoFace顔認証レスポンス判定

顔認証を行う例

 本体上で実行するGolangアプリで顔認証を行う場合の例です。処理順に並べていますが実際にはレスポンス判定はチャネルからの受信処理としてまとめて行う必要があります。

(1) ライブラリ初期化

papero = yapapero.NewPapero("ws://0.0.0.0:8088/papero", "", "")
papero.Start()

(2) NeoFace初期化

papero.SendNeofaceInit(nil)

(3) 初期化レスポンス判定

var msg yapapero.MsgIf
msg = <-papero.Ch
pm := msg.GetPaperoMessage()
ret := pm.Return
switch {
case msg.IsNeofaceInitRes():
    if ret == 0 {
        // 成功
    }

(4) 静止画撮影

papero.SendTakePicture(&yapapero.ApiParam{Format: "JPEG", Filename: "face_image.jpg", Camera: "VGA"})

(5) 静止画撮影レスポンス判定

case msg.IsTakePictureRes():
    if ret == 0 {
        // 成功
    }

(6) 顔認証

th :=  yapapero.PP_NEOFACE_AUTH_THRESHOLD_LOW
papero.SendNeofaceAuthenticate("SUB_GROUP_ID", th, "/tmp/face_image.jpg", nil)

(7) 顔認証レスポンス判定

case msg.IsNeofaceAuthenticateRes():
    if ret == 0 {
        lst := pm.Outvec
        if lst != nil && 0 < len(lst) {
            top := lst[0]
            papero.Speech(fmt.Sprintf("こんにちは、%sさん", top.UserName)

デモアプリ

 デモアプリはPaPeRo i 本体で動作し、Webブラウザからサブグループのユーザ管理、撮影、顔認証動作を確認できるものです(Python版と同じ)。ポート番号は8865に変更しています。Golangの場合Pythonの様にあらかじめPython自体をインストールする様な準備は不要で、arm用にビルドした実行形式ファイルを転送するだけで実行可能です。
 ただし本アプリはWebブラウザとhttpおよびWebSocket通信で連携して動作するWebアプリで、HTML/JavaScript/CSSについては通常のWebサーバの様にファイルとして別に置く形としたため、それらのファイルを実行形式と同じディレクトリ配置する必要があります。
 なおCSSフレームワークPure.cssを使用しています(同梱)。
 また、ソースからビルドし直す場合、使用しているGoの外部パッケージをダウンロードしておく必要があります。

$ go get github.com/gorilla/websocket
$ go get github.com/rs/zerolog/log
$ go get gopkg.in/natefinch/lumberjack.v2

使用手順

(1) PaPeRo i のバージョン確認・更新
 PaPeRo i 顔認証サービスを使用するためにはFW=2.1.37_papero-09以降、robot_platform=std_1_0_18.rom以降(/Extension/robot_platform/bin/sys_mgrのタイムスタンプがMar 16 2017以降)が必要です。
FWはブラウザで 192.168.1.1/index.cgi/fw_main から、
robot_platformは 192.168.1.1/robo/fwup.html から更新できます。
(2) アドオンシナリオ用ライセンスファイル入手
 FW=2.1.37_papero-09/robot_platform=std_1_0_18.rom以降ではアドオンシナリオを動作させるためのライセンスファイルが必要になります。
(/Extension/License/sce_????????_????????????.lic)
(3) PaPeRo i 顔認証サービス申し込み、使用するPaPeRo iの申請
(4) PaPeRo i 顔認証サービス管理ポータルでサブグループの登録、端末(PaPeRo i)へのサブグループ登録
(5) PaPeRo i へのNeoFaceライセンスファイル等のインストール
 /Extension/Licenseにneoface_admin_key、neoface_auth_key、neoface_groupidを置いてください。
(6) 初回起動
 GolangデモアプリバイナリをダウンロードしてPaPeRo i の任意の場所に展開し、

# cd target_dir
# ./neofacedemo

(7) サブグループIDの設定
 ブラウザで192.168.1.1:8865/neofacedemoを開き、サブグループIDに管理ポータルで設定したIDを入力して保存してください。

(8) アプリ再起動
 一旦終了し、パペロからインターネット接続可能なことを確認した上で、再度実行してください。

# ./neofacedemo

(9) 操作
 ブラウザで 192.168.1.1:8865/web/neofacedemo.html を開いてください。ユーザ登録、顔画像登録後に、「撮影」と「認証」または「撮影&認証」で認証シーケンスが実行され、「~さん、こんにちは」と認識した人の名前を発話します。試した限り、人を間違えることはありませんでした(5人登録)。

ダウンロードリンク:
アドオンシナリオ
Golang版デモアプリバイナリとソース


0