आप किसी ऑन-डिवाइस मॉडल या क्लाउड मॉडल का उपयोग करके छवि में पहचाने गए ऑब्जेक्ट को लेबल करने के लिए एमएल किट का उपयोग कर सकते हैं। प्रत्येक दृष्टिकोण के लाभों के बारे में जानने के लिए अवलोकन देखें।
शुरू करने से पहले
- यदि आपने पहले से अपने ऐप में Firebase नहीं जोड़ा है, तो आरंभ करने की मार्गदर्शिका में दिए गए चरणों का पालन करके ऐसा करें।
- अपने पॉडफाइल में एमएल किट लाइब्रेरी शामिल करें:
pod 'Firebase/MLVision', '6.25.0'
अपने प्रोजेक्ट के पॉड्स को इंस्टॉल या अपडेट करने के बाद, अपने एक्सकोड प्रोजेक्ट को इसके# If using the on-device API: pod 'Firebase/MLVisionLabelModel', '6.25.0'
.xcworkspace
का उपयोग करके खोलना सुनिश्चित करें। - अपने ऐप्लिकेशन में, Firebase आयात करें:
तीव्र
import Firebase
उद्देश्य सी
@import Firebase;
यदि आप क्लाउड-आधारित मॉडल का उपयोग करना चाहते हैं, और आपने पहले से ही अपने प्रोजेक्ट के लिए क्लाउड-आधारित API को सक्षम नहीं किया है, तो अभी करें:
- फायरबेस कंसोल का एमएल किट एपीआई पेज खोलें।
यदि आपने पहले से ही अपने प्रोजेक्ट को ब्लेज़ मूल्य निर्धारण योजना में अपग्रेड नहीं किया है, तो ऐसा करने के लिए अपग्रेड पर क्लिक करें। (आपको केवल तभी अपग्रेड करने के लिए कहा जाएगा जब आपका प्रोजेक्ट ब्लेज़ प्लान पर न हो।)
केवल ब्लेज़-स्तरीय प्रोजेक्ट ही क्लाउड-आधारित API का उपयोग कर सकते हैं।
- यदि क्लाउड-आधारित API पहले से सक्षम नहीं हैं, तो क्लाउड-आधारित API सक्षम करें क्लिक करें .
यदि आप केवल ऑन-डिवाइस मॉडल का उपयोग करना चाहते हैं, तो आप इस चरण को छोड़ सकते हैं।
अब आप ऑन-डिवाइस मॉडल या क्लाउड-आधारित मॉडल का उपयोग करके छवियों को लेबल करने के लिए तैयार हैं।
1. इनपुट छवि तैयार करें
UIImage
या CMSampleBufferRef
का उपयोग करके एक VisionImage
ऑब्जेक्ट बनाएं।
UIImage
का उपयोग करने के लिए:
- यदि आवश्यक हो, तो छवि को घुमाएं ताकि उसकी छवि
imageOrientation
गुण.up
। - सही ढंग से घुमाए गए
UIImage
का उपयोग करके एकVisionImage
ऑब्जेक्ट बनाएं। कोई रोटेशन मेटाडेटा निर्दिष्ट न करें—डिफ़ॉल्ट मान,.topLeft
, का उपयोग किया जाना चाहिए।तीव्र
let image = VisionImage(image: uiImage)
उद्देश्य सी
FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];
CMSampleBufferRef
का उपयोग करने के लिए:
एक
VisionImageMetadata
ऑब्जेक्ट बनाएं जोCMSampleBufferRef
बफ़र में निहित छवि डेटा के उन्मुखीकरण को निर्दिष्ट करता है।छवि अभिविन्यास प्राप्त करने के लिए:
तीव्र
func imageOrientation( deviceOrientation: UIDeviceOrientation, cameraPosition: AVCaptureDevice.Position ) -> VisionDetectorImageOrientation { switch deviceOrientation { case .portrait: return cameraPosition == .front ? .leftTop : .rightTop case .landscapeLeft: return cameraPosition == .front ? .bottomLeft : .topLeft case .portraitUpsideDown: return cameraPosition == .front ? .rightBottom : .leftBottom case .landscapeRight: return cameraPosition == .front ? .topRight : .bottomRight case .faceDown, .faceUp, .unknown: return .leftTop } }
उद्देश्य सी
- (FIRVisionDetectorImageOrientation) imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation cameraPosition:(AVCaptureDevicePosition)cameraPosition { switch (deviceOrientation) { case UIDeviceOrientationPortrait: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationLeftTop; } else { return FIRVisionDetectorImageOrientationRightTop; } case UIDeviceOrientationLandscapeLeft: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationBottomLeft; } else { return FIRVisionDetectorImageOrientationTopLeft; } case UIDeviceOrientationPortraitUpsideDown: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationRightBottom; } else { return FIRVisionDetectorImageOrientationLeftBottom; } case UIDeviceOrientationLandscapeRight: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationTopRight; } else { return FIRVisionDetectorImageOrientationBottomRight; } default: return FIRVisionDetectorImageOrientationTopLeft; } }
फिर, मेटाडेटा ऑब्जेक्ट बनाएं:
तीव्र
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
उद्देश्य सी
FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init]; AVCaptureDevicePosition cameraPosition = AVCaptureDevicePositionBack; // Set to the capture device you used. metadata.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
-
CMSampleBufferRef
ऑब्जेक्ट और रोटेशन मेटाडेटा का उपयोग करके एकVisionImage
ऑब्जेक्ट बनाएं:तीव्र
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
उद्देश्य सी
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
2. छवि लेबलर को कॉन्फ़िगर करें और चलाएं
किसी छवि में ऑब्जेक्ट को लेबल करने के लिए,VisionImage
ऑब्जेक्ट को VisionImageLabeler
की processImage()
विधि में पास करें।सबसे पहले,
VisionImageLabeler
का उदाहरण प्राप्त करें।यदि आप ऑन-डिवाइस छवि लेबलर का उपयोग करना चाहते हैं:
तीव्र
let labeler = Vision.vision().onDeviceImageLabeler() // Or, to set the minimum confidence required: // let options = VisionOnDeviceImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = Vision.vision().onDeviceImageLabeler(options: options)
उद्देश्य सी
FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceImageLabeler]; // Or, to set the minimum confidence required: // FIRVisionOnDeviceImageLabelerOptions *options = // [[FIRVisionOnDeviceImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // FIRVisionImageLabeler *labeler = // [[FIRVision vision] onDeviceImageLabelerWithOptions:options];
यदि आप क्लाउड इमेज लेबलर का उपयोग करना चाहते हैं:
तीव्र
let labeler = Vision.vision().cloudImageLabeler() // Or, to set the minimum confidence required: // let options = VisionCloudImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = Vision.vision().cloudImageLabeler(options: options)
उद्देश्य सी
FIRVisionImageLabeler *labeler = [[FIRVision vision] cloudImageLabeler]; // Or, to set the minimum confidence required: // FIRVisionCloudImageLabelerOptions *options = // [[FIRVisionCloudImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // FIRVisionImageLabeler *labeler = // [[FIRVision vision] cloudImageLabelerWithOptions:options];
फिर, इमेज को
processImage()
मेथड में पास करें:तीव्र
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }
उद्देश्य सी
[labeler processImage:image completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
3. लेबल की गई वस्तुओं के बारे में जानकारी प्राप्त करें
यदि छवि लेबलिंग सफल होती है, तोVisionImageLabel
ऑब्जेक्ट्स की एक सरणी पूर्ण करने वाले हैंडलर को पास कर दी जाएगी। प्रत्येक वस्तु से, आप छवि में पहचानी गई विशेषता के बारे में जानकारी प्राप्त कर सकते हैं।उदाहरण के लिए:
तीव्र
for label in labels {
let labelText = label.text
let entityId = label.entityID
let confidence = label.confidence
}
उद्देश्य सी
for (FIRVisionImageLabel *label in labels) {
NSString *labelText = label.text;
NSString *entityId = label.entityID;
NSNumber *confidence = label.confidence;
}
रीयल-टाइम प्रदर्शन को बेहतर बनाने के लिए टिप्स
यदि आप रीयल-टाइम एप्लिकेशन में छवियों को लेबल करना चाहते हैं, तो सर्वोत्तम फ़्रैमरेट प्राप्त करने के लिए इन दिशानिर्देशों का पालन करें:
- छवि लेबलर को थ्रॉटल कॉल। यदि छवि लेबलर के चलने के दौरान कोई नया वीडियो फ़्रेम उपलब्ध हो जाता है, तो फ़्रेम को छोड़ दें।
- यदि आप इनपुट इमेज पर ग्राफिक्स को ओवरले करने के लिए इमेज लेबलर के आउटपुट का उपयोग कर रहे हैं, तो पहले एमएल किट से परिणाम प्राप्त करें, फिर एक ही चरण में इमेज और ओवरले को रेंडर करें। ऐसा करने से, आप प्रत्येक इनपुट फ्रेम के लिए केवल एक बार प्रदर्शन सतह पर प्रस्तुत करते हैं। उदाहरण के लिए शोकेस सैंपल ऐप में प्रीव्यूऑवरलेव्यू और एफआईआरडिटेक्शनऑवरलेव्यू क्लासेस देखें।
अगले कदम
- क्लाउड एपीआई का उपयोग करने वाले ऐप के उत्पादन के लिए तैनात करने से पहले, आपको अनधिकृत एपीआई एक्सेस के प्रभाव को रोकने और कम करने के लिए कुछ अतिरिक्त कदम उठाने चाहिए।