টেক্সট এবং মুখের বৈশিষ্ট্য চিনুন ML কিট: iOS

১. ভূমিকা

এমএল কিট হলো একটি মোবাইল এসডিকে, যা গুগলের মেশিন লার্নিং দক্ষতাকে একটি শক্তিশালী অথচ সহজে ব্যবহারযোগ্য প্যাকেজের মাধ্যমে অ্যান্ড্রয়েড এবং আইওএস অ্যাপে নিয়ে আসে। আপনি মেশিন লার্নিং-এ নতুন বা অভিজ্ঞ, যা-ই হোন না কেন, মাত্র কয়েকটি কোডের লাইনেই আপনার প্রয়োজনীয় কার্যকারিতা সহজেই প্রয়োগ করতে পারবেন। এটি শুরু করার জন্য নিউরাল নেটওয়ার্ক বা মডেল অপটিমাইজেশন সম্পর্কে গভীর জ্ঞানের কোনো প্রয়োজন নেই।

এটা কীভাবে কাজ করে?

এমএল কিট গুগলের এমএল প্রযুক্তি, যেমন মোবাইল ভিশন এবং টেনসরফ্লো লাইট-কে একটিমাত্র এসডিকে-তে একত্রিত করে আপনার অ্যাপে এমএল কৌশল প্রয়োগ করা সহজ করে তোলে। আপনার মোবাইল ভিশনের অন-ডিভাইস মডেলের রিয়েল-টাইম ক্ষমতার প্রয়োজন হোক, বা কাস্টম টেনসরফ্লো লাইট ইমেজ ক্লাসিফিকেশন মডেলের নমনীয়তার প্রয়োজন হোক, এমএল কিট মাত্র কয়েকটি কোডের লাইনের মাধ্যমেই তা সম্ভব করে তোলে।

এই কোডল্যাবটি আপনাকে এমন একটি iOS অ্যাপ তৈরি করার পদ্ধতি ধাপে ধাপে দেখাবে, যা কোনো ছবি থেকে স্বয়ংক্রিয়ভাবে লেখা এবং মুখের বৈশিষ্ট্য শনাক্ত করতে পারে।

আপনি যা তৈরি করবেন

এই কোডল্যাবে, আপনি এমএল কিট (ML Kit) ব্যবহার করে একটি আইওএস (iOS) অ্যাপ তৈরি করবেন। আপনার অ্যাপটি যা করবে:

  • ছবিতে থাকা লেখা শনাক্ত করতে এমএল কিট টেক্সট রিকগনিশন এপিআই ব্যবহার করুন।
  • ছবিতে মুখের বৈশিষ্ট্য শনাক্ত করতে এমএল কিট ফেস ডিটেকশন এপিআই ব্যবহার করুন।

Image of Grace Hopper demonstrating ML KIt Face Recognition APIImage of sign on grass demonstrating text recognition API

আপনি যা শিখবেন

  • এমএল কিট এসডিকে ব্যবহার করে কীভাবে যেকোনো আইওএস অ্যাপে টেক্সট রিকগনিশন, ফেস ফিচার ডিটেকশনের মতো উন্নত মেশিন লার্নিং সক্ষমতা সহজে যোগ করা যায়

আপনার যা যা লাগবে

  • Xcode-এর একটি সাম্প্রতিক সংস্করণ (v12.4+)
  • iOS সিমুলেটর অথবা iOS 10.0+ চালিত একটি বাস্তব iOS ডিভাইস
  • এমএল কিট শুধুমাত্র এই দুটি ৬৪-বিট আর্কিটেকচার সমর্থন করে: x86_64 এবং arm64
  • নমুনা কোড
  • সুইফটে আইওএস ডেভেলপমেন্টের প্রাথমিক জ্ঞান
  • মেশিন লার্নিং মডেল সম্পর্কে প্রাথমিক ধারণা

এই কোডল্যাবটি এমএল কিট (ML Kit)-কে কেন্দ্র করে তৈরি। এখানে অপ্রাসঙ্গিক ধারণা ও কোড ব্লকগুলো সংক্ষেপে আলোচনা করা হয়েছে এবং এগুলো শুধু কপি-পেস্ট করার জন্য দেওয়া হয়েছে।

