顔データを正しく再登録する

認証の精度を上げるための施策は2つあります。
ひとつは対象となるカメラ映像を高解像度にすること。
もう一つは登録する顔データをしっかりとしたものにすることです。
下の画像は、登録されていた顔写真から「いらないもの」として抜き出した写真です。

捨てた顔画像
捨てた顔画像 ( 1113 個)

上の「捨てた顔写真」は

  • 解像度が低い
  • 同一人物ですでに似ている画像がある
  • 正面を向いていない
  • 修正が入った画像である

などの理由で顔写真フォルダから抜き出しました。もちろん npKnown.txt ( 128 次元顔データ配列 ) は抜いた後に作り直しました。

人物数 164 人に対して顔写真の数は 1506 個。この内捨てた顔画像 1113 個、残った顔画像が 393 個になりました。実に約 74% のいらない顔画像を捨てたことになります。
 上の顔画像は、残った顔画像 393 個に対して更に次の修正を加えたものです。

$ mogrify -resize 100x100 ./*
$ mogrify -unsharp 12x6+0.5+0 ./*

一行目は、各顔画像を 100×100 にリサイズしてあります。
二行目は、それぞれの顔画像に対してアンシャープマスクを適用しています。
こうすることによって 128 次元顔データがよりしっかりしたデータとなることを狙っています。

100x100 に統一、更にアンシャープマスクの適用をした顔画像の比較画像
100×100 に統一、更にアンシャープマスクの適用をした顔画像の比較画像
修正された顔画像ファイル 393 個
修正された顔画像ファイル 393 個
npKnown.txt ファイル

 このようにして再作成した顔画像に対して test_script.py を走らせます。そうすると、npKnown.txt (右図)が自動的に作成されます。npKnown.txt には各顔画像に対しての 128 次元数値データ配列が書き込まれています。

npKnown.txt の中身。各顔画像の 128 次元顔データ配列。
npKnown.txt の中身。各顔画像の 128 次元顔データ配列。

 この様にして整理した顔画像ファイルと顔データを使って、test_script.py を走らせた結果を以下に掲載します。

【追記】記事内容が古くなっております。
・Python2 系
・顔認証画面の表示が変更前
・CUDA 未対応のため低速
・顔認証精度が低い(変更前)
最新の記事をご参照ください。

検証環境:  test_script.py,  
Python 2.7.15+, 
Ubuntu 18.04.3 LTS,  
Linux 4.15.0-66-generic,  
AMD Ryzen 5 1400, 
MemTotal: 16421236 kB, 
GeForce GT 710

 体感で良くなっていることを実感できました。
顔データの登録はこの様なルールを先に決めておくのが重要です。例えば、先の mogrify コマンドはシェルスクリプトに記述しておいて同じディレクトリは一括処理を出来るようにしておくと便利です。

Follow me!