टेक्स्ट और चेहरे की विशेषताओं की पहचान करने वाली मशीन लर्निंग किट: iOS

1. परिचय

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

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

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

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

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

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

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

ग्रेस हॉपर की इमेज, जिसमें ML Kit के Face Recognition API को दिखाया गया हैघास पर 'साइन' शब्द की इमेज. इसमें टेक्स्ट पहचानने वाले एपीआई को दिखाया गया है

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

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

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

  • Xcode का नया वर्शन (v12.4+)
  • iOS सिम्युलेटर या iOS 10.0 या इसके बाद के वर्शन पर चलने वाला iOS डिवाइस
  • ML Kit, सिर्फ़ इन दो 64-बिट आर्किटेक्चर के साथ काम करता है: x86_64 और arm64
  • सैंपल कोड
  • Swift में iOS डेवलपमेंट की बुनियादी जानकारी
  • मशीन लर्निंग मॉडल की बुनियादी जानकारी

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

2. सेट अप करना

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

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

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

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

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

CocoaPods की मदद से ML Kit के लिए डिपेंडेंसी जोड़ना

CocoaPods का इस्तेमाल, आपके ऐप्लिकेशन में ML Kit की डिपेंडेंसी जोड़ने के लिए किया जाता है. अगर आपने अपनी मशीन पर CocoaPods इंस्टॉल नहीं किया है, तो इसे इंस्टॉल करने के निर्देश यहां देखें. इंस्टॉल होने के बाद, अपने पसंदीदा एडिटर में Podfile खोलें और ML Kit को डिपेंडेंसी के तौर पर जोड़ें:

Podfile

platform :ios, '10.0'
use_frameworks!

pod 'GoogleMLKit/FaceDetection'
pod 'GoogleMLKit/TextRecognition'

target 'MLKit-codelab' do
end

ML Kit Cocoa Pods इंस्टॉल करना

यह पक्का करने के लिए कि आपके ऐप्लिकेशन के लिए सभी डिपेंडेंसी उपलब्ध हैं, आपको ML Kit Cocoa Pods इंस्टॉल करने के लिए कमांड लाइन का इस्तेमाल करना चाहिए.

कमांड लाइन

# Make sure you are in the root of your app
pod install
xed .

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

अब ऐप्लिकेशन को पहली बार चलाने के लिए तैयार हैं. ऐप्लिकेशन को कंपाइल करने और उसे iOS सिम्युलेटर पर चलाने के लिए, Xcode में 98205811bbed9d74.pngRun पर क्लिक करें.

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

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

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

MLVision मॉड्यूल इंपोर्ट करना

पुष्टि करें कि आपकी ViewController क्लास में ये इंपोर्ट मौजूद हैं.

ViewController.swift

import MLKit

VisionTextRecognizer ऑब्जेक्ट बनाना

अपनी ViewController क्लास में, यहां दी गई लेज़ी प्रॉपर्टी जोड़ें.

ViewController.swift

private lazy var textRecognizer = TextRecognizer.textRecognizer()

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

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

ViewController.swift

func runTextRecognition(with image: UIImage) {
  let visionImage = VisionImage(image: image)
  textRecognizer.process(visionImage) { features, error in
    self.processResult(from: features, error: error)
  }
}

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

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

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

ViewController.swift

 func processResult(from text: Text?, error: Error?) {
    removeDetectionAnnotations()
    guard error == nil, let text = text else {
      let errorString = error?.localizedDescription ?? Constants.detectionNoResultsMessage
      print("Text recognizer failed with error: \(errorString)")
      return
    }

    let transform = self.transformMatrix()

    // Blocks.
    for block in text.blocks {
      drawFrame(block.frame, in: .purple, transform: transform)

      // Lines.
      for line in block.lines {
        drawFrame(line.frame, in: .orange, transform: transform)

        // Elements.
        for element in line.elements {
          drawFrame(element.frame, in: .green, transform: transform)

          let transformedRect = element.frame.applying(transform)
          let label = UILabel(frame: transformedRect)
          label.text = element.text
          label.adjustsFontSizeToFitWidth = true
          self.annotationOverlayView.addSubview(label)
        }
      }
    }
  }

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

अब Xcode में, 98205811bbed9d74.pngRun पर क्लिक करें. ऐप्लिकेशन लोड होने के बाद, पक्का करें कि पिकर में Image 1 चुना गया हो. इसके बाद, Find Text बटन पर क्लिक करें.

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

7269fd8fcb4dc793.png

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

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

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

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

FaceDetector ऑब्जेक्ट बनाना

अपनी ViewController क्लास में, यहां दी गई लेज़ी प्रॉपर्टी जोड़ें.

