Python के लिए फ़ेस डिटेक्शन गाइड

MediaPipe Face Detector टास्क की मदद से, किसी इमेज या वीडियो में चेहरों की पहचान की जा सकती है. Google Analytics 4 पर माइग्रेट करने के लिए, इस टास्क की मदद से, फ़्रेम में चेहरों और चेहरों की पहचान की जा सकती है. यह टास्क, मशीन लर्निंग (एमएल) मॉडल, जो किसी एक इमेज या में से उसी को चुनने के लिए कहें. टास्क के बाद, चेहरे की जगह की जानकारी के साथ-साथ ये जानकारी भी मिलती है चेहरे के मुख्य पॉइंट: बाईं आंख, दाईं आंख, नाक का सिरा, मुंह, बाईं आंख का नुकसान, और दाईं आंख से जुड़ी समस्या.

इन निर्देशों में बताया गया कोड सैंपल यहां उपलब्ध है GitHub. क्षमताओं, मॉडल, और कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानकारी पाने के लिए इस टास्क की खास जानकारी देखें.

कोड का उदाहरण

उदाहरण के तौर पर दिया गया फ़ेस डिटेक्टर कोड, इसे पूरी तरह लागू करता है Python में आज़माएं. यह कोड, इस टास्क की जांच करने और यह पाने में आपकी मदद करता है अपना फ़ेस डिटेक्टर बनाने पर काम शुरू कर दिया है. आपके पास रिपोर्ट को देखने, चलाने, और को संपादित करें चेहरे की पहचान करने वाले टूल का उदाहरण कोड बस अपने वेब ब्राउज़र का इस्तेमाल करके.

अगर आप Raspberry Pi के लिए फ़ेस डिटेक्टर इस्तेमाल कर रहे हैं, तो यह देखें Raspberry Pi का उदाहरण ऐप्लिकेशन है.

सेटअप

इस सेक्शन में, आपके डेवलपमेंट एनवायरमेंट को सेट अप करने और कोड प्रोजेक्ट को ख़ास तौर पर फ़ेस डिटेक्टर के तौर पर इस्तेमाल करने के लिए कोड प्रोजेक्ट करते हैं. इस पर सामान्य जानकारी के लिए MediaPipe के टास्क इस्तेमाल करने के लिए डेवलपमेंट एनवायरमेंट सेट अप करना. इसमें ये भी शामिल हैं प्लैटफ़ॉर्म वर्शन की ज़रूरी शर्तें पूरी करते हैं. इसके बारे में ज़्यादा जानने के लिए, Python के लिए सेटअप गाइड.

पैकेज

MediaPipe Face Detector टास्क के लिए, Mediapil PyPI पैकेज की ज़रूरत होती है. इन डिपेंडेंसी को इंस्टॉल और इंपोर्ट करने के लिए, इनका इस्तेमाल किया जा सकता है:

$ python -m pip install mediapipe

आयात

फ़ेस डिटेक्टर के टास्क फ़ंक्शन ऐक्सेस करने के लिए, नीचे दी गई क्लास इंपोर्ट करें:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

मॉडल

MediaPipe Face Detector टास्क के लिए, एक प्रशिक्षित मॉडल की ज़रूरत होती है, जो इस सुविधा के साथ काम कर सके टास्क. फ़ेस डिटेक्टर के लिए उपलब्ध ट्रेन किए गए मॉडल के बारे में ज़्यादा जानकारी के लिए, देखें टास्क की खास जानकारी मॉडल सेक्शन.

मॉडल को चुनें और डाउनलोड करें, और फिर उसे लोकल डायरेक्ट्री में स्टोर करें:

model_path = '/absolute/path/to/face_detector.task'

पाथ की जानकारी देने के लिए, BaseOptions ऑब्जेक्ट model_asset_path पैरामीटर का इस्तेमाल करें इस्तेमाल करना है. कोड के उदाहरण के लिए, अगला सेक्शन देखें.

टास्क बनाएं

MediaPipe फ़ेस डिटेक्टर टास्क, create_from_options फ़ंक्शन का इस्तेमाल इन कामों के लिए करता है टास्क सेट अप करना. create_from_options फ़ंक्शन में वैल्यू डाली जा सकती हैं . कॉन्फ़िगरेशन के बारे में ज़्यादा जानकारी पाने के लिए विकल्पों के लिए, कॉन्फ़िगरेशन के विकल्प देखें.

