この記事は プロダクト マネージャー Christiaan Prins による The Firebase Blog の記事 "ML Kit adds face contours to create smarter visual apps" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
ビジュアルなアプリを開発中またはこれから開発予定の方なら、ML Kit に新しく追加された顔輪郭検出を気に入ってくれるはずです。ML Kit を使うと、コンピュータ ビジョンによる顔検出など、多くの一般的な機械学習(ML)ユースケースを活用することができます。
写真に写った人の頭のどこに帽子をかぶせるべきかを知ることも、目の上に眼鏡を配置することも、左目の上に片眼鏡を置くことも、ML Kit の顔検出を使えば実現できます。この投稿では、Android と iOS の両方で優れたビジュアルなアプリを開発できる新しい顔輪郭機能について説明します。
下のイメージの例をご覧ください。人が眉毛を上げても、輪郭の点はそれに合わせて動いています。高度なカメラアプリは、この点を使ってユーザーの顔に独創的なフィルタや芸術的なレンズを適用することができます。
![]()
この点の集合を検出するために必要なのは、わずか数行のコードだけです。
顔の点を検出する準備ができたら、イメージまたはバッファを ML Kit に送って処理してもらいます。
![]()
ランドマークを検知するには、
Reviewed by Khanh LeViet - Developer Relations Team
ビジュアルなアプリを開発中またはこれから開発予定の方なら、ML Kit に新しく追加された顔輪郭検出を気に入ってくれるはずです。ML Kit を使うと、コンピュータ ビジョンによる顔検出など、多くの一般的な機械学習(ML)ユースケースを活用することができます。
写真に写った人の頭のどこに帽子をかぶせるべきかを知ることも、目の上に眼鏡を配置することも、左目の上に片眼鏡を置くことも、ML Kit の顔検出を使えば実現できます。この投稿では、Android と iOS の両方で優れたビジュアルなアプリを開発できる新しい顔輪郭機能について説明します。
顔輪郭の検出
いくつかの設定オプションを指定するだけで、顔の輪郭を細かく検出することができます。輪郭とは、顔の形と、目、鼻、口などの顔のパーツを表す 100 以上の点の集合です。下のイメージの例をご覧ください。人が眉毛を上げても、輪郭の点はそれに合わせて動いています。高度なカメラアプリは、この点を使ってユーザーの顔に独創的なフィルタや芸術的なレンズを適用することができます。

この点の集合を検出するために必要なのは、わずか数行のコードだけです。
lazy var vision = Vision.vision()輪郭の点をリアルタイムに更新することもできます。理想的なフレームレートを実現するために、顔検出ツールにはデフォルトで
let options = VisionFaceDetectorOptions()
options.contourMode = .all
let faceDetector = vision.faceDetector(options: options)
fast
モードが設定されています。 顔の点を検出する準備ができたら、イメージまたはバッファを ML Kit に送って処理してもらいます。
faceDetector.process(visionImage) { faces, error inML Kit は、イメージと同じスケールで輪郭の x および y 座標を表す点の配列を返します。
guard error == nil, let faces = faces, !faces.isEmpty else { return }
for face in faces {
if let faceContour = face.contour(ofType: .face) {
for point in faceContour.points {
print(point.x) // the x coordinate
print(point.y) // the y coordinate
}
}
}

顔のパーツの位置検出
顔検出ツールは、顔のランドマークも検知することができます。ランドマークとは、鼻、目、耳、口などの顔のパーツを表す包括的な用語です。この機能のパフォーマンスは、I/O で ML Kit をリリースしてから大幅に改善しています。ランドマークを検知するには、
landmarkMode
オプションを指定して顔検出ツールを設定します。 lazy var vision = Vision.vision()その後、ツールにイメージを渡すと、検出したランドマークの座標を受け取って処理できます。
let options = VisionFaceDetectorOptions()
options.landmarkMode = .all
let faceDetector = vision.faceDetector(options: options)
faceDetector.process(visionImage) { faces, error in
guard error == nil, let faces = faces, !faces.isEmpty else { return }
for face in faces {
// check for the presence of a left eye
if let leftEye = face.landmark(ofType: .leftEye) {
// TODO: put a monocle over the eye [monocle emoji]
print(leftEye.position.x) // the x coordinate
print(leftEye.position.y) // the y coordinate
}
}
}
ML Kit で開発したアプリに期待
今回の新機能が、皆さんのビジュアルなアプリにスマートな機能を簡単に組み込む際に役立つことを期待しています。ML Kit による顔検出の詳細は、iOSまたは Android向けのドキュメントに記載されています。ぜひ活用してみてください。Reviewed by Khanh LeViet - Developer Relations Team