২. প্রস্তুতি গ্রহণ

কোডটি ডাউনলোড করুন

এই কোডল্যাবের সমস্ত কোড ডাউনলোড করতে নিচের লিঙ্কে ক্লিক করুন:

ডাউনলোড করা জিপ ফাইলটি আনপ্যাক করুন। এটি একটি রুট ফোল্ডার ( mlkit-ios-codelab ) তৈরি করবে, যেখানে আপনার প্রয়োজনীয় সমস্ত রিসোর্স থাকবে। এই কোডল্যাবের জন্য, আপনার শুধুমাত্র vision সাবডিরেক্টরিতে থাকা রিসোর্সগুলো প্রয়োজন হবে।

mlkit-ios-codelab রিপোজিটরির vision সাবডিরেক্টরিতে দুটি ডিরেক্টরি রয়েছে:

  • android_studio_folder.png স্টার্টার — এই কোডল্যাবে আপনি যে কোডের উপর ভিত্তি করে কাজ করবেন, এটি সেই প্রাথমিক কোড।
  • android_studio_folder.png চূড়ান্ত — সমাপ্ত নমুনা অ্যাপটির সম্পূর্ণ কোড।

CocoaPods-এর সাথে ML Kit-এর জন্য প্রয়োজনীয় নির্ভরতাগুলো যোগ করুন।

আপনার অ্যাপে এমএল কিট (ML Kit) ডিপেন্ডেন্সি যোগ করতে কোকোয়া পডস (CocoaPods) ব্যবহার করা হয়। যদি আপনার মেশিনে কোকোয়া পডস ইনস্টল করা না থাকে, তবে এর ইনস্টলেশন নির্দেশাবলী এখানে খুঁজুন। ইনস্টল হয়ে গেলে, আপনার পছন্দের এডিটরে পডফাইল (Podfile) খুলুন এবং ডিপেন্ডেন্সি হিসেবে এমএল কিট (ML Kit) যোগ করুন:

পডফাইল

platform :ios, '10.0'
use_frameworks!

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

target 'MLKit-codelab' do
end

এমএল কিট কোকো পড ইনস্টল করুন

আপনার অ্যাপের জন্য সমস্ত নির্ভরতা উপলব্ধ আছে কিনা তা নিশ্চিত করতে, আপনার কমান্ড লাইন ব্যবহার করে এমএল কিট কোকোয়া পডগুলি ইনস্টল করা উচিত।

কমান্ড লাইন

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

৩. স্টার্টার অ্যাপটি চালান।

এখন আপনি প্রথমবারের মতো অ্যাপটি চালানোর জন্য প্রস্তুত। ক্লিক করুন। 98205811bbed9d74.png অ্যাপটি কম্পাইল করতে Xcode-এ রান করুন এবং iOS সিমুলেটরে চালান।

অ্যাপটি আপনার সিমুলেটরে চালু হবে। এই পর্যায়ে, আপনি একটি সাধারণ লেআউট দেখতে পাবেন, যেখানে একটি পিকার থাকবে যা আপনাকে দুটি ছবির মধ্যে থেকে একটি বেছে নিতে সাহায্য করবে। পরবর্তী অংশে, ছবিগুলোর মধ্যে থাকা লেখা শনাক্ত করার জন্য আপনি আপনার অ্যাপে টেক্সট রিকগনিশন যুক্ত করবেন।

৪. ডিভাইসে টেক্সট শনাক্তকরণ যোগ করুন

এই ধাপে, আমরা আপনার অ্যাপে ছবির মধ্যে থাকা লেখা শনাক্ত করার কার্যকারিতা যোগ করব।

MLVision মডিউলটি ইম্পোর্ট করুন

আপনার ViewController ক্লাসে নিম্নলিখিত ইম্পোর্টগুলো আছে কিনা তা নিশ্চিত করুন।

ViewController.swift

import MLKit

একটি ভিশনটেক্সটরিকগনাইজার তৈরি করুন

