एमएल किट की मदद से, टेक्स्ट और चेहरे की विशेषताओं की पहचान करना: Android

1. परिचय

ML Kit एक मोबाइल SDK टूल है. यह Google की मशीन लर्निंग की विशेषज्ञता को Android और iOS ऐप्लिकेशन में लाता है. यह एक ऐसा पैकेज है जो इस्तेमाल करने में आसान होने के साथ-साथ असरदार भी है. चाहे आपने अभी-अभी मशीन लर्निंग का इस्तेमाल शुरू किया हो या आपके पास इसका अनुभव हो, आपको जिस सुविधा की ज़रूरत है उसे कोड की कुछ ही लाइनों में आसानी से लागू किया जा सकता है. शुरू करने के लिए, न्यूरल नेटवर्क या मॉडल ऑप्टिमाइज़ेशन के बारे में ज़्यादा जानकारी होना ज़रूरी नहीं है.

अगर आपको इस कोडलैब को पूरा करते समय कोई समस्या (कोड में गड़बड़ियां, व्याकरण की गलतियां, शब्दों का सही इस्तेमाल न होना वगैरह) आती है, तो कृपया कोडलैब के सबसे नीचे बाएं कोने में मौजूद गड़बड़ी की शिकायत करें लिंक पर क्लिक करके समस्या की शिकायत करें.

यह सुविधा कैसे काम करती है?

ML Kit, Google की एमएल टेक्नोलॉजी को एक ही एसडीके में उपलब्ध कराता है. जैसे, Mobile Vision और TensorFlow Lite. इससे, आपके ऐप्लिकेशन में एमएल तकनीकें आसानी से लागू की जा सकती हैं. चाहे आपको डिवाइस पर मौजूद Mobile Vision के मॉडल की रीयल-टाइम क्षमताओं की ज़रूरत हो या कस्टम TensorFlow Lite मॉडल की सुविधा की, ML Kit आपकी मदद कर सकता है.

इस कोडलैब में, आपको अपना Android ऐप्लिकेशन बनाने का तरीका बताया जाएगा. यह ऐप्लिकेशन, किसी इमेज में मौजूद टेक्स्ट और चेहरे की विशेषताओं का अपने-आप पता लगा सकता है.

आपको क्या बनाना है

इस कोडलैब में, आपको ML Kit की मदद से एक Android ऐप्लिकेशन बनाना है. आपका ऐप्लिकेशन:

  • इमेज में मौजूद टेक्स्ट का पता लगाने के लिए, ML Kit के Text Recognition API का इस्तेमाल करना
  • इमेज में चेहरे की विशेषताओं की पहचान करने के लिए, ML Kit के Face Contour API का इस्तेमाल करना

आपको क्या सीखने को मिलेगा

  • टेक्स्ट पहचानने और चेहरे की पहचान करने जैसी बेहतर मशीन लर्निंग की सुविधाएं आसानी से जोड़ने के लिए, ML Kit SDK टूल का इस्तेमाल कैसे करें

आपको इन चीज़ों की ज़रूरत होगी

  • Android Studio का नया वर्शन (v3.0+)
  • Android Studio Emulator या Android डिवाइस
  • सैंपल कोड
  • Java में Android डेवलपमेंट की बुनियादी जानकारी
  • मशीन लर्निंग मॉडल की बुनियादी जानकारी

यह कोडलैब, ML Kit पर आधारित है. काम के न होने वाले कॉन्सेप्ट और कोड ब्लॉक को हटा दिया जाता है. साथ ही, आपको सिर्फ़ कॉपी और पेस्ट करने के लिए कॉन्सेप्ट और कोड ब्लॉक दिए जाते हैं.

2. सेट अप करना

कोड डाउनलोड करें

इस कोडलैब के लिए पूरा कोड डाउनलोड करने के लिए, यहां दिए गए लिंक पर क्लिक करें:

डाउनलोड की गई ज़िप फ़ाइल को अनपैक करें. इससे एक रूट फ़ोल्डर (mlkit-android-master) अनपैक हो जाएगा. इसमें आपको ज़रूरी सभी संसाधन मिल जाएंगे. इस कोडलैब के लिए, आपको सिर्फ़ vision सबडायरेक्ट्री में मौजूद संसाधनों की ज़रूरत होगी.

mlkit-android-master रिपॉज़िटरी में मौजूद vision सबडायरेक्ट्री में दो डायरेक्ट्री होती हैं:

  • android_studio_folder.pngस्टार्टर—यह शुरुआती कोड होता है, जिसे इस कोडलैब में इस्तेमाल करके आगे बढ़ाया जाता है.
  • android_studio_folder.pngfinal—यह फ़ोल्डर, सैंपल ऐप्लिकेशन के पूरे कोड के लिए है.

