【Python】insightfaceを使った顔検出(性別、年齢)

Pythonに関する記事です Python
Pythonに関する記事です

前回まではカスケード分類機によって顔の検出を行っていましたが精度があまり良くなかったと思います。今回はオープンソースのinsightfaceを使って顔の検出を行ってみます。検証はMac(M1)とWindowsで行いました。

InsightFace
InsightFace: an open source 2D&3D deep face analysis library

実行結果

緑の文字は F:女性、M:男性 , 年齢となります。

OS:Windows11、macOS Ventura 13.1

仮想環境:miniconda

Python 3.10.9

スポンサーリンク

事前準備

画像は「写真AC」を利用しました。

ソファーに座る三世代ファミリー2
ソファーに座る三世代ファミリー2(No: 23336923)の無料写真素材を提供する「写真AC」のフリー写真素材は、個人、商用を問わず無料でお使いいただけます。クレジット表記やリンクは一切不要です。Web、DTP、動画などの写真素材としてお...

WindowsとMacではパッケージのインストールが若干違いましたので記載しておきます。また仮想環境は新たに作りました。仮想環境名は何でも良いです。

conda activateで新しい仮想環境に変更して下さい。

#共通
conda create -n 仮想環境名 python=3.10.9

Windows

仮想環境を作る前に「Microsoft C++ Build Tools」をインストールして下さい。insightfaceをダウンロードした際にビルドエラーになってしまいます。

下記サイトから「vs_BuildTools.exe」をダウンロードしてインストーラを起動して下さい。「C++ によるデスクトップ開発」をチェックしてインストールを行って下さい。結構時間がかかります。

Microsoft C++ Build Tools - Visual Studio

Pythonパッケージ

conda install で numpy、cython、onnxruntime をインストールします。

conda install numpy cython onnxruntime

pip install で opencv-python、insightface をインストールします。

python -m pip install opencv-python insightface

最終的に下記のようなパッケージ構成になりました。

