Face Detection は、デジタル画像や動画ストリームから人間の顔を見つけて位置を特定するコンピュータビジョン技術です。Face Recognition(個人識別)とは異なり、Face Detectionは顔の存在とその境界(バウンディングボックス、キーポイント(目、鼻、口))のみを判定します。モバイル開発において、Face DetectionはML Kit、ARKit、Vision Framework、OpenCVで使用されています。Google ML Kit、2025によると、最新デバイスでは98%の精度で顔検出が5~15ミリ秒で実行されます。
重要なポイント
Face Detection は、画像内の人間の顔の有無と位置を検出するコンピュータビジョンのタスクです。アルゴリズムは、バウンディングボックス(顔の周りの矩形)と信頼度スコア(顔である確率)を返します。最新のアルゴリズムは、facial landmarks — 主要ポイント(目、眉毛、鼻、口、顔の輪郭)も返します。Face Detectionは、個人認識、ARフィルター、注意分析など、多くのMLタスクの第一歩です。
アルゴリズムの歴史はViola-Jones(2001)から始まりました — CPU上でのHaar-like特徴量のカスケードです。2010年代にはHOG + SVM(Histogram of Oriented Gradients)が主流でした。2016年以降、最新のアルゴリズムはすべて畳み込みニューラルネットワーク(CNN)ベースです:MTCNN、RetinaFace、SSH、MobileNet-SSD、YOLO-Face。GPU上のCNNアルゴリズムは95~99%の精度を提供し、古典的手法の85~90%を上回ります。WiderFaceベンチマーク(2025)によると、RetinaFaceは最も難しいサブセットで96.3%のmAPを達成しています。
MTCNN(Multi-Task Cascaded CNN)は、古典的な3段階検出器です:P-Net(Proposal Network)が候補を見つけ、R-Net(Refine Network)がフィルタリングし、O-Net(Output Network)がバウンディングボックスを精密化してランドマークを出力します。MTCNNは640x480解像度でCPU上、1フレームあたり30~50ミリ秒で動作します。モバイルデバイスでは、MTCNNはGPUなしで速度と精度の最適なバランスを提供します。
| アルゴリズム | 精度(WiderFace) | 速度(640x480) | プラットフォーム |
|---|---|---|---|
| RetinaFace | 96.3% | 15ミリ秒(GPU) | Android、iOS |
| MTCNN | 91.2% | 30~50ミリ秒(CPU) | クロスプラットフォーム |
| ML Kit | 98.0% | 5~15ミリ秒(GPU/NPU) | Android、iOS |
| OpenCV Haar | 82.5% | 5~10ミリ秒(CPU) | クロスプラットフォーム |
リアルタイムFace Detectionには30+ FPSが必要です。これは、NPU(Neural Processing Unit)— Qualcomm Hexagon、Apple Neural Engine、MediaTek APUのおかげで最新スマートフォンで実現可能です。NPUは50~100mWの消費電力で2~5ミリ秒の検出を実行する一方、GPUは500~2000mWを消費します。常時オン検出(カメラ常時稼働)には、デバイスの過熱を防ぐためNPUが唯一の実用的な選択肢です。
ML Kit Face Detectionは、モバイルデバイスでの顔検出に最も人気のあるSDKです。ML Kitは2つのモードを提供します:輪郭モード(正確なマスクオーバーレイのための468の顔輪郭ポイント)と分類モード(感情検出:笑顔、開眼、口開放)。モードはFaceDetectorOptionsで組み合わせます。ML KitはNNAPI/GPU Delegateによる最適化を施したGoogleのMobileNetV2-SSDニューラルネットワークを使用します。
ML Kit Face Detectionの設定:setPerformanceMode(FACE_DETECTION_FAST / ACCURATE)、setLandmarkMode(主要ポイント)、setContourMode(輪郭ポイント)、setClassificationMode(感情)。最大速度にはFAST + LANDMARKS_ONLY + 輪郭なしを使用します。ARフィルターには — ACCURATE + ALL_CONTOURS。Google(2025)によると、FASTモードは5ミリ秒で98%の精度、ACCURATEは15ミリ秒で99%の精度を提供します。
// ML Kit Face Detection with contours
val options = FaceDetectorOptions.Builder()
.setContourMode(FaceDetectorOptions.ContourMode.ALL)
.setClassificationMode(FaceDetectorOptions.ClassificationMode.ALL)
.setPerformanceMode(FaceDetectorOptions.PerformanceMode.FAST)
.enableTracking()
.build()
val detector = FaceDetection.getClient(options)
detector.process(inputImage)
.addOnSuccessListener { faces ->
faces.forEach { face ->
val trackingId = face.trackingId
val smile = face.smilingProbability
val leftEyeOpen = face.leftEyeOpenProbability
}
}
ML KitのFace Tracking — 動画ストリーム向けのユニークな機能です。検出された各顔には、フレーム間で保持されるトラッキングID(整数)が割り当てられます。これにより、再検出することなく特定の顔にARオブジェクトを関連付けることができます。トラッカーはOptical Flowを使用し、顔が部分的に遮蔽されてもIDを保持します。顔が1秒以上フレームから外れると、トラッキングIDはリセットされます。
Apple Vision Frameworkは、Apple Neural Engine上のCore MLを介して動作する、iOSネイティブのFace Detectionフレームワークです。Visionは、VNDetectFaceRectanglesRequest(バウンディングボックスのみ)とVNDetectFaceLandmarksRequest(輪郭ポイント付き)を提供します。Vision FrameworkはiOS 11からiOSに組み込まれており、追加のSDKは不要です — Foundationの一部です。
Vision Frameworkの利点:サードパーティライブラリへの依存ゼロ、A12+チップでApple Neural Engine(ANE)を介して動作、exifOrientationによる自動画像方向処理、速度/精度調整のためのCIDetectorAccuracyサポート。Visionは、バウンディングボックス(正規化座標0..1)とランドマーク(VNFaceLandmarkRegion2D)を含むVNFaceObservationを返します。
iOSにおけるVision vs ML Kit:VisionはネイティブのAppleニューラルエンジンを使用するため、古いデバイス(A12~A15)で高速です。ML KitはGoogleのモデルを使用し、複雑な角度(横顔、強い傾き)でより正確になる可能性があります。単純な検出(カメラ、写真)には — Visionを。ARフィルターや輪郭マスクには — ML Kit(Visionの76ポイントに対し468ポイント)を。
import Vision
let request = VNDetectFaceRectanglesRequest { request, error in
guard let observations = request.results as? [VNFaceObservation] else { return }
for face in observations {
let rect = face.boundingBox // normalized 0..1
let confidence = face.confidence
}
}
let handler = VNImageRequestHandler(
cgImage: cgImage, orientation: .up, options: [:]
)
try handler.perform([request])
VNDetectFaceLandmarksRequestは、主要ポイント向けの拡張バージョンです。各ポイントグループ(leftEye、rightEye、nose、faceContour、innerLips、outerLips)に対してVNFaceLandmarkRegion2Dを返します。各グループはCGPoint(正規化済み)の配列です。VisionはML Kitのように468ポイントを返しません — 76の主要ポイントのみです。正確な顔マスクにはML Kitが適しており、基本的な検出にはVisionで十分です。
OpenCV Haar Cascadeは、Haar-like特徴量のカスケード(Viola-Jones、2001)に基づく古典的なFace Detectionアルゴリズムです。古いながらも、Haar Cascadeは現在でもリソース制約のあるプロジェクト(Raspberry Pi、IoTデバイス、組み込みシステム)で使用されています。このアルゴリズムはGPUやNPUを必要としません — VGA解像度のフレームを任意のCPUで5~15ミリ秒で処理します。
LBP Cascade(Local Binary Patterns)は、OpenCVにおけるHaar Cascadeの代替です。LBPはより高速(2~5ミリ秒)で照明の影響を受けにくい反面、偽陽性が多くなります。Haarはより正確(LBPの80~85%に対し85~90%)ですが、ぎらつきや影に敏感です。モバイルアプリでは、OpenCV Face Detectionはニューラルネットワーク手法に精度で劣りますが、互換性で勝ります — あらゆるデバイスで動作します。
// OpenCV Face Detection via CascadeClassifier
val cascadeFile = File(context.filesDir, "haarcascade_frontalface_default.xml")
val faceDetector = CascadeClassifier(cascadeFile.absolutePath)
val gray = Mat()
Imgproc.cvtColor(colorFrame, gray, Imgproc.COLOR_RGBA2GRAY)
val faces = MatOfRect()
faceDetector.detectMultiScale(gray, faces)
faces.toList().forEach { rect ->
// rect = face bounding box
}
OpenCVの制限:高い偽陽性率(最大15%)、横向きの角度でのパフォーマンス低下(30°超で精度が50%に低下)、追加モデルなしではランドマークなし、フレーム間のトラッキングなし。最新のモバイルアプリでは、OpenCV Face DetectionはGoogle Play Servicesのないデバイス(Huawei、Amazon Fire)向けのフォールバックとして機能します。主要なシナリオでは — ML KitまたはVisionを使用してください。
Face Detection — 画像内の顔の有無と位置の判定。結果:バウンディングボックスと主要ポイント。Face Recognition — 顔による個人の識別:この顔が特定の個人のものであると判定。Face Recognitionは埋め込みベクトル(顔を表す数値ベクトル)を使用し、既知の顔のデータベースと比較します。Face RecognitionにはFace Detectionが必須の第一歩です。
Face Recognition技術:FaceNet(Google、2015) — 128~512のfloat値の埋め込みを学習するためのトリプレット損失、ArcFace(2019) — 加法角度マージン損失、最高精度(LFWで99.83%)。モバイルアプリでは、Face RecognitionにはカスタムTFLiteモデルが必要です — ML Kitは個人識別のための既製APIを提供していません(検出のみ)。
モバイルデバイスでのプライバシー:Face Detectionは安全です — ユーザーデータを保存しません。Face Recognitionは比較のために埋め込みや写真の保存を必要とします。AppleはFace Recognitionに明示的なユーザー同意を要求し、広告への使用を禁止しています。Google ML Kitはプライバシーリスクを避けるため、意図的にFace Recognitionを含めていません。識別を伴わない検出には — 制限はありません。
| 特性 | Face Detection | Face Recognition |
|---|---|---|
| 結果 | 写真の中の顔の位置 | 顔が誰のものか |
| アルゴリズム | MTCNN、RetinaFace、ML Kit | FaceNet、ArcFace、DeepFace |
| ストレージ | 不要 | 埋め込みデータベース |
| プライバシー | 低リスク | GDPR、CCPAの制限 |
Face Liveness Detection — 顔が本物(写真や動画でない)ことを確認する追加チェック。目の動き分析(瞬き検出)、微表情、深度マップ(3Dカメラ)を使用します。Liveness Detectionは銀行・決済アプリケーションに必須です。ML Kitには組み込みのlivenessはありません — 検証にはカスタムモデルまたはGoogle Play Integrity APIを使用してください。
ARフィルターとマスク — Face Detectionの最も人気のある用途です。顔の輪郭ポイント(468ポイント)に基づいて、3Dマスク、帽子、メガネ、口ひげがオーバーレイされます。ML Kit Face Detection + SceneKit(iOS)またはFilament(Android)でリアルタイムAR体験を創出します。SnapchatやInstagramは、MobileNet + MTCNNベースの独自検出器を使用しています。カスタムARフィルターには、ML Kitと3Dエンジンで十分です。
フォトエディターとレタッチ — Face Detectionは自動補正のために顔領域を特定します:肌色調整、欠陥除去、目と歯の強調。OpenCV + ML Kit Face Detectionは、選択的ガウシアンブラー(肌の平滑化)と目のコントラストのための座標を提供します。実際のアプリケーション — Facetune、BeautyPlus、YouCam Makeup。
注意監視 — 視線方向の判定(gaze detection)。Face Detectionはバウンディングボックスと目のランドマークを返します。目に対する瞳孔の位置から、ユーザーがどこを見ているか(画面、左、右、上)を判定します。Eラーニング(学生が講義を見ているかの監視)、広告(注意メトリクス)、ドライバーアシスト(疲労監視)で使用されます。
// ARKit + Vision for AR filter
let faceLandmarksRequest = VNDetectFaceLandmarksRequest { req, _ in
guard let face = req.results?.first as? VNFaceObservation else { return }
if let leftEye = face.landmarks?.leftEye {
// AR object overlay on left eye
}
}
let handler = VNSequenceRequestHandler()
for pixelBuffer in videoStream {
try handler.perform([faceLandmarksRequest], on: pixelBuffer)
}
医療とウェルネス — Face Detectionは、顔の非対称性分析(神経疾患の診断)、皮膚の微細振動による脈拍推定(カメラによる光電容積脈波記録)、肌の水分量測定に使用されます。ML Kit Face Detection + OpenCVは、医療認証なしの予備スクリーニングに十分な精度を提供します。本番医療にはFDA/CE認証が必要です。
よくある質問
Face Detection — 画像内の顔を見つけてその境界(矩形座標)を返します。Face Recognition — 既知の顔のデータベースと比較して、その顔が誰のものかを特定します。検出は認識の第一歩です。ML KitとVision FrameworkはFace Detectionのみを提供します。認識には、デバイス上のカスタムTFLiteモデル(FaceNet、ArcFace)+ 埋め込みデータベースが必要です。
ML Kit Face Detectionは、NNAPI/GPU Delegateのおかげで最新デバイスで最速です(1フレームあたり5~15ミリ秒)。Apple Vision FrameworkはiOS(A12+、ANE経由)でより高速 — 3~10ミリ秒。OpenCV Haar Cascade — CPUで5~10ミリ秒ですが、精度は低め(ML Kitの98%に対し82%)。NPU搭載デバイス(Snapdragon 8 Gen 3、Apple A17 Pro)では、ML KitとVisionは2~5ミリ秒で検出を実行します。
ML KitとVision Frameworkは、メガネ(濃いものを含む)や医療用マスクでも正常に機能します。マスク着用時の検出精度は98%から90~92%に低下しますが、顔は上半分(目、眉毛、額)から検出されます。輪郭ポイント(顔の輪郭)の精度は低下します — マスクの場合は、輪郭なしで分類モード(笑顔、開眼)のみを使用してください。
はい、リアルタイムFace Detectionはすべての最新SDKでサポートされています。ML Kit — CameraX Analyzer経由で480pで最大60 FPS。Apple Vision — AVFoundation経由でiOSで最大30 FPS。リアルタイムではFASTパフォーマンスモードを使用し、解像度を480pに下げ、各フレームを再検出せずにフレーム間でIDを保持するためにface tracking(ML Kit)を有効にしてください。
いいえ、最新のモバイルFace Detection SDKはすべて完全にオンデバイスで動作します。ML Kitは初回起動時にGoogle Play Servicesを介してモデルをダウンロードし(ダウンロードモードが選択されている場合)、その後はオフラインで動作します。Apple Vision Framework — iOSに組み込まれており、インターネット不要。OpenCV — 完全オフライン。クラウドAPI(Google Cloud Vision、AWS Rekognition)にはインターネットが必要ですが、モバイルアプリのリアルタイム検出には使用されません。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。