Face Detection در برنامه‌ها: چیست، روش‌ها و کتابخانه‌ها

نویسنده: IT Sectr منتشر شده: 2026-07-18 زمان مطالعه: 10 دقیقه

Face Detection — فناوری بینایی کامپیوتر برای یافتن و مکان‌یابی چهره‌های انسان در تصاویر دیجیتال و جریان ویدئو است. برخلاف Face Recognition (تشخیص هویت)، Face Detection تنها وجود چهره و مرزهای آن را تعیین می‌کند — bounding box و keypoints (چشم‌ها، بینی، دهان). در توسعه موبایل از Face Detection در ML Kit، ARKit، Vision Framework و OpenCV استفاده می‌شود. طبق داده‌های Google ML Kit, 2025، تشخیص چهره در 5–15 میلی‌ثانیه روی دستگاه‌های مدرن با دقت 98% انجام می‌شود.

مهمترین

  • Face Detection — یافتن چهره‌ها در تصویر، نه شناسایی هویت
  • Bounding box — مستطیل دور چهره با مختصات x, y, w, h
  • Keypoints — نقاط کلیدی چهره: چشم‌ها، بینی، دهان، گوش‌ها (468 نقطه در ML Kit)
  • On-device — تشخیص به صورت محلی روی دستگاه بدون سرور انجام می‌شود
  • Real-time — 30+ FPS روی گوشی‌های هوشمند مدرن برای HD-ویدئو

Face Detection چیست: اصول و الگوریتم‌ها

Face Detection — وظیفه بینایی کامپیوتر برای تعیین وجود و موقعیت چهره‌های انسان در تصویر است. الگوریتم bounding box (مستطیل دور چهره) و confidence score (احتمال اینکه چهره باشد) را برمی‌گرداند. الگوریتم‌های مدرن همچنین facial landmarks — نقاط کلیدی (چشم‌ها، ابروها، بینی، دهان، کانتور چهره) را برمی‌گردانند. Face Detection اولین مرحله برای بسیاری از وظایف ML است: تشخیص هویت، فیلترهای AR، تحلیل توجه.

تاریخچه الگوریتم‌ها با Viola-Jones (2001) — آبشار ویژگی‌های Haar-like روی CPU آغاز شد. در دهه 2010، HOG + SVM (Histogram of Oriented Gradients) غالب بودند. از سال 2016، تمام الگوریتم‌های مدرن مبتنی بر شبکه‌های عصبی پیچشی (CNN) هستند: MTCNN، RetinaFace، SSH، MobileNet-SSD، YOLO-Face. الگوریتم‌های CNN روی GPU 95–99% دقت در مقابل 85–90% روش‌های کلاسیک ارائه می‌دهند. طبق بنچمارک WiderFace (2025)، RetinaFace روی سخت‌ترین زیرمجموعه mAP 96.3% را نشان می‌دهد.

MTCNN (Multi-Task Cascaded CNN) — یک آشکارساز کلاسیک سه مرحله‌ای: P-Net (Proposal Network) کاندیداها را پیدا می‌کند، R-Net (Refine Network) فیلتر می‌کند، O-Net (Output Network) bounding box را دقیق می‌کند و landmarks را خروجی می‌دهد. MTCNN روی CPU با سرعت 30–50 میلی‌ثانیه در هر فریم در رزولوشن 640x480 کار می‌کند. برای دستگاه‌های موبایل، MTCNN تعادل بهینه سرعت و دقت بدون GPU است.

الگوریتمدقت (WiderFace)سرعت (640x480)پلتفرم
RetinaFace96.3%15 ms (GPU)Android, iOS
MTCNN91.2%30–50 ms (CPU)چندپلتفرمی
ML Kit98.0%5–15 ms (GPU/NPU)Android, iOS
OpenCV Haar82.5%5–10 ms (CPU)چندپلتفرمی

Real-time Face Detection برای ویدئو به 30+ FPS نیاز دارد. این روی گوشی‌های هوشمند مدرن به لطف NPU (Neural Processing Unit) — Qualcomm Hexagon، Apple Neural Engine، MediaTek APU قابل دستیابی است. NPU تشخیص را در 2–5 میلی‌ثانیه با مصرف انرژی 50–100 میلی‌وات انجام می‌دهد، در حالی که GPU 500–2000 میلی‌وات مصرف می‌کند. برای تشخیص مداوم (دوربین همیشه روشن) NPU بدون داغ شدن دستگاه تنها گزینه عملی است.

ML Kit Face Detection در Android و iOS