# packages in environment at C:\Users\○○○○○\miniconda3\envs\opencv:
#
# Name                    Version                   Build  Channel
albumentations            1.3.0                    pypi_0    pypi
blas                      1.0                         mkl
bzip2                     1.0.8                he774522_0
ca-certificates           2023.01.10           haa95532_0
certifi                   2022.12.7       py310haa95532_0
charset-normalizer        3.0.1                    pypi_0    pypi
colorama                  0.4.6           py310haa95532_0
coloredlogs               15.0.1          py310haa95532_1
contourpy                 1.0.7                    pypi_0    pypi
cycler                    0.11.0                   pypi_0    pypi
cython                    0.29.32         py310hd77b12b_0
easydict                  1.10                     pypi_0    pypi
eigen                     3.3.7                h59b6b97_1
fonttools                 4.38.0                   pypi_0    pypi
glib                      2.69.1               h5dc1a3c_2
gst-plugins-base          1.18.5               h9e645db_0
gstreamer                 1.18.5               hd78058f_0
hdf5                      1.12.1               h1756f20_2
humanfriendly             10.0            py310haa95532_1
icc_rt                    2022.1.0             h6049295_2
icu                       58.2                 ha925a31_3
idna                      3.4                      pypi_0    pypi
imageio                   2.25.0                   pypi_0    pypi
insightface               0.7.2                    pypi_0    pypi
intel-openmp              2021.4.0          haa95532_3556
joblib                    1.2.0                    pypi_0    pypi
jpeg                      9e                   h2bbff1b_0
kiwisolver                1.4.4                    pypi_0    pypi
lerc                      3.0                  hd77b12b_0
libclang                  12.0.0          default_h627e005_2
libcurl                   7.87.0               h86230a5_0
libdeflate                1.8                  h2bbff1b_5
libffi                    3.4.2                hd77b12b_6
libiconv                  1.16                 h2bbff1b_2
libogg                    1.3.5                h2bbff1b_1
libpng                    1.6.37               h2a8f88b_0
libprotobuf               3.20.1               h23ce68f_0
libssh2                   1.10.0               hcd4344a_0
libtiff                   4.5.0                h8a3f274_0
libvorbis                 1.3.7                he774522_0
libwebp                   1.2.4                h2bbff1b_0
libwebp-base              1.2.4                h2bbff1b_0
libxml2                   2.9.14               h0ad7f3c_0
libxslt                   1.1.35               h2bbff1b_0
lz4-c                     1.9.4                h2bbff1b_0
matplotlib                3.6.3                    pypi_0    pypi
mkl                       2021.4.0           haa95532_640
mkl-service               2.4.0           py310h2bbff1b_0
mkl_fft                   1.3.1           py310ha0764ea_0
mkl_random                1.2.2           py310h4ed8f06_0
mpmath                    1.2.1           py310haa95532_0
networkx                  3.0                      pypi_0    pypi
numpy                     1.23.5          py310h60c9a35_0
numpy-base                1.23.5          py310h04254f7_0
onnx                      1.13.0                   pypi_0    pypi
onnxruntime               1.12.1          py310hc0725f4_0
opencv-python             4.7.0.68                 pypi_0    pypi
opencv-python-headless    4.7.0.68                 pypi_0    pypi
openssl                   1.1.1s               h2bbff1b_0
packaging                 22.0            py310haa95532_0
pcre                      8.45                 hd77b12b_0
pillow                    9.4.0                    pypi_0    pypi
pip                       22.3.1          py310haa95532_0
prettytable               3.6.0                    pypi_0    pypi
protobuf                  3.20.3                   pypi_0    pypi
pyparsing                 3.0.9                    pypi_0    pypi
pyreadline3               3.4.1           py310haa95532_0
python                    3.10.9               h966fe2a_0
python-dateutil           2.8.2                    pypi_0    pypi
python-flatbuffers        2.0                pyhd3eb1b0_0
pywavelets                1.4.1                    pypi_0    pypi
pyyaml                    6.0                      pypi_0    pypi
qt-main                   5.15.2               he8e5bd7_7
qt-webengine              5.15.9               hb9a9bb5_5
qtwebkit                  5.212                h3ad3cdb_4
qudida                    0.0.4                    pypi_0    pypi
re2                       2022.04.01           hd77b12b_0
requests                  2.28.2                   pypi_0    pypi
scikit-image              0.19.3                   pypi_0    pypi
scikit-learn              1.2.1                    pypi_0    pypi
scipy                     1.10.0                   pypi_0    pypi
setuptools                65.6.3          py310haa95532_0
six                       1.16.0             pyhd3eb1b0_1
sqlite                    3.40.1               h2bbff1b_0
sympy                     1.11.1          py310haa95532_0
threadpoolctl             3.1.0                    pypi_0    pypi
tifffile                  2023.1.23.1              pypi_0    pypi
tk                        8.6.12               h2bbff1b_0
tqdm                      4.64.1                   pypi_0    pypi
typing-extensions         4.4.0                    pypi_0    pypi
tzdata                    2022g                h04d1e81_0
urllib3                   1.26.14                  pypi_0    pypi
vc                        14.2                 h21ff451_1
vs2015_runtime            14.27.29016          h5e58377_2
wcwidth                   0.2.6                    pypi_0    pypi
wheel                     0.37.1             pyhd3eb1b0_0
wincertstore              0.2             py310haa95532_2
xz                        5.2.10               h8cc25b3_1
zlib                      1.2.13               h8cc25b3_0
zstd                      1.5.2                h19a0ad4_0

macOS

Macの場合は特に何かをインストールする必要はありませんでした。

Pythonパッケージ

conda install で opencv、numpy、cython、onnxruntime をインストールします。

conda install opencv numpy cython onnxruntime

pipで insightface をインストールします。

