AutoML Vision Edge इस्तेमाल करके, अपने मॉडल को ट्रेनिंग देने के बाद, तो अपने ऐप्लिकेशन में इसका इस्तेमाल करके, इमेज में मौजूद ऑब्जेक्ट का पता लगाया जा सकता है.
AutoML Vision Edge से ट्रेन किए गए मॉडल को इंटिग्रेट करने के दो तरीके हैं: मॉडल को अपने ऐप्लिकेशन के ऐसेट फ़ोल्डर में डालकर बंडल किया जा सकता है या Firebase से डाइनैमिक तौर पर डाउनलोड किया जा सकता है.
मॉडल बंडलिंग के विकल्प | |
---|---|
आपके ऐप्लिकेशन में शामिल |
|
Firebase के साथ होस्ट किया गया |
|
शुरू करने से पहले
अगर आपको कोई मॉडल डाउनलोड करना है, तो पक्का करें कि अपने Android प्रोजेक्ट में Firebase जोड़ना, अगर आपने पहले से ऐसा नहीं किया है. मॉडल को बंडल करते समय, इसकी ज़रूरत नहीं होती.
अपने मॉड्यूल में, TensorFlow Lite टास्क लाइब्रेरी के लिए डिपेंडेंसी जोड़ें ऐप्लिकेशन-लेवल की Gradle फ़ाइल, जो आम तौर पर
app/build.gradle
होती है:अपने ऐप्लिकेशन के साथ किसी मॉडल को बंडल करने के लिए:
dependencies { // ... // Object detection with a bundled Auto ML model implementation 'org.tensorflow:tensorflow-lite-task-vision:0.0.0-nightly-SNAPSHOT' }
Firebase से मॉडल को डाइनैमिक तरीके से डाउनलोड करने के लिए, Firebase एमएल भी जोड़ें निर्भरता:
dependencies { // ... // Object detection with an Auto ML model deployed to Firebase implementation platform('com.google.firebase:firebase-bom:26.1.1') implementation 'com.google.firebase:firebase-ml-model-interpreter' implementation 'org.tensorflow:tensorflow-lite-task-vision:0.0.0-nightly' }
1. मॉडल लोड करें
लोकल मॉडल सोर्स कॉन्फ़िगर करना
मॉडल को अपने ऐप्लिकेशन के साथ बंडल करने के लिए:
- ज़िप संग्रह से उस मॉडल को निकालें जिसे आपने Google Cloud कंसोल.
- अपने ऐप्लिकेशन पैकेज में अपना मॉडल शामिल करें:
- अगर आपके प्रोजेक्ट में कोई ऐसेट फ़ोल्डर नहीं है, तो एक ऐसेट फ़ोल्डर बनाएं
app/
फ़ोल्डर पर राइट-क्लिक करें, फिर नया > फ़ोल्डर > ऐसेट फ़ोल्डर. - ऐसेट में, एम्बेड किए गए मेटाडेटा के साथ अपनी
tflite
मॉडल फ़ाइल को कॉपी करें फ़ोल्डर खोलें.
- अगर आपके प्रोजेक्ट में कोई ऐसेट फ़ोल्डर नहीं है, तो एक ऐसेट फ़ोल्डर बनाएं
अपने ऐप्लिकेशन की
build.gradle
फ़ाइल में यह कोड जोड़ें, ताकि ऐप्लिकेशन बनाते समय Gradle, मॉडल फ़ाइल को कंप्रेस न करे:android { // ... aaptOptions { noCompress "tflite" } }
मॉडल फ़ाइल को ऐप्लिकेशन पैकेज में शामिल किया जाएगा और यह रॉ एसेट के तौर पर उपलब्ध होगी.
Firebase से होस्ट किए गए मॉडल सोर्स को कॉन्फ़िगर करना
रिमोट तौर पर होस्ट किए गए मॉडल का इस्तेमाल करने के लिए, RemoteModel
ऑब्जेक्ट बनाएं. इसमें वह नाम डालें जो आपने मॉडल को पब्लिश करते समय असाइन किया था:
Java
// Specify the name you assigned when you deployed the model.
FirebaseCustomRemoteModel remoteModel =
new FirebaseCustomRemoteModel.Builder("your_model").build();
Kotlin
// Specify the name you assigned when you deployed the model.
val remoteModel =
FirebaseCustomRemoteModel.Builder("your_model_name").build()
इसके बाद, उन शर्तों को तय करते हुए मॉडल डाउनलोड टास्क शुरू करें को डाउनलोड करने की अनुमति देनी है. अगर मॉडल डिवाइस पर मौजूद नहीं है या मॉडल का नया वर्शन उपलब्ध है, तो टास्क, Firebase से मॉडल को असिंक्रोनस तरीके से डाउनलोड करेगा:
Java
DownloadConditions downloadConditions = new DownloadConditions.Builder()
.requireWifi()
.build();
RemoteModelManager.getInstance().download(remoteModel, downloadConditions)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(@NonNull Task<Void> task) {
// Success.
}
});
Kotlin
val downloadConditions = DownloadConditions.Builder()
.requireWifi()
.build()
RemoteModelManager.getInstance().download(remoteModel, downloadConditions)
.addOnSuccessListener {
// Success.
}
कई ऐप्लिकेशन अपने इनिशलाइज़ेशन कोड में डाउनलोड का काम शुरू करते हैं, लेकिन आपके द्वारा मॉडल का उपयोग करने की आवश्यकता से पहले किसी भी समय ऐसा कर सकते है.
अपने मॉडल से ऑब्जेक्ट डिटेक्टर बनाएं
अपने मॉडल सोर्स को कॉन्फ़िगर करने के बाद, किसी एक से ObjectDetector
ऑब्जेक्ट बनाएं
विकल्प मिलते हैं.
अगर आपके पास सिर्फ़ लोकल बंडल वाला मॉडल है, तो अपने मॉडल फ़ाइल और कॉन्फ़िडेंस स्कोर को कॉन्फ़िगर करें थ्रेशोल्ड को पूरा करें जिसे आपको लागू करना हो (अपने मॉडल का आकलन करना देखें):
Java
// Initialization
ObjectDetectorOptions options = ObjectDetectorOptions.builder()
.setScoreThreshold(0) // Evaluate your model in the Google Cloud console
// to determine an appropriate value.
.build();
ObjectDetector objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options);
Kotlin
// Initialization
val options = ObjectDetectorOptions.builder()
.setScoreThreshold(0) // Evaluate your model in the Google Cloud console
// to determine an appropriate value.
.build()
val objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options)
अगर आपके पास किसी दूसरे डिवाइस पर होस्ट किया गया मॉडल है, तो उसे चलाने से पहले आपको यह देखना होगा कि वह डाउनलोड हो गया है या नहीं. मॉडल मैनेजर के isModelDownloaded()
तरीके का इस्तेमाल करके, मॉडल डाउनलोड करने के टास्क की स्थिति देखी जा सकती है.
ऑब्जेक्ट डिटेक्टर को चलाने से पहले ही इसकी पुष्टि कर ली जा सकती है. हालांकि, अगर आपके पास रिमोट से होस्ट किया गया मॉडल और स्थानीय तौर पर बंडल किया गया मॉडल, दोनों हैं, तो ऑब्जेक्ट डिटेक्टर को इंस्टैंशिएट करते समय यह जांच करना सही रहेगा: अगर रिमोट मॉडल डाउनलोड किया गया है, तो उससे ऑब्जेक्ट डिटेक्टर बनाएं. अगर नहीं, तो स्थानीय मॉडल से बनाएं.
Java
FirebaseModelManager.getInstance().isModelDownloaded(remoteModel)
.addOnSuccessListener(new OnSuccessListener<Boolean>() {
@Override
public void onSuccess(Boolean isDownloaded) {
}
});
Kotlin
FirebaseModelManager.getInstance().isModelDownloaded(remoteModel)
.addOnSuccessListener { success ->
}
अगर आपके पास सिर्फ़ रिमोट तौर पर होस्ट किया गया मॉडल है, तो आपको मॉडल से जुड़ी सेटिंग बंद करनी चाहिए
फ़ंक्शनलिटी—उदाहरण के लिए, आपके यूज़र इंटरफ़ेस (यूआई) के किसी हिस्से को धूसर करना या छिपाना—जब तक
तो यह पुष्टि की जाती है कि मॉडल डाउनलोड किया गया है. ऐसा करने के लिए, मॉडल मैनेजर के download()
तरीके में एक लिसनर अटैच करें.
जब आपको पता चल जाए कि आपका मॉडल डाउनलोड हो गया है, तो मॉडल फ़ाइल:
Java
FirebaseModelManager.getInstance().getLatestModelFile(remoteModel)
.addOnCompleteListener(new OnCompleteListener<File>() {
@Override
public void onComplete(@NonNull Task<File> task) {
File modelFile = task.getResult();
if (modelFile != null) {
ObjectDetectorOptions options = ObjectDetectorOptions.builder()
.setScoreThreshold(0)
.build();
objectDetector = ObjectDetector.createFromFileAndOptions(
getApplicationContext(), modelFile.getPath(), options);
}
}
});
Kotlin
FirebaseModelManager.getInstance().getLatestModelFile(remoteModel)
.addOnSuccessListener { modelFile ->
val options = ObjectDetectorOptions.builder()
.setScoreThreshold(0f)
.build()
objectDetector = ObjectDetector.createFromFileAndOptions(
applicationContext, modelFile.path, options)
}
2. इनपुट इमेज तैयार करें
इसके बाद, हर उस इमेज के लिए जिसे आप लेबल करना चाहते हैं, अपनेTensorImage
इमेज. Bitmap
से TensorImage
ऑब्जेक्ट बनाया जा सकता है. इसके लिए,
fromBitmap
तरीका:
Java
TensorImage image = TensorImage.fromBitmap(bitmap);
Kotlin
val image = TensorImage.fromBitmap(bitmap)
अगर आपका इमेज डेटा Bitmap
में नहीं है, तो पिक्सल कलेक्शन को लोड किया जा सकता है, जैसा कि यहां दिखाया गया है
TensorFlow Lite के दस्तावेज़ देखने के लिए.
3. ऑब्जेक्ट डिटेक्टर चलाएं
किसी इमेज में ऑब्जेक्ट का पता लगाने के लिए, TensorImage
ऑब्जेक्ट को
ObjectDetector
का detect()
तरीका.
Java
List<Detection> results = objectDetector.detect(image);
Kotlin
val results = objectDetector.detect(image)
4. लेबल किए गए ऑब्जेक्ट के बारे में जानकारी पाना
अगर ऑब्जेक्ट की पहचान करने की कार्रवाई पूरी हो जाती है, तो यह Detection
की सूची दिखाता है
ऑब्जेक्ट हैं. हर Detection
ऑब्जेक्ट ऐसी चीज़ दिखाता है जिसका पता
इमेज. आपको हर ऑब्जेक्ट का बाउंडिंग बॉक्स और उसके लेबल मिल सकते हैं.
उदाहरण के लिए:
Java
for (Detection result : results) {
RectF bounds = result.getBoundingBox();
List<Category> labels = result.getCategories();
}
Kotlin
for (result in results) {
val bounds = result.getBoundingBox()
val labels = result.getCategories()
}
रीयल-टाइम परफ़ॉर्मेंस को बेहतर बनाने के लिए सलाह
अगर आपको रीयल-टाइम ऐप्लिकेशन में इमेज को लेबल करना है, तो इन निर्देशों का पालन करें सबसे सही फ़्रेमरेट हासिल करने के लिए दिशा-निर्देश:
- इमेज लेबलर को कॉल को कम करें. अगर कोई नया वीडियो फ़्रेम
उपलब्ध होने पर, फ़्रेम छोड़ें. उदाहरण के लिए, क्विकस्टार्ट सैंपल ऐप्लिकेशन में
VisionProcessorBase
क्लास देखें. - अगर ग्राफ़िक ओवरले करने के लिए, इमेज लेबलर के आउटपुट का इस्तेमाल किया जा रहा है
इनपुट इमेज को चुनने के बाद, सबसे पहले नतीजा पाएं. इसके बाद, इमेज को रेंडर करें
और ओवरले को एक ही चरण में पूरा करें. ऐसा करने पर, हर इनपुट फ़्रेम के लिए डिसप्ले प्लैटफ़ॉर्म पर सिर्फ़ एक बार रेंडर किया जाता है.
CameraSourcePreview
और क्विकस्टार्ट सैंपल ऐप्लिकेशन मेंGraphicOverlay
क्लास उदाहरण के लिए. -
Camera2 API का इस्तेमाल करने पर, इमेज यहां कैप्चर करें
ImageFormat.YUV_420_888
फ़ॉर्मैट.अगर पुराने Camera API का इस्तेमाल किया जा रहा है, तो इमेज यहां कैप्चर करें
ImageFormat.NV21
फ़ॉर्मैट.