MediaPipe Face Detector टास्क की मदद से, किसी इमेज या वीडियो में मौजूद चेहरों का पता लगाया जा सकता है. इस टास्क का इस्तेमाल, एक फ़्रेम में चेहरों और चेहरे के हाव-भाव का पता लगाने के लिए किया जा सकता है. इस टास्क में मशीन लर्निंग (एमएल) मॉडल का इस्तेमाल किया जाता है. यह मॉडल एक इमेज या लगातार स्ट्रीम होने वाली इमेज के साथ काम करता है. इस टास्क में, चेहरे की जगह की जानकारी के साथ-साथ चेहरे की जानकारी भी दिखाई जाती है: बायां आंख, दाहिनी आंख, नाक की नोक, मुंह, बाईं आंख की ट्रैजिशन, और दाहिनी आंख की ट्रैजिशन.
इन निर्देशों में दिया गया कोड सैंपल, GitHub पर उपलब्ध है. इस टास्क की क्षमताओं, मॉडल, और कॉन्फ़िगरेशन विकल्पों के बारे में ज़्यादा जानकारी के लिए, खास जानकारी देखें.
कोड का उदाहरण
फ़ेस डिटेक्टर के इस उदाहरण में दिए गए कोड में, Python में आपके रेफ़रंस के लिए, इस टास्क को पूरी तरह से लागू करने का तरीका बताया गया है. इस कोड से इस टास्क को टेस्ट करने और फ़ेस डिटेक्टर बनाने में मदद मिलती है. वेब ब्राउज़र का इस्तेमाल करके, फ़ेस डिटेक्टर के उदाहरण कोड को देखा, चलाया, और उसमें बदलाव किया जा सकता है.
अगर Raspबेरी Pi के लिए फ़ेस डिटेक्टर का इस्तेमाल किया जा रहा है, तो Raspबेरी Pi का उदाहरण ऐप्लिकेशन देखें.
सेटअप
इस सेक्शन में, डेवलपमेंट एनवायरमेंट को सेट अप करने के मुख्य चरणों के बारे में बताया गया है. साथ ही, खास तौर पर फ़ेस डिटेक्टर का इस्तेमाल करने के लिए, कोड प्रोजेक्ट भी बताए गए हैं. MediaPipe टास्क का इस्तेमाल करने के लिए अपने डेवलपमेंट एनवायरमेंट को सेट अप करने से जुड़ी सामान्य जानकारी के लिए, Python के लिए सेटअप गाइड देखें. इसमें प्लैटफ़ॉर्म के वर्शन की ज़रूरी शर्तों के साथ-साथ काम करने के तरीके भी शामिल हैं.
पैकेज
MediaPipe Face Detector टास्क के लिए, MediaPipe 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 Face Detector टास्क, टास्क सेट अप करने के लिए create_from_options
फ़ंक्शन का इस्तेमाल करता है. create_from_options
फ़ंक्शन, कॉन्फ़िगरेशन के विकल्पों को हैंडल करने के लिए, वैल्यू स्वीकार करता है. कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानकारी के लिए, कॉन्फ़िगरेशन के विकल्प देखें.
नीचे दिया गया कोड इस टास्क को बनाने और कॉन्फ़िगर करने का तरीका बताता है.
ये सैंपल, इमेज, वीडियो फ़ाइलों, और लाइव स्ट्रीम के लिए, टास्क बनाने के तरीके को भी दिखाते हैं.
Image
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: इनपुट डेटा की लाइव स्ट्रीम का मोड, जैसे कि कैमरे से स्ट्रीम किया जाने वाला मोड. इस मोड में, रिज़ल्ट पहचानकर्ता को लिसनर को सेट अप करने के लिए कॉल किया जाना चाहिए, ताकि वह एसिंक्रोनस तरीके से नतीजे पा सके. |
{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 |
डेटा तैयार करना
अपने इनपुट को इमेज फ़ाइल या numpy कलेक्शन के तौर पर तैयार करें. इसके बाद, उसे mediapipe.Image
ऑब्जेक्ट में बदलें. अगर आपका इनपुट, वेबकैम से कोई वीडियो फ़ाइल या लाइव स्ट्रीम है, तो OpenCV जैसी बाहरी लाइब्रेरी का इस्तेमाल करके, अपने इनपुट फ़्रेम को सुन्न कलेक्शन के तौर पर लोड किया जा सकता है.
Image
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
फ़ंक्शन का इस्तेमाल करके, अनुमान लगाता है. चेहरे की पहचान के लिए, इसमें इनपुट डेटा
को पहले से प्रोसेस करना और इमेज में चेहरों का पता लगाना शामिल है.
इस कोड में बताया गया है कि टास्क मॉडल के साथ प्रोसेसिंग को कैसे एक्ज़ीक्यूट करें.
Image
# 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)
इस इमेज में, टास्क के आउटपुट का विज़ुअलाइज़ेशन दिखाया गया है:
बिना बाउंडिंग बॉक्स वाली इमेज के लिए, ओरिजनल इमेज देखें.
फ़ेस डिटेक्टर के उदाहरण वाले कोड में, टास्क से दिखाए गए नतीजों को दिखाने का तरीका बताया गया है. ज़्यादा जानकारी के लिए, कोड का उदाहरण देखें.