新規に顔画像登録する時の注意点

こちらの記事は古くなっており非推奨となりました。
最新のドキュメントは以下から閲覧可能です
GitHub FACE01
FACE01 document

ここでは新規に顔画像登録をする場合についてどのような事に注意をしたら良いのかを解説いたします。また Face01 シリーズを使用する時に誤検出や検出漏れを出さない注意点についても触れたいと思います。

前提として、顔画像を切り出す場合には 200x200px にしてください。
色々な大きさになってしまった場合は ImageMagic が導入されている環境であれば

mogrify -resize 200x200 ./*

で OK です。ImageMagic を使わなければいけないわけではありませんのでその他の方法があればそちらでも良いと思います。

手作業で顔画像を切り出す場合

テスト用の顔写真を使いたい場合

有名人の画像を用いる場合

まず誰の顔を切り出すかによりますが、芸能人の顔を切り出す場合には「画像修正の可能性」を考えてください。私達の目からみると単に美しい顔画像でも高度に修正がかかっている場合がかなりあります。この場合、プログラム側からみると「全く別の人物」になりますので気をつけてください。このようなことから google の顔画像検索から顔画像を持ってくることはおすすめしません。

画像修正がかけられている場合がある例
画像修正がかけられている場合があるお勧めできない例

YouTube などから動画を引っ張ってきて素材として使う場合、その動画の中から顔画像を切り出すことをおすすめします。この場合は修正がかかっていることもなく光源も一定なのでプログラム側から「同じ人物」として認識されます。
顔画像ファイル名は人物名にしてください。また表情の異なる顔画像を複数枚用意すると認識率が向上します。その場合のファイル名は「人物名a」「人物名b」などアルファベット( a-zA-Z ) か数値 ( 0-9 ) にしてください。

動画から顔画像を手動で切り抜く例
動画から顔画像を手動で切り抜く例
顔認証結果
顔認証結果

自分や同僚の方の顔を使う場合

開発室に居る方たちの「自分たちの顔」を切り出すこともあると思います。
その場合は USB カメラから映された自分の顔をキャプチャソフトで切り出すか、一度スクリーンショットをとって後から画像加工ソフトで切り出すか、そんなところだと思います。

ここで注意点ですが、登録顔画像に使うための顔画像ファイルは以下の点に注意してください。
注意するべきポイントは「パスポート写真における注意点」と同じです。

これら注意点はテーマパークやライブ会場での顔認証時にも注意喚起されるものです。

見落としがちなのは「蛍光灯など室内照明による逆光」です。一見よく撮れていると思っていても顔の輪郭などが正確に計算できません。下の図だと「暗い、または逆光」にあたります。

テーマパークの顔認証時に気をつける注意点まとめ
Fate/Grand Order Fes. 2019 ~カルデアパーク~より引用

ファイル名は人物の名前プラスアルファベット ( a-zA-Z ) か数値 ( 0-9 ) にしてください。

顔画像ファイル登録の例
顔画像ファイル登録の例

上記の登録顔画像ファイルから model=’small’ ( 5-point landmark model ) を指定した Face01 で認証を行った結果が下の動画です。

光源と前髪だけ気をつけていれば普段は大丈夫です。誤検出や誤動作がある場合はパスポートやテーマパークの注意事項のイラストをよくみて頂いてどれが該当しているのか確認してみてください。

パナソニックによる空港での顔認証の例
顔の殆どが隠れているため警告のダイアログが出ている。
パナソニックによる空港での顔認証の例
顔の殆どが隠れているため警告のダイアログが出ている。

上の写真は空港でのパナソニックの顔認証システムが警告を出しているものです。
帽子によって前髪が長いのと同じように目の上の部分が見えず、またマスクによって目の下はほとんど見えていません。こういった場合はどのような顔認証のシステムであれ顔を認証する処理をする事が出来ません。

別件の注意事項ですが、ノートパソコン付属の USB カメラの場合、広角カメラを使っていることがあり近づきすぎると顔画像が歪みます。この場合もプログラム側からは「違う人」に認識されますので気をつけてください。

自動的に作成する

FaceCrop

弊社の FaceCrop というプログラムを使って USB カメラに映った顔を自動的に切り抜く方法もあります。
ダウンロードした FaceCrop を解凍後、ご自身の顔が中心になるように画面に移してください。output フォルダに 200x200px で切り抜かれた顔画像ファイルが沢山たまりますので、「正面・左右・上向き・下向き」のベストショットを選んで頂きファイル名をご自身の名前で置き換えていただければ結構です。

Face01 がインストールされている環境でしたら既に Python ライブラリがインストールされていると思います。

顔が表示されているウインドウで「q」を押すと終了します。

FaceCrop フォルダの中身
FaceCrop フォルダの中身

詳しくは「2.4 顔認識されている様子」をご覧ください。

顔画像ファイルの出力の様子
顔画像ファイルの出力の様子
FaceCrop を動作させている様子
FaceCrop を動作させている様子

顔認識フォルダに格納する

切り抜いてファイル名を「人物名」に置き換えたファイル群は、「pictures_of_people_i_know」フォルダに格納してください。
既に npKnown.txt がある場合は必ずこのファイルを捨ててください。
捨てるだけで勝手に顔画像の再エンコードをしてくれます。
「pictures_of_people_i_know」フォルダと npKnown.txt 内の128次元データとの整合性が崩れている場合、アプリケーションを止める仕様になっています。顔認証時にアプリケーションが止まるわけではなく顔画像登録時に止まる使用なので問題はないかと思います。

顔認証処理に注意すべき点

Face01_imager ( 積極認証方式 ) の場合

基本的にはパスポートの写真と同じ

パスポートの写真やテーマパークでの注意点と同じです。
よく起こりがちなのが先に上げた「室内照明による逆光」と「前髪の長さ」です。

下の女性はよく見かける看護師さんの例ですが、マスクをかけている場合前髪が長いとほとんど特徴点の抽出が出来ません。

顔認証処理では特徴点が得られず処理が失敗することが多い例。
日本赤十字社福井赤十字病院より引用
顔認証処理では特徴点が得られず処理が失敗することが多い例。

下の看護師さんの様に「顔認証時だけ」おでこを出してマスクを少し下げることがポイントです。

顔認証時にはこのようにおでこを出しマスクを少し下げる
顔認証時にはこのようにおでこを出しマスクを少し下げる
顔認証時だけでもこの様な工夫が必要。

もう一度テーマパークの顔認証における注意事項を掲載します。

テーマパークの顔認証時に気をつける注意点まとめ
Fate/Grand Order Fes. 2019 ~カルデアパーク~より引用

Face01 と Face01_list ( 非積極認証 ) の場合

気をつける点は Face01_imager ( 積極認証 ) と同じ

顔の方向や表情が変わっても認証できる非積極認証方式の Face01, Face01_list ですが、光源の条件や顔認証対象となる方たちの注意しべき点は先のパスポートの例と同じです。

Face01 シリーズに共通して呼び出す側のプログラムには「model」を引数に与えますが、5-point landmark model ( model=’small’) と 68-point landmark model ( model=’large’ ) では得られる特徴点の数に差が出てきてしまいます。実際には 68-point landmark model に比べて 5-point landmark model は 7% の特徴量しか得ることが出来ません。

この場合、得られる 7% の特徴量を最大限に活かすため

  • マスクは下げ気味にする
  • おでこがきちんと見えるようにする

といった事が非常に大事になってきます。先述の看護師さんの例をもう一度見てみましょう。

ただし、左の看護師さんの写真は室内照明によって逆光(顔が暗い)気味になっています。右の看護師さんは順光になっているので光源だけを考えれば右の看護師さんが正解となります。

詳しくは「マスクをつけた顔の検出・解析」をご覧ください。

下の写真は LED 照明をカメラ側につけることによって室内でも順光となるようにしている例です。

「ももいろクローバーZ」の高城れにさんのコンサート会場で入り口に設置されている顔認証用のカメラ
朝日新聞デジタル 顔認証、あなたの周りのあちこちに チケット転売防止も
スムーズな入場で、混雑解消を牽引するパナソニックの顔認証システム。
大きな照明装置で順光を確保している例
スムーズな入場で、混雑解消を牽引するパナソニックの顔認証システム
大きな照明装置で順光を確保している例

jitters

登録された顔画像ファイルは Face01 を呼び出すプログラムから引数として「jitters=10」を与えることを推奨します。jitters は登録された各顔画像ファイルをランダムに反転、角度調整、コントラストの変化を与えます。

トムクルーズの顔画像ファイルを pictures_of_people_i_know フォルダに入れて顔画像ファイル登録した
jitters=10 にした場合の登録顔画像ファイルの変化
jitters=10 にした場合の登録顔画像ファイルの変化
import face01_imager_113 as f   # バージョン等は読み替えてください

kaoninshoDir, pictures_of_people_i_knowDir, check_images = f.home()

# 登録顔画像ファイルの読み込み
known_face_encodings, known_face_names = f.load_priset_image(
	kaoninshoDir,
	pictures_of_people_i_knowDir, 
	jitters=10,   # ここを 10 に設定
	upsampling=0, 
	mode='cnn', 
	model='small'
)

積極認証と非積極認証

Face01 と Face01_list が非積極認証方式、Face01_imager が積極認証方式です。

積極認証と非積極認証の違いはこちらからご覧ください。

Face01_imager ( 積極認証方式 ) の場合、カメラの前に向かって何秒間か見つめなくてはいけません。これは空港や自動化レジでも同様です。その間に本人の写真をとり登録画像と一致しているか計算してその結果を返り値としてアプリケーション本体に渡します。

非積極認証方式はどの方向を向いていても大丈夫ですが積極認証はカメラの方を向いていなくてはなりません。また室内・室外問わず光源が最適かどうかに注意することが重要です。マスクをはめている場合、おでこと鼻筋が出ているかどうかはかなり重要です。この事を守らなければ検出率や認証率にも影響が出てきてしまいます。

テーマパークでの積極認証方式の顔認証システムの例
朝日新聞GLOBE+ より引用

生体認証はマルチモーダルか 2 段階認証を

生体認証に 100% はありません。ですので顔以外の何かで担保する必要があります。

マルチモーダル認証

上の例では「顔認証 + 社員証 ( IC カード ) 」が多く採用されていると感じます。

空港では「顔認証 + パスポート」、決済では「顔認証 + 虹彩認証」などが実用化されています。

顔認証 + 虹彩認証でマルチモーダルを行っている例
NEC/マスクしたまま非接触で決済できる「顔・虹彩認証端末」
IC カードを使った顔認証の例
IC カードを使った顔認証の例
【東京五輪】五輪初、選手を顔認証 入場時間短縮 NEC開発

特に 5-point landmark model ( model=’small’ ) をモデルとして選んだ時、つまりマスク着用時を想定するときには 68-point landmark model ( model=’large’ ) よりも認証率が落ちる(大手の大規模顔認証システムでも認証率は 90% 以下程度)ので、マルチモーダルないし二段階認証は必ず必要になってきます。

FNN: マスク姿でも顔認証OK 中国で開発 その実力は?

以上です。最後までお読み頂きありがとうございました。