नीचे दिया गया कोड इस टास्क को बनाने और कॉन्फ़िगर करने का तरीका बताता है.

ये सैंपल, इमेज के लिए अलग-अलग तरह के टास्क बनाते हैं, और लाइव स्ट्रीम.

इमेज

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
FaceDetector = mp.tasks.vision.FaceDetector
FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a face detector instance with the image mode:
options = FaceDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE)
with FaceDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

वीडियो

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
FaceDetector = mp.tasks.vision.FaceDetector
FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a face detector instance with the video mode:
options = FaceDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.VIDEO)
with FaceDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

लाइव स्ट्रीम

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
FaceDetector = mp.tasks.vision.FaceDetector
FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions
FaceDetectorResult = mp.tasks.vision.FaceDetectorResult
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a face detector instance with the live stream mode:
def print_result(result: FaceDetectorResult, output_image: mp.Image, timestamp_ms: int):
    print('face detector result: {}'.format(result))

options = FaceDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.LIVE_STREAM,
    result_callback=print_result)
with FaceDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

इमेज के साथ इस्तेमाल करने के लिए फ़ेस डिटेक्टर बनाने का पूरा उदाहरण देखने के लिए, यह देखें: कोड का उदाहरण.

कॉन्फ़िगरेशन विकल्प

इस टास्क में Python ऐप्लिकेशन के लिए, ये कॉन्फ़िगरेशन विकल्प मौजूद हैं:

विकल्प का नाम ब्यौरा मान की सीमा डिफ़ॉल्ट मान
running_mode टास्क के लिए रनिंग मोड सेट करता है. तीन मोड:

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इमेज: सिंगल इमेज इनपुट का मोड.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वीडियो: किसी वीडियो के डिकोड किए गए फ़्रेम के लिए मोड.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है LIVE_STREAM: इनपुट की लाइवस्ट्रीम करने का मोड जैसी निजी जानकारी को किसी भी समय रिकॉर्ड कर सकते हैं. इस मोड में, resultListener होना चाहिए नतीजे पाने के लिए, लिसनर सेट अप करने के लिए कॉल किया गया एसिंक्रोनस रूप से.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
min_detection_confidence चेहरे की पहचान के लिए, कम से कम कॉन्फ़िडेंस स्कोर को सफल माना जाता है. Float [0,1] 0.5
min_suppression_threshold चेहरे की पहचान के लिए, ओवरलैप हो सकने वाला कम से कम थ्रेशोल्ड. Float [0,1] 0.3
result_callback खोज के नतीजे पाने के लिए, रिज़ल्ट लिसनर को सेट करता है लाइव स्ट्रीम में फ़ेस डिटेक्टर की सुविधा चालू होने पर, एसिंक्रोनस तरीके से मोड. इसका इस्तेमाल सिर्फ़ तब किया जा सकता है, जब रनिंग मोड को LIVE_STREAM पर सेट किया गया हो. N/A Not set

डेटा तैयार करें

अपने इनपुट को इमेज फ़ाइल या नंपी अरे के तौर पर तैयार करें, फिर उसे mediapipe.Image ऑब्जेक्ट में बदलें. अगर आपका इनपुट एक वीडियो फ़ाइल है या वेबकैम से लाइव स्ट्रीम किया हो, तो बाहरी लाइब्रेरी का इस्तेमाल किया जा सकता है. जैसे, अपने इनपुट फ़्रेम को numpy के तौर पर लोड करने के लिए OpenCV कलेक्शन.

इमेज

import mediapipe as mp

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
    

वीडियो

import mediapipe as mp

# Use OpenCV’s VideoCapture to load the input video.

# Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS
# You’ll need it to calculate the timestamp for each frame.

# Loop through each frame in the video using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

लाइव स्ट्रीम

import mediapipe as mp

# Use OpenCV’s VideoCapture to start capturing from the webcam.

# Create a loop to read the latest frame from the camera using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

टास्क को पूरा करें

