InsightFace は,顔検出 (face detection),顔のアラインメント, 顔検証 (face verification), 顔識別 (face identification)の機能を持つ.
InsightFace の GitHub のページ: https://github.com/deepinsight/insightface
【サイト内の関連ページ】
Windows での Git のインストール: 別ページ »で説明
【関連する外部ページ】
Git の公式ページ: https://git-scm.com/
【サイト内の関連ページ】
【関連する外部ページ】
Python の公式ページ: https://www.python.org/
Windows での Build Tools for Visual Studio 2022,NVIDIA ドライバ,NVIDIA CUDA ツールキット 11.8,NVIDIA cuDNN v8.6 のインストールと動作確認: 別ページ »で説明
【関連する外部ページ】
コマンドプロンプトを管理者として実行: 別ページ »で説明
PyTorch のページ: https://pytorch.org/index.html
次のコマンドは, PyTorch 2.0 (NVIDIA CUDA 11.8 用) をインストールする. 事前に NVIDIA CUDA のバージョンを確認しておくこと(ここでは,NVIDIA CUDA ツールキット 11.8 が前もってインストール済みであるとする).
PyTorch で,GPU が動作している場合には,「torch.cuda.is_available()」により,True が表示される.
python -m pip install -U pip python -m pip install -U torch torchvision torchaudio numpy --index-url https://download.pytorch.org/whl/cu118 python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
Windows では,コマンドプロン プトを管理者として実行し, 次のコマンドを実行する.
GPU を使わない場合には「onnxruntime-gpu」でなく,「onnxruntime」をインストールすること.
python -m pip install -U insightface onnxruntime-gpu
公式ページ (https://github.com/deepinsight/insightface/tree/master/python-package) に記載の,顔検出及び年齢と性別の予測のプログラムを実行する.
このプログラムは buffalo_l という名前の事前学習済みモデルを使用している.
Python プログラムを実行する
このプログラムの実行により,result.jpg ファイルができる.
import cv2 import numpy as np import matplotlib.pyplot as plt import insightface from insightface.app import FaceAnalysis from insightface.data import get_image as ins_get_image app = FaceAnalysis(providers=['CUDAExecutionProvider', 'CPUExecutionProvider']) app.prepare(ctx_id=0, det_size=(640, 640)) img = ins_get_image('t1') faces = app.get(img) rimg = app.draw_on(img, faces) plt.style.use('default') plt.imshow(cv2.cvtColor(rimg, cv2.COLOR_BGR2RGB)) plt.show() cv2.imwrite("./result.jpg", rimg)
Python プログラムを実行する
import cv2 import numpy as np import insightface from insightface.app import FaceAnalysis from insightface.data import get_image as ins_get_image app = FaceAnalysis() app.prepare(ctx_id=0, det_size=(640, 640)) v = cv2.VideoCapture(0) while(v.isOpened()): r, f = v.read() if ( r == False ): break faces = app.get(f) rimg = app.draw_on(f, faces) cv2.imshow("", rimg) # Press Q to exit if cv2.waitKey(1) & 0xFF == ord('q'): break