DUICUO

優れたオープンソースの顔認識プロジェクト6つ

生体認証には、顔認識、音声認識、指紋認識、網膜または虹彩認識が含まれます。これらのうち、顔認識は現在、本人認証や身元検索アプリケーションにおいて最も広く利用されている生体認証技術です。

顔認識とは、顔の視覚的特徴の分析と比較によって個人を識別するコンピュータ技術を指します。広義の顔認識には、顔画像の取得、顔の位置特定、顔認識の前処理、本人確認、本人検索など、顔認識システムを構築するための一連の関連技術が含まれます。一方、狭義の顔認識とは、顔を用いて本人確認または検索を行う技術またはシステムを指します。

従来の顔認識技術は、主に可視光画像に依存しており、これは多くの人が慣れ親しんでいる手法です。しかし、このアプローチには大きな欠点があり、照明条件に大きく依存します。技術の進歩に伴い、3D画像顔認識や熱画像顔認識などの新しいソリューションが登場しています。

近年、オープンソース分野では優れた顔認識プロジェクトがいくつか登場しています。これらのプロジェクトはオープンソースかつ無料で、特定のアプリケーションシナリオの要件を満たすことができます。この記事では、これらのオープンソースプロジェクトに焦点を当てて紹介します。

1. オープンフェイス

Github: https://github.com/TadasBaltrusaitis/OpenFace

OpenFaceは、特徴点検出、頭部姿勢認識、顔動作認識、視線認識など、様々な顔認識・検出機能を備えたコンピュータービジョンと機械学習のためのツールです。さらに、特別なハードウェアを必要とせず、ウェブカメラからのリアルタイム顔認識も可能です。

OpenFace は、Python と Torch をベースにしたニューラル ネットワーク アルゴリズムの実装であり、その理論は FaceNet に由来しています。

その機能は次のとおりです:

(1)顔のランドマーク検出

(2)顔のランドマークと頭部姿勢の追跡

(3)顔の動きの単位認識

(4)視線追跡

(5)顔の特徴抽出

2. 顔認識

GitHub: https://github.com/ageitgey/face_recognition

`face_recognition` は、強力でシンプル、そして使いやすいオープンソースの顔認識プロジェクトです。包括的な開発ドキュメントとアプリケーションサンプルが用意されており、Raspberry Pi システムと互換性があります。このプロジェクトは非常に簡潔な顔認識ライブラリであり、Python とコマンドラインツールを使用して顔を抽出、認識、操作できます。このプロジェクトの顔認識は、業界をリードする C++ オープンソースライブラリ dlib のディープラーニングモデルに基づいており、Labeled Faces in the Wild 顔データセットでテストした結果、最大 99.38% の精度を達成しています。ただし、子供やアジア人の顔の認識精度には改善の余地があります。

Labeled Faces in the Wild は、マサチューセッツ大学アマースト校が作成した顔データセットで、Web から収集された 13,000 枚以上の顔画像が含まれています。

このプロジェクトでは、フォルダー全体の画像を処理するために使用できるシンプルな face_recognition コマンドライン ツールも提供されます。

主な機能は次のとおりです。

(1)画像内のすべての顔を見つけます。

 import face_recognition image = face_recognition.load_image_file("your_file.jpg") face_locations = face_recognition.face_locations(image)

(2)目、鼻、口、あごなど顔の主要な特徴を識別する。

 import face_recognition image = face_recognition.load_image_file("your_file.jpg") face_landmarks_list = face_recognition.face_landmarks(image)

顔の特徴を認識することは、このプロジェクト (デジタル メイクアップ) の自動メイクアップの例など、多くの分野で役立ちます: https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py。

(3)写真に写っている人物が誰であるかを特定します。

 import face_recognition known_image = face_recognition.load_image_file("biden.jpg") unknown_image = face_recognition.load_image_file("unknown.jpg") biden_encoding = face_recognition.face_encodings(known_image)[0] unknown_encoding = face_recognition.face_encodings(unknown_image)[0] results = face_recognition.compare_faces([biden_encoding], unknown_encoding)

(4)リアルタイム顔検出

他の Python ライブラリ (OpenCV など) と組み合わせて使用​​することで、リアルタイムの顔検出を実現できます。

3. インサイトフェイス

GitHub: https://github.com/deepinsight/insightface

InsightFaceは、PyTorchとMXNetをベースとしたオープンソースの2Dおよび3Dディープラーニング顔認識・解析ツールです。MXNetと比較して、OneFlowベースの実装は優れたパフォーマンスを提供し、データ並列処理では2.82倍、モデル並列処理では2.45倍、部分的なフルクラウドを含むハイブリッド並列処理では1.38倍高速です。OneFlowベースのコードは、データセット作成チュートリアル、トレーニングおよび検証スクリプト、事前トレーニング済みモデル、MXNetモデル用変換ツールを含むInsightFaceプロジェクトリポジトリに統合されています。InsightFaceは、トレーニングとデプロイメントに最適化された、最先端の顔認識、顔検出、顔アライメントアルゴリズムを豊富に実装しています。このソリューションは、LFWデータセットで99.86%という非常に高い精度を誇ります。

ArcFace、SubCenter-ArcFace、RetinaFace などはすべて InsightFace でサポートされているプロジェクトです。

4.フェイスネット