3. ML Kit के लिए ज़रूरी शर्तें देखना

ML Kit के लिए ज़रूरी डिपेंडेंसी की पुष्टि करना

आपके प्रोजेक्ट की app डायरेक्ट्री में मौजूद build.gradle फ़ाइल के आखिर में, यहां दी गई लाइनें पहले से ही जुड़ी होनी चाहिए. पुष्टि करने के लिए, इन्हें देखें:

build.gradle

dependencies {
  // Face features
  implementation 'com.google.mlkit:face-detection:16.0.0'

  // Text features
  implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
}

ये एमएल किट की कुछ ऐसी डिपेंडेंसी हैं जिन्हें आपको इस कोडलैब में दी गई सुविधाओं को लागू करने के लिए इस्तेमाल करना होगा.

4. स्टार्टर ऐप्लिकेशन चलाना

प्रोजेक्ट को Android Studio में इंपोर्ट करने और ML Kit के लिए डिपेंडेंसी की जांच करने के बाद, अब ऐप्लिकेशन को पहली बार चलाने के लिए तैयार हैं. Android Studio Emulator शुरू करें. इसके बाद, Android Studio टूलबार में मौजूद Run ( execute.png) पर क्लिक करें.

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

5. डिवाइस पर टेक्स्ट पहचानने की सुविधा जोड़ना

इस चरण में, हम आपके ऐप्लिकेशन में इमेज में मौजूद टेक्स्ट को पहचानने की सुविधा जोड़ेंगे.

किसी इमेज पर, डिवाइस पर मौजूद टेक्स्ट पहचानने की सुविधा सेट अप करना और उसे इस्तेमाल करना

MainActivity क्लास के runTextRecognition तरीके में यह जोड़ें:

MainActivity.java

private void runTextRecognition() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   TextRecognizer recognizer = TextRecognition.getClient();
   mTextButton.setEnabled(false);
   recognizer.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<Text>() {
                       @Override
                       public void onSuccess(Text texts) {
                           mTextButton.setEnabled(true);
                           processTextRecognitionResult(texts);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mTextButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });
}

ऊपर दिया गया कोड, टेक्स्ट पहचानने वाले डिटेक्टर को कॉन्फ़िगर करता है और रिस्पॉन्स के साथ processTextRecognitionResult फ़ंक्शन को कॉल करता है.

टेक्स्ट की पहचान करने की सुविधा से मिले जवाब को प्रोसेस करना

नतीजों को पार्स करने और उन्हें अपने ऐप्लिकेशन में दिखाने के लिए, MainActivity क्लास में processTextRecognitionResult में यह कोड जोड़ें.

MainActivity.java

private void processTextRecognitionResult(Text texts) {
   List<Text.TextBlock> blocks = texts.getTextBlocks();
   if (blocks.size() == 0) {
       showToast("No text found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < blocks.size(); i++) {
       List<Text.Line> lines = blocks.get(i).getLines();
       for (int j = 0; j < lines.size(); j++) {
           List<Text.Element> elements = lines.get(j).getElements();
           for (int k = 0; k < elements.size(); k++) {
               Graphic textGraphic = new TextGraphic(mGraphicOverlay, elements.get(k));
               mGraphicOverlay.add(textGraphic);

           }
       }
   }
}

एम्युलेटर पर ऐप्लिकेशन चलाना

अब Android Studio टूलबार में मौजूद, चलाएँ ( execute.png) पर क्लिक करें. ऐप्लिकेशन लोड होने के बाद, पक्का करें कि ड्रॉप-डाउन फ़ील्ड में Test Image 1(Text) चुना गया हो. इसके बाद, FIND TEXT बटन पर क्लिक करें.

अब आपका ऐप्लिकेशन, नीचे दी गई इमेज की तरह दिखना चाहिए. इसमें टेक्स्ट पहचानने के नतीजे और बाउंडिंग बॉक्स, ओरिजनल इमेज के ऊपर दिख रहे हैं.

10b12d0e8822eaf5.png

फ़ोटो: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0

बधाई हो, आपने ML Kit का इस्तेमाल करके, अपने ऐप्लिकेशन में डिवाइस पर टेक्स्ट पहचानने की सुविधा जोड़ ली है! डिवाइस पर टेक्स्ट पहचानने की सुविधा, कई मामलों में बहुत काम आती है. यह सुविधा तब भी काम करती है, जब आपके ऐप्लिकेशन में इंटरनेट कनेक्शन न हो. साथ ही, यह इतनी तेज़ है कि इसका इस्तेमाल, स्थिर इमेज के साथ-साथ लाइव वीडियो फ़्रेम पर भी किया जा सकता है.

6. डिवाइस पर चेहरे की बनावट का पता लगाने की सुविधा जोड़ी गई

इस चरण में, हम आपके ऐप्लिकेशन में ऐसी सुविधा जोड़ेंगे जिससे वह इमेज में चेहरों की पहचान कर पाएगा.

किसी इमेज पर, डिवाइस पर मौजूद फ़ेस कॉन्टूर डिटेक्शन की सुविधा को सेट अप और इस्तेमाल करना

MainActivity क्लास के runFaceContourDetection तरीके में यह जोड़ें:

MainActivity.java

private void runFaceContourDetection() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   FaceDetectorOptions options =
           new FaceDetectorOptions.Builder()
                   .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
                   .setContourMode(FaceDetectorOptions.CONTOUR_MODE_ALL)
                   .build();

   mFaceButton.setEnabled(false);
   FaceDetector detector = FaceDetection.getClient(options);
   detector.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<List<Face>>() {
                       @Override
                       public void onSuccess(List<Face> faces) {
                           mFaceButton.setEnabled(true);
                           processFaceContourDetectionResult(faces);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mFaceButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });

}

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

