追加の関数チュートリアル
FACE01には、face01lib/
内に多くの関数が含まれています。
このセクションでは、FACE01で使用可能な関数の使い方について(補足的に)説明します。
公式ドキュメント
準備
Loggerの初期化と設定
FACE01を使用するプログラムをコーディングする際には、最初にinitialize
およびlogger
をコードします。
これにより、設定ファイルconfig.ini
を読み込み、エラーなどをログに記録します。
from face01lib.Initialize import Initialize
from face01lib.logger import Logger
# 初期化
CONFIG: Dict = Initialize('LIGHTWEIGHT_GUI', 'info').initialize()
# Loggerの設定
logger = Logger(CONFIG['log_level']).logger(__file__, CONFIG['RootDir'])
Dlib_api
クラス
このクラスは、ageitgeyによるface_recognitionを元に修正されており、モデルデータはdaviskingによるdlibから取得しています。68点のフェイスモデルだけでなく、5点のフェイスモデルも使用します。
例についてはCore.return_face_location_list
を参照してください。
from face01lib.api import Dlib_api
Dlib_api_obj = Dlib_api()
face_locations
フレーム内の顔のバウンディングボックスの配列を返します。
face_list = Dlib_api_obj.face_locations(img, number_of_times_to_upsample, model)
例
for i in range(exec_times):
next_frame = next_frame_gen_obj.__next__()
if model == 'cnn':
print( [Dlib_api_obj._trim_css_to_bounds(Dlib_api_obj._rect_to_css(face.rect), next_frame.shape) for face in Dlib_api_obj._raw_face_locations(next_frame, number_of_times_to_upsample, model)])
else:
print( [Dlib_api_obj._trim_css_to_bounds(Dlib_api_obj._rect_to_css(face), next_frame.shape) for face in Dlib_api_obj._raw_face_locations(next_frame, number_of_times_to_upsample, model)])
結果
...
[(145, 177, 259, 63), (108, 521, 272, 357)]
[(134, 177, 248, 63), (92, 521, 256, 357)]
[(125, 199, 261, 62), (108, 521, 272, 357)]
[(125, 199, 261, 62), (92, 521, 256, 357)]
[(125, 199, 261, 62), (92, 521, 256, 357)]
[(138, 185, 275, 49), (92, 521, 256, 357)]
Core
クラス
Coreクラスをインポートします。
from face01lib.Core import Core
return_face_location_list
顔の位置リストを返します。この関数は、api.face_locations
よりも高速です。
frame_datas_array = core.frame_pre_processing(logger, CONFIG,resized_frame)
for frame_datas in frame_datas_array:
print(f"face coordinates: {frame_datas['face_location_list']}\n")
結果
[2023-01-23 09:28:02,587] [face01lib.load_preset_image] [load_preset_image.py] [INFO] Loading npKnown.npz
face coordinates: [(161, 443, 311, 294)]
face coordinates: [(162, 438, 286, 314)]
完全な例のコードはこちらにあります。
load_preset_image
この関数はpreset_face_images
フォルダ内の顔画像を読み込み、npKnown.npzファイルを作成します。
return_anti_spoof
(実験的)
このメソッドは、spoof_or_real
、score
、およびELE
のデータを返します。
一般に、トレーニングされたモデルから推測される結果は、1と0に明確に分かれるわけではありません。このため、FACE01ではELE: Equally Likely Events
という概念を取り入れています。score
は元々0〜1の間の2つの数字を示します。このとき、2つの数字の差が0.4
に設定され、その差が0.4以下
の組み合わせは「同じくらい確度」であると見なされます(=Equally Likely Events
)。FACE01ではこれをELE
として表現しています。つまり、2つの数字の差が0.4未満
の場合、それがspoof
かnot spoof
かを判断することはできません。
例
from face01lib.Core import Core
spoof_or_real, score, ELE = Core().return_anti_spoof(frame_datas['img'], person_data["location"])
if ELE is False:
print(
name, "\n",
"\t", "Anti spoof\t\t", spoof_or_real, "\n",
"\t", "Anti spoof score\t", round(score * 100, 2), "%\n",
"\t", "similarity\t\t", percentage_and_symbol, "\n",
"\t", "coordinate\t\t", location, "\n",
"\t", "time\t\t\t", date, "\n",
"\t", "output\t\t\t", pict, "\n",
"-------\n"
)
VidCap
クラス
このクラスはvideo_capture
に含まれています。
インポートするには、以下を参照してください。
from face01lib.video_capture import VidCap
resize_frame
リサイズされた画像のnumpy配列を返します。
resized_frame = VidCap().resize_frame(set_width, set_height, original_frame)
return_movie_property
入力された映画データのfps、高さ、幅のプロパティを返します。
set_width,fps,height,width,set_height = VidCap().return_movie_property(set_width, vcap)
結果
...
set_width: 750
set_height: 421
fps: 30