আপনার 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)
        }
      }
    }
  }

সিমুলেটরে অ্যাপটি চালান।

এখন ক্লিক করুন 98205811bbed9d74.png Xcode-এ অ্যাপটি চালান । অ্যাপটি লোড হয়ে গেলে, পিকার থেকে Image 1 সিলেক্ট করা আছে কিনা তা নিশ্চিত করুন এবং Find Text বাটনে ক্লিক করুন।

আপনার অ্যাপটি এখন নিচের ছবির মতো দেখতে হবে, যেখানে মূল ছবির উপরে টেক্সট শনাক্তকরণের ফলাফল এবং বাউন্ডিং বক্সগুলো দেখানো থাকবে।

7269fd8fcb4dc793.png

ছবি: কাই শ্রেইবার/উইকিমিডিয়া কমন্স/সিসি বাই-এসএ 2.0

অভিনন্দন, আপনি এইমাত্র এমএল কিট (ML Kit) ব্যবহার করে আপনার অ্যাপে অন-ডিভাইস টেক্সট রিকগনিশন যুক্ত করেছেন! অন-ডিভাইস টেক্সট রিকগনিশন অনেক ক্ষেত্রেই দারুণ, কারণ এটি আপনার অ্যাপে ইন্টারনেট সংযোগ না থাকলেও কাজ করে এবং স্থির ছবির পাশাপাশি লাইভ ভিডিও ফ্রেমেও ব্যবহারের জন্য যথেষ্ট দ্রুত।

৫. ডিভাইসে মুখের আকৃতি শনাক্তকরণ যোগ করুন

এই ধাপে, আমরা আপনার অ্যাপে ছবি থেকে মুখের অবয়ব শনাক্ত করার কার্যকারিতা যোগ করব।

একটি ফেসডিটেক্টর তৈরি করুন

আপনার 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)
      }
    }
  }

সিমুলেটরে অ্যাপটি চালান।

এখন ক্লিক করুন 98205811bbed9d74.png Xcode-এ অ্যাপটি চালান । অ্যাপটি লোড হয়ে গেলে, পিকার থেকে Image 2 সিলেক্ট করা আছে কিনা তা নিশ্চিত করুন এবং Find Face Contour বাটনে ক্লিক করুন। আপনার অ্যাপটি এখন নিচের ছবির মতো দেখাবে, যেখানে মূল ছবির উপরে গ্রেস হপারের মুখের কনট্যুরগুলো বিন্দু হিসেবে ওভারলে করা থাকবে।

a5169b50dafbcb2f.png

অভিনন্দন, আপনি এইমাত্র আপনার অ্যাপে অন-ডিভাইস ফেস কনট্যুর ডিটেকশন যুক্ত করেছেন। অন-ডিভাইস এমএল কিট ফেস কনট্যুর ডিটেকশন অনেক ব্যবহারের ক্ষেত্রেই দারুণ, কারণ এটি আপনার অ্যাপে ইন্টারনেট সংযোগ না থাকলেও কাজ করে এবং স্থির ছবির পাশাপাশি লাইভ ভিডিও ফ্রেমেও ব্যবহারের জন্য যথেষ্ট দ্রুত।

৬. অভিনন্দন!

আপনি আপনার অ্যাপে সহজে উন্নত মেশিন লার্নিং সক্ষমতা যোগ করতে এমএল কিট ব্যবহার করেছেন।

আমরা যা আলোচনা করেছি

  • আপনার iOS অ্যাপে কীভাবে ML Kit যুক্ত করবেন
  • এমএল কিট-এ অন-ডিভাইস টেক্সট রিকগনিশন ব্যবহার করে কীভাবে ছবির মধ্যে টেক্সট খুঁজে বের করবেন
  • ছবিতে মুখের বৈশিষ্ট্য শনাক্ত করতে এমএল কিট-এ অন-ডিভাইস ফেস রিকগনিশন কীভাবে ব্যবহার করবেন

পরবর্তী পদক্ষেপ

  • আপনার নিজের iOS অ্যাপে ML Kit ব্যবহার করুন।

আরও জানুন

  • https://g.co/mlkit