ML Kit Face Detection — محبوب‌ترین SDK برای تشخیص چهره در دستگاه‌های موبایل است. ML Kit دو حالت ارائه می‌دهد: contour mode (468 نقطه کانتور چهره برای اعمال دقیق ماسک) و classification mode (تعیین احساسات: لبخند، چشم‌های باز، دهان باز). حالت‌ها در FaceDetectorOptions ترکیب می‌شوند. ML Kit از شبکه عصبی Google MobileNetV2-SSD با بهینه‌سازی از طریق NNAPI/GPU Delegate استفاده می‌کند.

تنظیم ML Kit Face Detection: setPerformanceMode(FACE_DETECTION_FAST / ACCURATE)، setLandmarkMode (نقاط کلیدی)، setContourMode (نقاط کانتور)، setClassificationMode (احساسات). برای حداکثر سرعت از FAST + LANDMARKS_ONLY + بدون کانتور استفاده کنید. برای فیلترهای AR — ACCURATE + ALL_CONTOURS. طبق Google (2025)، حالت FAST 98% دقت در 5 میلی‌ثانیه می‌دهد، ACCURATE — 99% در 15 میلی‌ثانیه.

kotlin
// تشخیص چهره ML Kit با کانتور
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
        }
    }

Face Tracking در ML Kit — ویژگی منحصر به فرد برای جریان ویدئو. به هر چهره شناسایی شده یک tracking ID (عدد صحیح) اختصاص داده می‌شود که بین فریم‌ها باقی می‌ماند. این امکان را می‌دهد که اشیاء AR را بدون تشخیص مجدد به یک چهره خاص متصل کنید. ردیاب از Optical Flow استفاده می‌کند و ID را حتی در صورت پوشیده شدن جزئی چهره حفظ می‌کند. Tracking ID زمانی بازنشانی می‌شود که چهره بیش از 1 ثانیه از کادر خارج شود.

Apple Vision Framework: VNDetectFaceRectanglesRequest

Apple Vision Framework — فریمورک بومی iOS برای Face Detection که از طریق Core ML روی Apple Neural Engine کار می‌کند. Vision شامل VNDetectFaceRectanglesRequest (فقط bounding box) و VNDetectFaceLandmarksRequest (با نقاط کانتور) است. Vision Framework از iOS 11 در iOS تعبیه شده است و به SDK اضافی نیاز ندارد — بخشی از Foundation است.

مزایای Vision Framework: وابستگی صفر به کتابخانه‌های شخص ثالث، کار از طریق Apple Neural Engine (ANE) روی تراشه‌های A12+، پردازش خودکار جهت تصویر از طریق exifOrientation، پشتیبانی از CIDetectorAccuracy برای تنظیم سرعت/دقت. Vision شامل VNFaceObservation با bounding box (مختصات نرمال شده 0..1) و landmarks (VNFaceLandmarkRegion2D) است.

Vision vs ML Kit در iOS: Vision در دستگاه‌های قدیمی‌تر (A12–A15) سریع‌تر است، زیرا از موتورهای عصبی بومی اپل استفاده می‌کند. ML Kit از مدل‌های Google استفاده می‌کند و ممکن است در زوایای دشوار (نیمرخ، شیب زیاد) دقیق‌تر باشد. برای تشخیص ساده (دوربین، عکس) — Vision. برای فیلترهای AR و ماسک‌های کانتور — ML Kit (468 نقطه در مقابل 76 نقطه در Vision).

swift
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 // نرمال شده 0..1
        let confidence = face.confidence
    }
}

let handler = VNImageRequestHandler(
    cgImage: cgImage, orientation: .up, options: [:]
)
try handler.perform([request])

VNDetectFaceLandmarksRequest — نسخه توسعه یافته برای نقاط کلیدی. برای هر گروه از نقاط VNFaceLandmarkRegion2D برمی‌گرداند: leftEye، rightEye، nose، faceContour، innerLips، outerLips. هر گروه آرایه‌ای از CGPoint (نرمال شده) است. Vision مانند ML Kit 468 نقطه برنمی‌گرداند — فقط 76 نقطه کلیدی. برای ماسک دقیق چهره ML Kit بهتر است، برای پایه‌ای — Vision.

OpenCV Haar Cascade: رویکرد کلاسیک

OpenCV Haar Cascade — الگوریتم کلاسیک Face Detection مبتنی بر آبشار ویژگی‌های Haar-like (Viola-Jones, 2001). با وجود قدمت، Haar Cascade هنوز در پروژه‌های با منابع محدود استفاده می‌شود: Raspberry Pi، دستگاه‌های IoT، سیستم‌های تعبیه‌شده. الگوریتم به GPU یا NPU نیاز ندارد — روی هر CPU با سرعت 5–15 میلی‌ثانیه در هر فریم در رزولوشن VGA کار می‌کند.