फ़ेस डिटेक्टर, detect, detect_for_video, और detect_async का इस्तेमाल करता है फ़ंक्शन का इस्तेमाल करता है. चेहरे की पहचान के लिए, यह सुविधा चालू करनी होगी इनपुट डेटा की प्री-प्रोसेसिंग और इमेज में चेहरों का पता लगाने की सुविधा.

नीचे दिया गया कोड, टास्क मॉडल की मदद से प्रोसेसिंग को एक्ज़ीक्यूट करने का तरीका बताता है.

इमेज

# Perform face detection on the provided single image.
# The face detector must be created with the image mode.
face_detector_result = detector.detect(mp_image)
    

वीडियो

# Perform face detection on the provided single image.
# The face detector must be created with the video mode.
face_detector_result = detector.detect_for_video(mp_image, frame_timestamp_ms)
    

लाइव स्ट्रीम

# Send live image data to perform face detection.
# The results are accessible via the `result_callback` provided in
# the `FaceDetectorOptions` object.
# The face detector must be created with the live stream mode.
detector.detect_async(mp_image, frame_timestamp_ms)
    

निम्न पर ध्यान दें:

  • वीडियो मोड या लाइव स्ट्रीम मोड में चलाते समय, फ़ेस डिटेक्टर टास्क को इनपुट फ़्रेम का टाइमस्टैंप दें.
  • इमेज या वीडियो मॉडल में चलाते समय, फ़ेस डिटेक्टर टास्क मौजूदा थ्रेड को तब तक ब्लॉक करता है, जब तक वह इनपुट इमेज की प्रोसेस पूरी नहीं कर लेता या फ़्रेम.
  • लाइव स्ट्रीम मोड में चलते समय, फ़ेस डिटेक्टर का टास्क वापस आ जाता है तुरंत और मौजूदा थ्रेड को ब्लॉक नहीं करता. इससे नतीजा आएगा हर बार जानकारी प्रोसेस करने के बाद, लिसनर को हर बार इनपुट फ़्रेम. अगर फ़ेस डिटेक्टर के काम करने के दौरान, पहचान करने वाले फ़ंक्शन को कॉल किया जाता है दूसरा फ़्रेम प्रोसेस करने में व्यस्त है, तो टास्क नए इनपुट फ़्रेम को अनदेखा कर देगा.

किसी इमेज पर फ़ेस डिटेक्टर चलाने का पूरा उदाहरण देखने के लिए, कोड का उदाहरण देखें.

नतीजों को हैंडल करना और दिखाना

फ़ेस डिटेक्टर, हर बार पहचानने के लिए एक FaceDetectorResult ऑब्जेक्ट दिखाता है दौड़ना. नतीजे के ऑब्जेक्ट में, पहचाने गए चेहरों के लिए बाउंडिंग बॉक्स हैं और पहचाने गए हर चेहरे के लिए कॉन्फ़िडेंस स्कोर.

इस टास्क के आउटपुट डेटा का एक उदाहरण नीचे दिया गया है:

FaceDetectionResult:
  Detections:
    Detection #0:
      BoundingBox:
        origin_x: 126
        origin_y: 100
        width: 463
        height: 463
      Categories:
        Category #0:
          index: 0
          score: 0.9729152917861938
      NormalizedKeypoints:
        NormalizedKeypoint #0:
          x: 0.18298381567001343
          y: 0.2961040139198303
        NormalizedKeypoint #1:
          x: 0.3302789330482483
          y: 0.29289937019348145
        ... (6 keypoints for each face)
    Detection #1:
      BoundingBox:
        origin_x: 616
        origin_y: 193
        width: 430
        height: 430
      Categories:
        Category #0:
          index: 0
          score: 0.9251380562782288
      NormalizedKeypoints:
        NormalizedKeypoint #0:
          x: 0.6151331663131714
          y: 0.3713381886482239
        NormalizedKeypoint #1:
          x: 0.7460576295852661
          y: 0.38825345039367676
        ... (6 keypoints for each face)

नीचे दी गई इमेज, टास्क के आउटपुट का विज़ुअलाइज़ेशन दिखाती है:

बाउंडिंग बॉक्स के बिना इमेज के लिए, ओरिजनल इमेज देखें.

फ़ेस डिटेक्टर के उदाहरण वाले कोड से पता चलता है कि टास्क के नतीजे वापस मिले हैं, तो कोड का उदाहरण. देखें.