face-api.jsはブラウザにおける顔検出および顔認識のためのJavaScript APIで、tensorflow.js core API上に実装されている。これは一連のCNNを実装し、Webとモバイル機器に最適化されている。
face-api.jsとface-recognition.jsの作者であるVincent Mühler氏は、InfoQとのインタビューでface-api.js作成の動機を説明した。
基本的に、私はこれとは別のface-recognition.jsというライブラリを作っていました。これはNode.jsで顔検出と顔認識を行うものです。ある時、tensorflow.jsを見つけて、ブラウザでの機械学習に興味を持ちました。
そうして、既存の顔検出と顔認識のモデルがtensorflow.jsに移植できるのか気になり、やってみるとうまく動いたのです。
それが始まりです。
(github.comから引用した画像)
顔検出に関して、face-api.jsは、SSD Mobilenet V1、Tiny Face Detector、実験的なMTCNNといったモデルを実装している。
SSD (Single Shot Multibox Detector) MobileNet V1はMobileNet V1をベースにしており、顔の境界ボックス検出に高い精度を得ることを狙っている。このモデルは基本的に、画像におけるそれぞれの顔の位置を計算し、境界ボックスを検出された顔の確率とともに返す。
Tiny Face Detectorはリアルタイム顔検出のためのモデルであり、SSD MobileNet V1と比べて高速で、小さく、リソース消費が少ない。このモデルは、境界ボックスでラベル付けされた14kの画像のカスタムデータセットでトレーニングされている。Mühler氏によると、リソースが限られているクライアントはこのモデルを使って問題ないはずだという。
MTCNN (multi-task cascaded convolutional neural networks) は実験的なモデルで、SSD MobileNet V1とTiny Yolo V2の代わりになる顔検出器であり、さらに多くの設定を提供する。
68ポイントの顔ランドマーク検出に関して、2つの軽量で高速なモデルがある。face_landmark_68_modelは350kb、face_landmark_68_tiny_modelは80kbしか必要としない。どちらのモデルもdepth-wise separable convolutionsとdensely connected blocksというアイデアを採用している。モデルは68の顔ランドマーク点でラベル付けされた約35kの顔画像のデータセットでトレーニングされている。
顔認識に関して、face.jsにResNet-34ライクなアーキテクチャに基づくモデルが提供されており、任意の顔画像からface descriptorを計算する。このモデルはトレーニングに使われた顔のセットに限定されない。つまり、開発者はこれを使って任意の人物の顔認識ができるということだ。それらのface descriptorを比較することで、2つの任意の顔の類似性を判定することができる。
face-api.jsを使ってみるには、dist/face-api.jsもしくはdist/face-api.min.jsから最新ビルドをダウンロードして、スクリプトをインクルードする。
<script src="face-api.js"></script>
モデルをロードするには、モデルファイルをアセットとして与える必要がある。以後、/modelsにモデルが存在すると仮定する。
await faceapi.loadSsdMobilenetv1Model('/models')
// accordingly for the other models:
// await faceapi.loadTinyFaceDetectorModel('/models')
// await faceapi.loadMtcnnModel('/models')
// await faceapi.loadFaceLandmarkModel('/models')
// await faceapi.loadFaceLandmarkTinyModel('/models')
// await faceapi.loadFaceRecognitionModel('/models')
サンプルをローカルで実行したければ、以下のステップを実行して、http://localhost:3000/
を開けばよい。
git clone https://github.com/justadudewhohacks/face-api.js.git
cd face-api.js/examples
npm i
npm start
face-api.jsについて、詳しい情報はGitHubリポジトリにある。また、顔認識のチュートリアルや顔追跡のチュートリアルもある。
Rate this Article
- Editor Review
- Chief Editor Action