LBP Cascade (Local Binary Patterns) — جایگزین Haar Cascade در OpenCV. LBP سریع‌تر (2–5 میلی‌ثانیه) و کمتر به نور حساس است، اما نتایج مثبت کاذب بیشتری می‌دهد. Haar دقیق‌تر است (85–90% در مقابل 80–85% برای LBP)، اما به تابش نور و سایه‌ها حساس است. برای برنامه‌های موبایل، OpenCV Face Detection از نظر دقت از روش‌های شبکه عصبی عقب‌تر است، اما از نظر سازگاری برنده است — روی هر دستگاهی کار می‌کند.

kotlin
// تشخیص چهره OpenCV از طریق 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 = bounding box چهره
}

معایب OpenCV: نرخ بالای مثبت کاذب (تا 15%)، عملکرد ضعیف با زوایای نیمرخ (>30° — افت دقت تا 50%)، عدم وجود landmarks بدون مدل اضافی، عدم ردیابی بین فریم‌ها. برای برنامه‌های موبایل مدرن، OpenCV Face Detection یک fallback برای دستگاه‌های بدون Google Play Services (Huawei، Amazon Fire) است. برای سناریوهای اصلی — ML Kit یا Vision.

Face Detection vs Face Recognition: تفاوت

Face Detection — تعیین وجود و موقعیت چهره در تصویر. نتیجه: bounding box و نقاط کلیدی. Face Recognition — شناسایی هویت فرد از روی چهره: تعیین اینکه این چهره متعلق به چه کسی است. Face Recognition از embeddingها (بردار اعدادی که چهره را نشان می‌دهد) استفاده می‌کند و آنها را با پایگاه داده چهره‌های شناخته شده مقایسه می‌کند. Face Detection مرحله اول اجباری برای Face Recognition است.

فناوری‌های Face Recognition: FaceNet (Google, 2015) — triplet loss برای یادگیری embeddingها با اندازه 128–512 مقدار float، ArcFace (2019) — additive angular margin loss، بهترین دقت (99.83% روی LFW). برای برنامه‌های موبایل، Face Recognition به یک مدل TFLite سفارشی نیاز دارد — ML Kit API آماده برای شناسایی هویت ارائه نمی‌دهد (فقط تشخیص).

حریم خصوصی در دستگاه‌های موبایل: Face Detection ایمن است — داده‌ای درباره کاربر ذخیره نمی‌کند. Face Recognition نیاز به ذخیره embeddingها یا عکس‌ها برای مقایسه دارد. Apple به رضایت صریح کاربر برای Face Recognition نیاز دارد و استفاده از آن را برای تبلیغات ممنوع می‌کند. Google ML Kit عمداً Face Recognition را شامل نمی‌شود تا از خطرات حریم خصوصی جلوگیری کند. برای تشخیص بدون شناسایی — هیچ محدودیتی وجود ندارد.

ویژگیFace DetectionFace Recognition
نتیجهچهره در عکس کجاستچهره متعلق به کیست
الگوریتم‌هاMTCNN, RetinaFace, ML KitFaceNet, ArcFace, DeepFace
ذخیره‌سازینیاز نداردپایگاه embeddingها
حریم خصوصیریسک پایینمحدودیت‌های GDPR, CCPA

Face Liveness Detection — بررسی اضافی که چهره واقعی است (نه عکس/ویدئو). از تحلیل حرکت چشم (blink detection)، میکرو-میمیک، نقشه عمق (دوربین 3D) استفاده می‌کند. Liveness Detection برای برنامه‌های بانکی و پرداخت الزامی است. ML Kit قابلیت liveness داخلی ندارد — از مدل سفارشی یا Google Play Integrity API برای بررسی استفاده کنید.

کاربرد Face Detection در برنامه‌های موبایل

فیلترهای 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 مختصاتی برای Selective Gaussian Blur (صاف کردن پوست) و کنتراست چشم فراهم می‌کند. کاربرد واقعی — برنامه‌های Facetune، BeautyPlus، YouCam Makeup.

کنترل توجه — تعیین جهت نگاه (gaze detection). Face Detection bounding box و landmarks چشم را برمی‌گرداند. بر اساس موقعیت مردمک نسبت به چشم مشخص می‌شود که کاربر به کجا نگاه می‌کند: به صفحه، چپ، راست، بالا. در e-learning (کنترل اینکه دانشجو به سخنرانی نگاه می‌کند)، تبلیغات (متریک‌های توجه)، دستیاران راننده (کنترل خستگی) کاربرد دارد.

swift
// ARKit + Vision برای فیلتر AR
let faceLandmarksRequest = VNDetectFaceLandmarksRequest { req, _ in
    guard let face = req.results?.first as? VNFaceObservation else { return }
    if let leftEye = face.landmarks?.leftEye {
        // پوشش شیء AR روی چشم چپ
    }
}