Github: https://github.com/davidsandberg/facenet

FaceNetは、Googleが2015年に提案したディープラーニングベースの顔認識システムです。FaceNetは、顔認証(同一人物かどうか)、認識(誰なのか)、クラスタリング(類似人物を見つける)を同時に行うことができる多機能な認識システムです。標準的な「顔データベース」を用いたテストでは、FaceNetはほぼ100%の精度を達成し、2億5000万件の顔を含む大規模なデータベースでも86%の精度を維持しています。現在利用可能な2つの事前学習済みモデルは、LFWでそれぞれ99.05%と99.65%の精度を達成しています。

FaceNetの基本原理は、深層畳み込みニューラルネットワークを直接学習させ、顔画像を128次元ユークリッド空間にマッピングすることです。ユークリッド空間における異なる顔画像間の距離は、画像の類似性と関連しています。つまり、2つの顔画像の特徴ベクトル間の「ユークリッド距離」が小さいほど、2つの画像が同一人物である確率が高くなります。

FaceNet を推論に使用するプロセスには、通常、次の手順が含まれます。

  • データ前処理:従来の顔認識データセットの画像には、人物の頭部全体と環境背景の一部が含まれており、顔が傾いている(頭が傾いている、横顔)場合が多い。このような画像をモデルに入力する前に、画像の「本来の顔」部分をスライスし、無関係な背景情報を削除し、スライスした顔画像を位置合わせしてから、学習に使用できるようにする。
  • 特定のルールに従ってデータセットをロードする: FaceNet システムは、新しいデータ インポート方法を使用します。データセットを、一致する画像 2 つ (同じ人物の画像 2 つ) と一致しない画像 1 つ (別の人物の画像 1 つ) で構成されるトリプルとしてロードします。
  • 大規模バックボーンネットワークを用いた顔特徴抽出:適切な深層畳み込みニューラルネットワークを選択し、その出力層を変更することで、顔特徴抽出を実行できます。一般的に使用される深層畳み込みニューラルネットワークには、ResNetシリーズとInceptionシリーズがあります。
  • 顔特徴情報にはL2ノルム正規化が適用されます。深層畳み込みニューラルネットワークの出力は、128次元の超空間における特徴ベクトルです。L2正則化は、128次元の超空間内の点を128次元の超球に正規化するために用いられます。そして、有効な特徴が選択されます。
  • 損失計算と勾配更新: 三値損失関数 (Triplets Loss) を計算して、モデルがターゲット方向に迅速に最適化できるようにします。

5. ディープフェイス

Github: https://github.com/serengil/deepface

DeepFaceは、顔認識と顔属性分析(年齢、性別、感情、民族性)のための軽量なPythonフレームワークです。わずか数行のコードで顔分析を適用できます。ソフトウェアエンジニアリングと機械学習研究のギャップを埋めるものであり、車の運転はしたいけれど作り方がわからないという方に最適です。

Deepfaceはハイブリッド顔認識ソフトウェアパッケージです。現在、VGG-Face、Google FaceNet、OpenFace、Facebook DeepFace、DeepID、ArcFace、Dlib、SFaceといった最先端の顔認識モデルを多数搭載しています。デフォルト設定ではVGG-Faceモデルが使用されます。

実験的なテストに基づくと、最も優れたパフォーマンスを発揮するモデルは FaceNet、VGG-Face、ArcFace、Dlib です。これらのモデルのスコアは、作成者による主張通り、Labeled Faces in the Wild および YouTube Faces in the Wild データセットで確認できます。

DeepFace は主に次の顔認識アルゴリズムと、次の特定の機能を提供します。

(1)顔認証

(2)顔認識

dfs = DeepFace.find(img_path = "img1.jpg", db_path = "C:/workspace/my_db")

(3)顔属性分析

DeepFace.stream(db_path = "C:/User/Sefik/Desktop/database")

(4)顔検出

(5)顔の特徴抽出

(6)リアルタイム顔分析

6. コンプレフェイス

Github: https://github.com/exadel-inc/CompreFace

Exadel CompreFaceは、最先端の無料オープンソース顔認識システムです。その顔認識アルゴリズムは、機械学習のスキルを必要とせず、あらゆるシステムに簡単に統合できます。

このシステムは、顔認識、顔検証、顔検出、ランドマーク検出、マスク検出、頭部姿勢検出、年齢・性別認識のためのREST APIを提供します。CPUとGPUの両方でモデルを実行できます。また、顔認識サービスへのアクセス権を制御するロール管理システムも含まれています。さらに、CompreFaceはdocker-compose構成を提供しており、Dockerを用いて顔認識サービスを簡単かつ迅速にデプロイできます。

CompreFace は、次のようなさまざまな顔認識サービスをサポートしています。

(1)顔検出

顔検出には、さまざまな性別の間での店舗の人気度に関する統計の収集、アクティビティがどの年齢層に人気があるかに関する統計の収集、顧客の視認性を把握するためのランドマーク情報の取得、店舗内の顧客数に関する統計の収集、すべての顧客が正しくマスクを着用しているかどうかを確認するなど、多くの用途があります。

(2)顔認識

(3)顔認証

(4)特徴検出

(5)年齢認証

(6)性別認定

(7)マスク検査

(8)頭部姿勢検出

(9)ユーザー、役割、アクセス管理