ViewController.swift

private lazy var faceDetectorOption: FaceDetectorOptions = {
  let option = FaceDetectorOptions()
  option.contourMode = .all
  option.performanceMode = .fast
  return option
}()
private lazy var faceDetector = FaceDetector.faceDetector(options: faceDetectorOption)

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

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

ViewController.swift

  func runFaceContourDetection(with image: UIImage) {
    let visionImage = VisionImage(image: image)
    faceDetector.process(visionImage) { features, error in
      self.processResult(from: features, error: error)
    }
  }

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

चेहरे की पहचान करने वाले टूल के जवाब को प्रोसेस करना

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

ViewController.swift

  func processResult(from faces: [Face]?, error: Error?) {
    removeDetectionAnnotations()
    guard let faces = faces else {
      return
    }

    for feature in faces {
      let transform = self.transformMatrix()
      let transformedRect = feature.frame.applying(transform)
      UIUtilities.addRectangle(
        transformedRect,
        to: self.annotationOverlayView,
        color: UIColor.green
      )
      self.addContours(forFace: feature, transform: transform)
    }
  }

आखिर में, कॉन्टूर पॉइंट बनाने के लिए ViewController क्लास में हेल्पर मेथड addContours जोड़ें.

ViewController.swift

 private func addContours(forFace face: Face, transform: CGAffineTransform) {
    // Face
    if let faceContour = face.contour(ofType: .face) {
      for point in faceContour.points {
        drawPoint(point, in: .blue, transform: transform)
      }
    }

    // Eyebrows
    if let topLeftEyebrowContour = face.contour(ofType: .leftEyebrowTop) {
      for point in topLeftEyebrowContour.points {
        drawPoint(point, in: .orange, transform: transform)
      }
    }
    if let bottomLeftEyebrowContour = face.contour(ofType: .leftEyebrowBottom) {
      for point in bottomLeftEyebrowContour.points {
        drawPoint(point, in: .orange, transform: transform)
      }
    }
    if let topRightEyebrowContour = face.contour(ofType: .rightEyebrowTop) {
      for point in topRightEyebrowContour.points {
        drawPoint(point, in: .orange, transform: transform)
      }
    }
    if let bottomRightEyebrowContour = face.contour(ofType: .rightEyebrowBottom) {
      for point in bottomRightEyebrowContour.points {
        drawPoint(point, in: .orange, transform: transform)
      }
    }

    // Eyes
    if let leftEyeContour = face.contour(ofType: .leftEye) {
      for point in leftEyeContour.points {
        drawPoint(point, in: .cyan, transform: transform)
      }
    }
    if let rightEyeContour = face.contour(ofType: .rightEye) {
      for point in rightEyeContour.points {
        drawPoint(point, in: .cyan, transform: transform)
      }
    }

    // Lips
    if let topUpperLipContour = face.contour(ofType: .upperLipTop) {
      for point in topUpperLipContour.points {
        drawPoint(point, in: .red, transform: transform)
      }
    }
    if let bottomUpperLipContour = face.contour(ofType: .upperLipBottom) {
      for point in bottomUpperLipContour.points {
        drawPoint(point, in: .red, transform: transform)
      }
    }
    if let topLowerLipContour = face.contour(ofType: .lowerLipTop) {
      for point in topLowerLipContour.points {
        drawPoint(point, in: .red, transform: transform)
      }
    }
    if let bottomLowerLipContour = face.contour(ofType: .lowerLipBottom) {
      for point in bottomLowerLipContour.points {
        drawPoint(point, in: .red, transform: transform)
      }
    }

    // Nose
    if let noseBridgeContour = face.contour(ofType: .noseBridge) {
      for point in noseBridgeContour.points {
        drawPoint(point, in: .yellow, transform: transform)
      }
    }
    if let noseBottomContour = face.contour(ofType: .noseBottom) {
      for point in noseBottomContour.points {
        drawPoint(point, in: .yellow, transform: transform)
      }
    }
  }

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

अब Xcode में, 98205811bbed9d74.pngRun पर क्लिक करें. ऐप्लिकेशन लोड होने के बाद, पक्का करें कि पिकर में Image 2 चुना गया हो. इसके बाद, Find Face Contour बटन पर क्लिक करें. अब आपका ऐप्लिकेशन, नीचे दी गई इमेज की तरह दिखना चाहिए. इसमें ग्रेस हॉपर के चेहरे की आउटलाइन, ओरिजनल इमेज के ऊपर पॉइंट के तौर पर दिख रही है.

a5169b50dafbcb2f.png

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

6. बधाई हो!

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

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

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

अगले चरण

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

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

  • https://g.co/mlkit