let handler = VNSequenceRequestHandler()
for pixelBuffer in videoStream {
    try handler.perform([faceLandmarksRequest], on: pixelBuffer)
}

پزشکی و wellness — Face Detection برای تحلیل عدم تقارن چهره (تشخیص اختلالات عصبی)، ارزیابی نبض از طریق میکروویبره‌های پوست (فتوپلتیسموگرافی از طریق دوربین)، تعیین رطوبت پوست استفاده می‌شود. ML Kit Face Detection + OpenCV دقت کافی برای غربالگری اولیه بدون گواهی پزشکی فراهم می‌کند. برای پزشکی تولیدی گواهی FDA/CE الزامی است.

سوالات متداول

تفاوت بین Face Detection و Face Recognition چیست؟

Face Detection — چهره را در تصویر پیدا می‌کند و مرزهای آن را (مختصات مستطیل) برمی‌گرداند. Face Recognition — تعیین می‌کند این چهره متعلق به کیست و با پایگاه داده چهره‌های شناخته شده مقایسه می‌کند. تشخیص اولین قدم برای شناسایی است. ML Kit و Vision Framework فقط Face Detection ارائه می‌دهند. برای شناسایی به یک مدل TFLite سفارشی (FaceNet, ArcFace) + پایگاه embeddingها روی دستگاه نیاز است.

کدام Face Detection SDK در دستگاه‌های موبایل سریع‌ترین است؟

ML Kit Face Detection — سریع‌ترین در دستگاه‌های مدرن (5–15 میلی‌ثانیه در هر فریم) به لطف NNAPI/GPU Delegate. Apple Vision Framework — سریع‌تر در iOS (A12+ از طریق ANE) — 3–10 میلی‌ثانیه. OpenCV Haar Cascade — 5–10 میلی‌ثانیه روی CPU، اما دقت پایین‌تر (82% در مقابل 98% در ML Kit). در دستگاه‌های دارای NPU (Snapdragon 8 Gen 3, Apple A17 Pro) ML Kit و Vision تشخیص را در 2–5 میلی‌ثانیه انجام می‌دهند.

آیا Face Detection با عینک تیره یا ماسک کار می‌کند؟

ML Kit و Vision Framework با عینک (از جمله تیره) و ماسک پزشکی به درستی کار می‌کنند. دقت تشخیص با ماسک از 98% به 90–92% کاهش می‌یابد، اما چهره همچنان از قسمت بالایی (چشم‌ها، ابروها، پیشانی) تشخیص داده می‌شود. نقاط کانتور (کانتور چهره) کمتر دقیق می‌شوند — برای ماسک‌ها فقط از classification mode (لبخند، چشم‌های باز) بدون کانتور استفاده کنید.

آیا می‌توان از Face Detection در زمان واقعی استفاده کرد؟

بله، Face Detection در زمان واقعی توسط تمام SDKهای مدرن پشتیبانی می‌شود. ML Kit — تا 60 FPS در فریم 480p از طریق CameraX Analyzer. Apple Vision — تا 30 FPS در iOS از طریق AVFoundation. برای real-time از حالت FAST performance استفاده کنید، رزولوشن را به 480p کاهش دهید و face tracking (ML Kit) را برای حفظ ID بین فریم‌ها بدون تشخیص مجدد هر فریم فعال کنید.

آیا برای Face Detection روی دستگاه اینترنت نیاز است؟

خیر، تمام SDKهای مدرن موبایل Face Detection کاملاً روی دستگاه کار می‌کنند. ML Kit مدل را از طریق Google Play Services در اولین راه‌اندازی دانلود می‌کند (اگر حالت دانلودی انتخاب شده باشد)، پس از آن به صورت آفلاین کار می‌کند. Apple Vision Framework — در iOS تعبیه شده، به اینترنت نیاز ندارد. OpenCV — کاملاً آفلاین. برای APIهای ابری (Google Cloud Vision, AWS Rekognition) اینترنت نیاز است، اما آنها در برنامه‌های موبایل برای real-time استفاده نمی‌شوند.

خلاصه

  • Face Detection — جستجوی چهره‌ها در تصویر: bounding box و نقاط کلیدی
  • ML Kit — 5–15 ms، 98% دقت، 468 نقطه کانتور، tracking ID
  • Apple Vision — بومی iOS، از طریق ANE، 3–10 ms، 76 landmark
  • OpenCV Haar — روش کلاسیک، CPU، 82% دقت، fallback برای دستگاه‌های قدیمی
  • Face Detection ≠ Face Recognition — تشخیص هویت را شناسایی نمی‌کند
  • Real-time — تا 60 FPS روی دستگاه‌های مدرن از طریق NPU
  • کاربرد — فیلترهای AR، روتوش، کنترل توجه، پزشکی

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید