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

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

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

कोड का उदाहरण

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

अगर आप Raspberry Pi के लिए ऑब्जेक्ट डिटेक्टर लागू कर रहे हैं, तो Raspberry Pi का उदाहरण ऐप्लिकेशन है.

सेटअप

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

पैकेज

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

$ 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 फ़ंक्शन, कॉन्फ़िगरेशन के विकल्प भी स्वीकार करता है, जैसे कि 'रनिंग' मोड मोड, डिसप्ले नेम की स्थान-भाषा, नतीजों की ज़्यादा से ज़्यादा संख्या, कॉन्फ़िडेंस थ्रेशोल्ड, कैटगरी के लिए अनुमति वाली सूची और स्वीकार न करने वाली सूची. अगर आपने कॉन्फ़िगरेशन का विकल्प सेट नहीं किया है, तो टास्क में डिफ़ॉल्ट वैल्यू का इस्तेमाल किया गया हो. कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानकारी पाने के लिए, कॉन्फ़िगरेशन के विकल्प सेक्शन देखें.

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

इमेज

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: इनपुट की लाइवस्ट्रीम करने का मोड जैसी निजी जानकारी को किसी भी समय रिकॉर्ड कर सकते हैं. इस मोड में, resultListener होना चाहिए नतीजे पाने के लिए, लिसनर सेट अप करने के लिए कॉल किया गया एसिंक्रोनस रूप से.
{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 इस्तेमाल करने पर, दोनों नतीजे इस्तेमाल करने में गड़बड़ी होती है. कोई भी स्ट्रिंग सेट नहीं है

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

अपने इनपुट को इमेज फ़ाइल या नंपी अरे के तौर पर तैयार करें, फिर उसे 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)
    

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

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

इमेज

# 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

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

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