iOS11から使えるようになったVisionフレームワークというのを使うとものすごく簡単に顔認識が可能です。裏ではCoreMLが使われているということで機械学習ベースの顔認識のようです。

ちょっと動かしてみようと思ったときに最適なサンプルアプリケーションをGitHubで見つけましたので紹介しておきます。おかげで同じようなことを実施するアプリを作るときの参考になりました。

それがこちらです。

mattlawer/FaceLandmarksDetection
FaceLandmarksDetection - Finds facial features such as face contour, eyes, mouth and nose in an image.

昨日UIImageのところでちょろっと触れた件でもあります。

AVCaptureOutputで撮影した写真のimageOrientationを修正する - ぴよログ
AVCaptureOutputで撮影した写真はUIImageViewに表示したり本体のフォトアルバムに保存する限りは問題ないのですが、別のソ

このリポジトリをcloneして手元で動かせばすぐに試すことができます。

重要なのはこちらのファイル↓です。

FaceLandmarksDetection/FaceLandmarksDetector.swift

↑このファイルで定義されているクラスが、画像を受け取って顔認識にかけ認識結果を書き込んだ画像にして呼び出し元に返す、という処理をしています。この手の処理は座標合わせが往々にして面倒なのですが、ちゃんと考慮してくれているので変にハマらなくて済みます。

余談ですが元々3D系の仕事をしてたので計算できないわけじゃないけど、あまり得意ではない(直感的に理解できない)のでできれば避けたいのです。

というわけで顔認識をやりたい場合はこういったサンプルコードから習得していくのも良いんじゃないかなと思いました。

認識にはVNDetectFaceLandmarksRequestというクラスを使うので、GitHub上でこのクラスを検索すると他の例も見つかりそう。

Search · VNDetectFaceLandmarksRequest