Python के लिए ऑब्जेक्ट का पता लगाने वाली गाइड

MediaPipe Object Detector टास्क की मदद से, ऑब्जेक्ट की कई क्लास की मौजूदगी और जगह का पता लगाया जा सकता है. ये निर्देश आपको Python में ऑब्जेक्ट डिटेक्टर टास्क को इस्तेमाल करने का तरीका बताते हैं. इन निर्देशों में दिया गया कोड का उदाहरण GitHub पर उपलब्ध है.

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

कोड का उदाहरण

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

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

सेटअप

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

पैकेज

ऑब्जेक्ट डिटेक्टर टास्क के लिए, MediaPipe पीआईपी पैकेज ज़रूरी है. ज़रूरी पैकेज इंस्टॉल करने के लिए, इन निर्देशों का पालन करें:

$ python -m pip install mediapipe

इंपोर्ट

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

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

मॉडल

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

कोई मॉडल चुनें और उसे डाउनलोड करें. इसके बाद, उसे किसी लोकल डायरेक्ट्री में सेव करें:

model_path = '/absolute/path/to/lite-model_efficientdet_lite0_detection_metadata_1.tflite'

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

टास्क बनाएं

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

ऑब्जेक्ट डिटेक्टर का टास्क कई तरह के इनपुट डेटा के साथ काम करता है: जैसे कि स्टिल इमेज, वीडियो फ़ाइलें, और लाइव वीडियो स्ट्रीम. अपने इनपुट डेटा प्रकार के हिसाब से टैब चुनें और देखें कि टास्क कैसे बनाया जाए और अनुमान कैसे चलाया जाए.

Image

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=VisionRunningMode.IMAGE)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

वीडियो

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=VisionRunningMode.VIDEO)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

लाइव स्ट्रीम

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
DetectionResult = mp.tasks.components.containers.detections.DetectionResult
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

def print_result(result: DetectionResult, output_image: mp.Image, timestamp_ms: int):
    print('detection result: {}'.format(result))

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    running_mode=VisionRunningMode.LIVE_STREAM,
    max_results=5,
    result_callback=print_result)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

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

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

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

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

इमेज: सिंगल इमेज इनपुट के लिए मोड.

वीडियो: वीडियो के डिकोड किए गए फ़्रेम का मोड.

LIVE_STREAM: इनपुट डेटा की लाइव स्ट्रीम का मोड, जैसे कि कैमरे से स्ट्रीम किया जाने वाला मोड. इस मोड में, रिज़ल्ट पहचानकर्ता को लिसनर को सेट अप करने के लिए कॉल किया जाना चाहिए, ताकि वह एसिंक्रोनस तरीके से नतीजे पा सके.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names अगर यह उपलब्ध हो, तो टास्क के मॉडल के मेटाडेटा में दिए गए डिसप्ले नेम के लिए, लेबल की भाषा सेट करता है. अंग्रेज़ी के लिए डिफ़ॉल्ट रूप से en है. TensorFlow Lite Metadata Writer API का इस्तेमाल करके, कस्टम मॉडल के मेटाडेटा में स्थानीय भाषा के हिसाब से लेबल जोड़े जा सकते हैं स्थान-भाषा का कोड en
max_results वापस लौटाने के लिए, टॉप-स्कोर किए गए पहचान के नतीजों की ज़्यादा से ज़्यादा वैकल्पिक संख्या सेट करता है. कोई भी पॉज़िटिव नंबर -1 (सभी नतीजे दिखाए जाते हैं)
score_threshold अनुमान के स्कोर का थ्रेशोल्ड सेट करता है, जो मॉडल मेटाडेटा (अगर कोई है) में दिए गए स्कोर को बदलता है. इस वैल्यू से कम के नतीजे अस्वीकार कर दिए गए हैं. कोई भी फ़्लोट सेट नहीं किया गया है
category_allowlist अनुमति वाली कैटगरी के नामों की वैकल्पिक सूची सेट करता है. अगर यह खाली नहीं है, तो जिन कैटगरी का नाम इस सेट में नहीं होगा उन्हें फ़िल्टर कर दिया जाएगा. श्रेणी के डुप्लीकेट या अज्ञात नामों पर ध्यान नहीं दिया जाता है. यह विकल्प category_denylist के साथ म्यूचुअली एक्सक्लूसिव है और दोनों नतीजों का इस्तेमाल करने में गड़बड़ी है. कोई भी स्ट्रिंग सेट नहीं किया गया है
category_denylist उन कैटगरी के नामों की वैकल्पिक सूची सेट करता है जिनकी अनुमति नहीं है. अगर यह खाली नहीं है, तो पहचान के जिन नतीजों की कैटगरी का नाम इस सेट में होगा उन्हें फ़िल्टर करके बाहर कर दिया जाएगा. श्रेणी के डुप्लीकेट या अज्ञात नामों पर ध्यान नहीं दिया जाता है. यह विकल्प category_allowlist के साथ म्यूचुअली एक्सक्लूसिव है और इसका इस्तेमाल करने पर दोनों में गड़बड़ी होगी. कोई भी स्ट्रिंग सेट नहीं किया गया है

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

अपने इनपुट को इमेज फ़ाइल या 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)
    

टास्क चलाएं

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

Image

# Perform object detection on the provided single image.
detection_result = detector.detect(mp_image)
    

वीडियो

# Calculate the timestamp of the current frame
frame_timestamp_ms = 1000 * frame_index / video_file_fps

# Perform object detection on the video frame.
detection_result = detector.detect_for_video(mp_image, frame_timestamp_ms)
    

लाइव स्ट्रीम


# Send the latest frame to perform object detection.
# Results are sent to the `result_callback` provided in the `ObjectDetectorOptions`.
detector.detect_async(mp_image, frame_timestamp_ms)
    

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

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

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

नतीजे मैनेज करें और दिखाएं

अनुमान चलाने पर, ऑब्जेक्ट डिटेक्टर टास्क एक ObjectDetectionResult ऑब्जेक्ट दिखाता है, जो इनपुट इमेज में मिले ऑब्जेक्ट की जानकारी देता है.

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

ObjectDetectorResult:
 Detection #0:
  Box: (x: 355, y: 133, w: 190, h: 206)
  Categories:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1:
  Box: (x: 103, y: 15, w: 138, h: 369)
  Categories:
   index       : 17
   score       : 0.73047
   class name  : dog

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

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