python -m pip install insightface
# packages in environment at /opt/miniconda3/envs/opencv:
#
# Name                    Version                   Build  Channel
albumentations            1.3.0                    pypi_0    pypi
aom                       3.5.0                h7ea286d_0    conda-forge
blas                      2.116                  openblas    conda-forge
blas-devel                3.9.0           16_osxarm64_openblas    conda-forge
bzip2                     1.0.8                h620ffc9_4  
c-ares                    1.18.1               h1a28f6b_0  
ca-certificates           2023.01.10           hca03da5_0  
cairo                     1.16.0            h73a0509_1014    conda-forge
certifi                   2022.12.7       py310hca03da5_0  
charset-normalizer        3.0.1                    pypi_0    pypi
coloredlogs               15.0.1          py310hca03da5_1  
contourpy                 1.0.7                    pypi_0    pypi
cycler                    0.11.0                   pypi_0    pypi
cython                    0.29.32         py310hc377ac9_0  
easydict                  1.10                     pypi_0    pypi
expat                     2.4.9                hc377ac9_0  
ffmpeg                    5.1.2           lgpl_h75e0260_2    conda-forge
font-ttf-dejavu-sans-mono 2.37                 hd3eb1b0_0  
font-ttf-inconsolata      2.001                hcb22688_0  
font-ttf-source-code-pro  2.030                hd3eb1b0_0  
font-ttf-ubuntu           0.83                 h8b1ccd4_0  
fontconfig                2.14.1               h6b8db82_1  
fonts-anaconda            1                    h8fa9717_0  
fonts-conda-ecosystem     1                    hd3eb1b0_0  
fonttools                 4.38.0                   pypi_0    pypi
freetype                  2.12.1               h1192e45_0  
gettext                   0.21.1               h0186832_0    conda-forge
gmp                       6.2.1                hc377ac9_3  
gmpy2                     2.1.2           py310h8c48613_0  
gnutls                    3.7.8                h9f1a10d_0    conda-forge
graphite2                 1.3.14               hc377ac9_1  
harfbuzz                  6.0.0                hddbc195_0    conda-forge
hdf5                      1.12.2          nompi_h55deafc_101    conda-forge
humanfriendly             10.0            py310hca03da5_1  
icu                       70.1                 h6b3803e_0    conda-forge
idna                      3.4                      pypi_0    pypi
imageio                   2.25.0                   pypi_0    pypi
insightface               0.7.2                    pypi_0    pypi
jasper                    2.0.33               hba35424_0    conda-forge
joblib                    1.2.0                    pypi_0    pypi
jpeg                      9e                   h1a28f6b_0  
kiwisolver                1.4.4                    pypi_0    pypi
krb5                      1.19.4               h8380606_0  
lame                      3.100                h1a28f6b_0  
lerc                      3.0                  hc377ac9_0  
libaec                    1.0.6                hb7217d7_1    conda-forge
libblas                   3.9.0           16_osxarm64_openblas    conda-forge
libcblas                  3.9.0           16_osxarm64_openblas    conda-forge
libcurl                   7.87.0               h0f1d93c_0  
libcxx                    14.0.6               h848a8c0_0  
libdeflate                1.8                  h1a28f6b_5  
libedit                   3.1.20221030         h80987f9_0  
libev                     4.33                 h1a28f6b_1  
libffi                    3.4.2                hca03da5_6  
libgfortran               5.0.0           11_3_0_hca03da5_28  
libgfortran5              11.3.0              h009349e_28  
libglib                   2.74.1               h14ed1c1_0    conda-forge
libiconv                  1.17                 he4db4b2_0    conda-forge
libidn2                   2.3.1                h1a28f6b_0  
liblapack                 3.9.0           16_osxarm64_openblas    conda-forge
liblapacke                3.9.0           16_osxarm64_openblas    conda-forge
libnghttp2                1.46.0               h95c9599_0  
libopenblas               0.3.21          openmp_hc731615_3    conda-forge
libopencv                 4.7.0           py310h57d381e_0    conda-forge
libpng                    1.6.39               h76d750c_0    conda-forge
libprotobuf               3.21.12              hb5ab8b9_0    conda-forge
libsqlite                 3.40.0               h76d750c_0    conda-forge
libssh2                   1.10.0               hf27765b_0  
libtasn1                  4.19.0               h1a8c8d9_0    conda-forge
libtiff                   4.5.0                h2fd578a_0  
libunistring              0.9.10               h1a28f6b_0  
libvpx                    1.11.0               hc377ac9_0  
libwebp-base              1.2.4                h1a28f6b_0  
libxml2                   2.9.14               h9d8dfc2_4    conda-forge
libzlib                   1.2.13               h03a7124_4    conda-forge
llvm-openmp               14.0.6               hc6e5704_0  
lz4-c                     1.9.4                h313beb8_0  
matplotlib                3.6.3                    pypi_0    pypi
mpc                       1.1.0                h8c48613_1  
mpfr                      4.0.2                h695f6f0_1  
mpmath                    1.2.1                    pypi_0    pypi
ncurses                   6.4                  h313beb8_0  
nettle                    3.8.1                h63371fa_1    conda-forge
networkx                  3.0                      pypi_0    pypi
numpy                     1.23.5          py310hb93e574_0  
numpy-base                1.23.5          py310haf87e8b_0  
onnx                      1.13.0                   pypi_0    pypi
onnxruntime               1.13.1          py310h46e22f8_1    conda-forge
openblas                  0.3.21          openmp_hf78f355_3    conda-forge
opencv                    4.7.0           py310hb6292c7_0    conda-forge
opencv-python-headless    4.7.0.68                 pypi_0    pypi
openh264                  2.3.1                hb7217d7_1    conda-forge
openssl                   1.1.1s               h1a28f6b_0  
p11-kit                   0.24.1               h29577a5_0    conda-forge
packaging                 22.0            py310hca03da5_0  
pcre2                     10.37                h37e8eca_1  
pillow                    9.4.0                    pypi_0    pypi
pip                       22.3.1          py310hca03da5_0  
pixman                    0.40.0               h1a28f6b_0  
prettytable               3.6.0                    pypi_0    pypi
protobuf                  3.20.3                   pypi_0    pypi
py-opencv                 4.7.0           py310h69fb684_0    conda-forge
pyparsing                 3.0.9                    pypi_0    pypi
python                    3.10.8          hf452327_0_cpython    conda-forge
python-dateutil           2.8.2                    pypi_0    pypi
python-flatbuffers        2.0                pyhd3eb1b0_0  
python_abi                3.10                    3_cp310    conda-forge
pywavelets                1.4.1                    pypi_0    pypi
pyyaml                    6.0                      pypi_0    pypi
qudida                    0.0.4                    pypi_0    pypi
re2                       2022.06.01           h9a09cb3_1    conda-forge
readline                  8.2                  h1a28f6b_0  
requests                  2.28.2                   pypi_0    pypi
scikit-image              0.19.3                   pypi_0    pypi
scikit-learn              1.2.1                    pypi_0    pypi
scipy                     1.10.0                   pypi_0    pypi
setuptools                65.6.3          py310hca03da5_0  
six                       1.16.0                   pypi_0    pypi
svt-av1                   1.3.0                h7ea286d_0    conda-forge
sympy                     1.11.1          py310hca03da5_0  
threadpoolctl             3.1.0                    pypi_0    pypi
tifffile                  2023.1.23.1              pypi_0    pypi
tk                        8.6.12               hb8d0fd4_0  
tqdm                      4.64.1                   pypi_0    pypi
typing-extensions         4.4.0                    pypi_0    pypi
tzdata                    2022g                h04d1e81_0  
urllib3                   1.26.14                  pypi_0    pypi
wcwidth                   0.2.6                    pypi_0    pypi
wheel                     0.37.1             pyhd3eb1b0_0  
xz                        5.2.10               h80987f9_1  
zlib                      1.2.13               h03a7124_4    conda-forge
zstd                      1.5.2                h8574219_0  