चेहरे की बनावट का पता लगाने की सुविधा से मिले जवाब को प्रोसेस करना

नतीजों को पार्स करने और उन्हें अपने ऐप्लिकेशन में दिखाने के लिए, MainActivity क्लास में processFaceContourDetectionResult में यह कोड जोड़ें.

MainActivity.java

private void processFaceContourDetectionResult(List<Face> faces) {
   // Task completed successfully
   if (faces.size() == 0) {
       showToast("No face found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < faces.size(); ++i) {
       Face face = faces.get(i);
       FaceContourGraphic faceGraphic = new FaceContourGraphic(mGraphicOverlay);
       mGraphicOverlay.add(faceGraphic);
       faceGraphic.updateFace(face);
   }
}

एम्युलेटर पर ऐप्लिकेशन चलाना

अब Android Studio टूलबार में मौजूद, चलाएँ ( execute.png) पर क्लिक करें. ऐप्लिकेशन लोड होने के बाद, पक्का करें कि ड्रॉप-डाउन फ़ील्ड में Test Image 2 (Face) चुना गया हो. इसके बाद, FIND FACE CONTOUR बटन पर क्लिक करें.

अब आपका ऐप्लिकेशन, नीचे दी गई इमेज की तरह दिखना चाहिए. इसमें चेहरे की आउटलाइन का पता लगाने के नतीजे दिख रहे हों. साथ ही, चेहरे की आउटलाइन को ओरिजनल इमेज के ऊपर पॉइंट के तौर पर दिखाया गया हो.

f9ff2fcbf63f0f3b.png

बधाई हो! आपने ML Kit का इस्तेमाल करके, अपने ऐप्लिकेशन में डिवाइस पर ही चेहरे की बनावट का पता लगाने की सुविधा जोड़ ली है! डिवाइस पर चेहरे की पहचान करने की सुविधा, कई मामलों में काम आती है. यह सुविधा तब भी काम करती है, जब आपके ऐप्लिकेशन में इंटरनेट कनेक्शन न हो. साथ ही, यह सुविधा इतनी तेज़ है कि इसका इस्तेमाल, स्थिर इमेज के साथ-साथ लाइव वीडियो फ़्रेम पर भी किया जा सकता है.

7. बधाई हो!

आपने ML Kit का इस्तेमाल करके, अपने ऐप्लिकेशन में आसानी से मशीन लर्निंग की बेहतर सुविधाएं जोड़ ली हैं.

हमने क्या-क्या बताया

  • अपने Android ऐप्लिकेशन में ML Kit जोड़ने का तरीका
  • ML Kit में, डिवाइस पर मौजूद टेक्स्ट पहचानने की सुविधा का इस्तेमाल करके, इमेज में मौजूद टेक्स्ट ढूंढने का तरीका
  • ML Kit में, डिवाइस पर मौजूद फ़ेस कॉन्टूर की सुविधा का इस्तेमाल करके, इमेज में चेहरे की पहचान करने का तरीका

अगले चरण

  • अपने Android ऐप्लिकेशन में ML Kit का इस्तेमाल करें!

ज़्यादा जानें