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

MediaPipe इमेज क्लासिफ़ायर टास्क से आपको इमेज की कैटगरी तय करने में मदद मिलती है. Google Analytics 4 पर माइग्रेट करने के लिए, इस टास्क की मदद से यह पता लगाया जा सकता है कि तय की गई कैटगरी में से कोई इमेज किस बारे में है ट्रेनिंग के दौरान. ये निर्देश आपको इमेज क्लासिफ़ायर के इस्तेमाल का तरीका दिखाते हैं Python के साथ.

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

कोड का उदाहरण

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

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

सेटअप

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

पैकेज

इमेज क्लासिफ़ायर, मीडियापाइप पीआईपी पैकेज को टास्क करता है. आप इसे इंस्टॉल कर सकते हैं: पर निर्भर है:

$ python -m pip install mediapipe
``` ### Imports

Import the following classes to access the Image Classifier task functions:

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

मॉडल

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

कोई मॉडल चुनें और डाउनलोड करें, और फिर उसे लोकल डायरेक्ट्री में स्टोर करें. Google Analytics 4 पर माइग्रेट करने के लिए, सुझाया गया efficiencyNet-Lite0 मॉडल.

model_path = '/absolute/path/to/efficientnet_lite0_int8_2.tflite'

मॉडल का नाम पैरामीटर में मॉडल का पाथ तय करें, जैसा कि नीचे दिखाया गया है:

base_options = BaseOptions(model_asset_path=model_path)

टास्क बनाएं

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

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

इमेज

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

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

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

वीडियो

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

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

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

लाइव स्ट्रीम

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageClassifierResult = mp.tasks.vision.ImageClassifier.ImageClassifierResult
ImageClassifier = mp.tasks.vision.ImageClassifier
ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions
VisionRunningMode = mp.tasks.vision.RunningMode

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

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

with ImageClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

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

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

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

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

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

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

अपना इनपुट, इमेज फ़ाइल या नंपी अरे के तौर पर तैयार करें. इसके बाद, 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 image classification on the provided single image.
classification_result = classifier.classify(mp_image)
    

वीडियो

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

# Perform image classification on the video frame.
classification_result = classifier.classify_for_video(mp_image, frame_timestamp_ms)
    

लाइव स्ट्रीम

# Send the latest frame to perform image classification.
# Results are sent to the `result_callback` provided in the `ImageClassifierOptions`.
classifier.classify_async(mp_image, frame_timestamp_ms)
    

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

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

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

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

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

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

ImageClassifierResult:
 Classifications #0 (single classification head):
  head index: 0
  category #0:
   category name: "/m/01bwb9"
   display name: "Passer domesticus"
   score: 0.91406
   index: 671
  category #1:
   category name: "/m/01bwbt"
   display name: "Passer montanus"
   score: 0.00391
   index: 670

यह नतीजा, बर्ड क्लासिफ़ायर का इस्तेमाल करके मिला है चालू है:

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