プログラミング

プログラムファイルは任意の名称をつけて下さい。

実行は「python ○○○○○.py」です。

import cv2
import numpy as np
import insightface
from insightface.app import FaceAnalysis

# FaceAnalysisクラスのインスタンス化
app = FaceAnalysis()
app.prepare(ctx_id=0, det_size=(640, 640))
# カメラ定義 windowsの場合:CAP_MSMF Macの場合:CAP_AVFOUNDATION
capture = cv2.VideoCapture(0, cv2.CAP_MSMF)
while(True):
    # ビデオキャプチャ
    ret, flame = capture.read()
    if (ret == False):
        break
    # 顔の判定
    faces = app.get(flame)
    # 検出した顔を囲む矩形の作成
    detect = app.draw_on(flame, faces)
    # 画面表示
    cv2.imshow("flame", detect)
    # qが押されたら終了
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

まとめ

プログラム自体はそれほど難しくはないのですが動くまでに結構エラーが出ました。またWindowsとMacでopencvのバージョンの差でエラーが出て時間を費やしてしまいました。

opencv、numpy、cython、onnxruntime、insightfaceがあれば動きます。

処理は結構重いです。実行結果の動画もカクカクしています。そのぶん精度はかなり高いです。

ぜひ試してください。

中澤 一人

沖縄支店の中澤です。
プログラミング講師やシステム開発を行っています。

#有限会社エヌ・ユー・エスをフォローする

コメント

タイトルとURLをコピーしました