私的AI研究会 > FaceRec1
実用的なAI開発に向けて「顔認証/顔認識 (Face recognition)」システム検討する。
「PyTorch ではじめる AI開発 6」で保留となっている項目についても再度検証してみる。
● あらかじめ登録された人物の画像に対し「顔検出」→「特徴点検出」→「顔照合」の手順で顔認証を行う。
画像引用 →「顔認証とは」
● 参考 → 「顔認証 (Face recognition) 概要」
引用サイト → https://qiita.com/UnaNancyOwen/items/8c65a976b0da2a558f06
/workspace_py37 ├── inface : ├── win_environment_py37x.yaml ←「py37x」という名前で仮想環境を作成 (Windows環境版) ├── win_environment_py37y.yaml ←「py37y」という名前で仮想環境を作成 (Windows環境版) ├── environment_py37x.yml ←「py37x」という名前で仮想環境を作成 (Linux環境版) └── environment_py37y.yml ←「py37y」という名前で仮想環境を作成 (Linux環境版)※ 設定ファイルの1行目を変更することで自由に名前を変更できる。
コマンド | 内容 |
conda update -n base -c defaults conda | conda のアップデート |
conda create -n py37 python=3.7 | 仮想環境の作成(python versionを指定) |
conda env create -f env1.yaml | 仮想環境の作成(yamlファイルの読み込み) |
conda info -e | 作成した仮想環境一覧の表示 |
conda activate py37 | 作成した仮想環境に切り替える |
conda deactivate | 現在の仮想環境から出る |
conda env remove -n py37 | 仮想環境の削除 |
conda remove —-all | すべての仮想環境の削除 |
conda env export > env1.yaml | 現在の仮想環境の設定ファイルを書き出す |
conda list | 現在の仮想環境のパッケージを確認 |
(base) PS > conda activate py37y (py37y) PS >
InsightFace は、オープンソースの2D&3D深層顔解析ツールボックス。
InsightFace を使えば、顔の配置(目・鼻・口などの配置)まで認識できる。
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-toolsインストール時に上記のメッセージでエラーとなる場合
(py37y) PS > conda list Package Version ----------------------- ----------- : Cython 0.29.26 flatbuffers 2.0 numpy 1.21.6 onnxruntime 1.11.1 pip 22.1.2 protobuf 4.21.1 setuptools 62.4.0・「protobuf」のバージョンが 3.20.XX 以下である必要があるため、必要に応じてダウングレードする。
(py37y) PS > pip install protobuf==3.20・「onnxruntime」がない場合はインストールする。
(py37y) PS > pip install onnxruntime・「insightface」をインストールする
(py37y) PS > pip install insightface・「opencv-python-headless」がインストールされるので削除する。
(py37y) PS > pip uninstall opencv-python-headless※ 削除しないとこれまでに作成したプログラムが実行エラーとなる。
(py37y) $ pip install insightface・「opencv-python-headless」がインストールされるので削除する。
(py37y) $ pip uninstall opencv-python-headless※ 削除しないとこれまでに作成したプログラムが実行エラーとなる。削除してもInsightFace は動く
pip uninstall onnxruntime・GPU版をインストールする
pip install onnxruntime-gpu
(py37y) PS > cd /anaconda_win/workspace_py37/inface
mport numpy as np import cv2 from insightface.app import FaceAnalysis image_file = "images/input.jpg" img = cv2.imread(image_file) app = FaceAnalysis() app.prepare(ctx_id=0, det_size=(640, 640)) faces = app.get(np.asarray(img)) print("faces:" + str(len(faces))) rimg = app.draw_on(img, faces) cv2.imwrite("result/output.jpg", rimg)
(py37y) PS > python face_test.py Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider':{}} find model: /home/mizutu/.insightface/models/buffalo_l/1k3d68.onnx landmark_3d_68 ['None', 3, 192, 192] 0.0 1.0 Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider':{}} find model: /home/mizutu/.insightface/models/buffalo_l/2d106det.onnx landmark_2d_106 ['None', 3, 192, 192] 0.0 1.0 Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider': {}} find model: /home/mizutu/.insightface/models/buffalo_l/det_10g.onnx detection [1, 3, '?', '?'] 127.5 128.0 Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider': {}} find model: /home/mizutu/.insightface/models/buffalo_l/genderage.onnx genderage ['None', 3, 96, 96] 0.0 1.0 Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider': {}} find model: /home/mizutu/.insightface/models/buffalo_l/w600k_r50.onnx recognition ['None', 3, 112, 112] 127.5 127.5 set det-size: (640, 640) /home/mizutu/anaconda3/envs/py37/lib/python3.7/site-packages/insightface/utils/transform.py:68: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions. To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`. P = np.linalg.lstsq(X_homo, Y)[0].T # Affine matrix. 3 x 4 faces:6※ result/ フォルダ内に「output.jpg」ファイルが作成される。
(py37y) PS > cd /anaconda_win/workspace_py37/inface
import numpy as np import cv2 from insightface.app import FaceAnalysis capture = cv2.VideoCapture(0) app = FaceAnalysis() app.prepare(ctx_id=0, det_size=(640, 640)) win_name = "Inface test" while True: ret, frame = capture.read() orgHeight, orgWidth = frame.shape[:2] size = (int(orgWidth/2), int(orgHeight/2)) image = cv2.resize(frame, size) faces = app.get(np.asarray(image)) rimg = app.draw_on(image, faces) cv2.namedWindow(win_name, flags=cv2.WINDOW_AUTOSIZE | cv2.WINDOW_GUI_NORMAL) cv2.imshow(win_name, rimg) if cv2.waitKey(33) >= 0: break cv2.destroyAllWindows()
(py37y) PS > python face_test1.py Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider':{}} find model: /home/mizutu/.insightface/models/buffalo_l/1k3d68.onnx landmark_3d_68 ['None', 3, 192, 192] 0.0 1.0 Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider':{}} find model: /home/mizutu/.insightface/models/buffalo_l/2d106det.onnx landmark_2d_106 ['None', 3, 192, 192] 0.0 1.0 Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider':{}} find model: /home/mizutu/.insightface/models/buffalo_l/det_10g.onnx detection [1, 3, '?', '?'] 127.5 128.0 Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider':{}} find model: /home/mizutu/.insightface/models/buffalo_l/genderage.onnx genderage ['None', 3, 96, 96] 0.0 1.0 Applied providers: ['CPUExecutionProvider'], with options: {'CPUExecutionProvider':{}} find model: /home/mizutu/.insightface/models/buffalo_l/w600k_r50.onnx recognition ['None', 3, 112, 112] 127.5 127.5 set det-size: (640, 640) /home/mizutu/anaconda3/envs/py37/lib/python3.7/site-packages/insightface/utils/transform.py:68: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions. To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`. P = np.linalg.lstsq(X_homo, Y)[0].T # Affine matrix. 3 x 4
dlib を使った Python の顔認識ライブラリ Face Recognition を使って、顔認証を試す。
(py37y) PS > Set-Alias -Name python3 python
(py37y) PS > conda search -c conda-forge dlib (py37y) PS > conda search -c conda-forge face_recognition※ conda-forge チャンネルに存在する。
(py37y) PS > conda install -c conda-forge dlib (py37y) PS > conda install -c conda-forge face_recognition
(py37y) PS > python face_rec_test.py [True] [0.30687289]・ビル・ゲイツ氏の画像の場合
(py37y) PS > python face_rec_test.py [False] [0.76115421]
# 登録する顔画像 IMAGE_BASE = 'face_img/okegawa_1.jpg' #IMAGE_BASE = 'face_img/nitta_1.jpg' #IMAGE_BASE = 'face_img/izutsu_1.jpg' #IMAGE_BASE = 'face_img/yaoi_1.jpg' # テストする顔の画像 IMAGE_TEST = 'face_test/okegawa_2.jpg' #IMAGE_TEST = 'face_test/okegawa_3.jpg' #IMAGE_TEST = 'face_test/nitta_2.jpg' #IMAGE_TEST = 'face_test/nitta_3.jpg' #IMAGE_TEST = 'face_test/izutsu_2.jpg' #IMAGE_TEST = 'face_test/izutsu_3.jpg' #IMAGE_TEST = 'face_test/yaoi_2.jpg' #IMAGE_TEST = 'face_test/yaoi_3.jpg' #IMAGE_TEST = 'face_test/kenta_1.jpg'
(py37y) PS > python face_rec_test1.py image0: face_img/okegawa_1.jpg image1: face_test/okegawa_2.jpg [ True] [0.41664106]・コンソールに [True] と表示されていれば同一人物として認識されている。
テスト画像\登録画像 | okegawa_1.jpg | nitta_1.jpg | izutsu_1.jpg | yaoi_1.jpg |
True 0.41664106 | False 0.55076229 | False 0.62268085 | False 0.61278859 | |
True 0.46704798 | False 0.61184343 | False 0.59208763 | False 0.70705007 | |
False 0.61494162 | True 0.47025369 | False 0.67291097 | False 0.71277097 | |
False 0.52083791 | True 0.37238994 | False 0.68981687 | False 0.66519587 | |
False 0.55320831 | False 0.73264518 | True 0.39252568 | False 0.60585284 | |
False 0.48781024 | False 0.66417124 | True 0.36513408 | False 0.58077752 | |
False 0.5754103 | False 0.65407142 | False 0.66449324 | True 0.33872988 | |
False 0.6224912 | False 0.73484997 | False 0.63345989 | True 0.31322053 | |
False 0.63428565 | False 0.70860285 | False 0.65976665 | False 0.63345883 |
(py37y) PS > python face_rec_test2.py 3 [0.56866771 0.76316236 0.70139601] [0.55945628 0.74627261 0.69438567] [0.59285595 0.7861573 0.71487422] [0.58160565 0.75633054 0.70714109] [0.55230919 0.73895946 0.6825079 ] [0.60210378 0.75309704 0.71763039] [0.59397199 0.74692437 0.6939851 ] [0.58052914 0.72466288 0.66393163] :※ 本人確認と入出時間の記録のためヘッダーだけを書き込んだ 「attend.csv」をあらかじめ作成しておく。
Name,Time※ プログラム実行後、確認された結果が記録される。
Name,Time IZUTSU_1, 2022/06/15 09:27:07