顔認証技術で人数カウント!
先日の開発開始から、実用に耐えうる「通った人のユニーク数と顔画像ファイルを得るアプリケーション」が誕生しました。
こちらの記事は古くなっており非推奨となりました。
最新のドキュメントは以下から閲覧可能です。
・GitHub FACE01
・FACE01 document
サンプルスクリプト
まず、Face01_list の検証をするためにサンプルスクリプトから呼び出して結果を検証します。
#!/usr/bin/python3
# -*- coding:utf-8 -*-
print('Start test_script')
# Face01_list の呼び出し ================================================
import list as l
from multiprocessing import Pool
kaoninshoDir, outputDIR = l.home()
pool = Pool(3)
crop_speed=50
pool.apply_async(l.faceCrop, (kaoninshoDir, crop_speed))
pool.apply_async(l.person_count, (outputDIR,))
l.openDIR(outputDIR, tolerance=0.54)
処理全体をスムーズに行うため、マルチプロセスを採用しています。
ユーザー側で設定値を変える場合は以下のように2つを調節・指定します。
- crop_speed
顔検出の頻度を調節する。値が小さいほど多くの顔を検出するがその分処理は遅くなるので調節する。デフォルトは 50 - tolerance
同一人物を検出した場合にユニーク数に含めないように調節する。値が大きくなるほど似ている人をユニーク数に含める。
デフォルトは 0.54
検証環境
検証環境: Python 3.6.9, Ubuntu 18.04.3 LTS, Linux 4.15.0-66-generic, AMD Ryzen 5 1400, MemTotal: 16421236 kB, GeForce GT 710
検証用サンプル
神木隆之介さん、浜辺美波さん、中村倫也さんの3人で談笑する動画をサンプルとして用意しました。この動画サンプルを「test.mp4」として処理します。
検証処理中の様子
Linux 版で処理中の様子をキャプチャしました。
顔画像が順次検出され、それを元にエンコード処理を行い各顔画像ファイルがユニークな人物かを判定していきます。
マルチプロセスで動作しているので
- 顔画像の検出と保存処理
- 顔画像の 128 次元エンコード化と各々のエンコード値の比較処理
- その時その瞬間の総人数表示
を平行に処理しています。
この検証用動画では「3人」出演していますが、様々な表情・様々な顔の角度や仕草で多くの顔画像ファイルが発生していきます。
それらを 128 次元エンコード処理し、ユニークな人物かどうかを比較処理しています。
最終的に「3人分」の顔画像ファイルだけが残り、標準出力されています。
まとめ
今回は分かりやすく複数人が登場する動画ファイルを用いましたが、Webカメラからの入力も可能な用にアプリケーションもご用意しております。
処理速度はマシンスペックに依存しますが、通路・入り口などの入退出数などのユニーク人数を知るには最適と思われます。
以上です。
Face01_list は「その場所に現れた人のうち、そのユニークな人数と個別の顔画像ファイルを得る」にはもってこいのアプリケーションです。
是非ご活用ください。