Metin ve yüz özelliklerini tanıma Makine Öğrenimi Kiti: iOS

1. Giriş

ML Kit, Google'ın makine öğrenimi uzmanlığını Android ve iOS uygulamalarına taşıyan, güçlü ancak kullanımı kolay bir mobil SDK'dır. Makine öğrenimine yeni başlamış olsanız da deneyimli olsanız da ihtiyacınız olan işlevleri yalnızca birkaç satır kodla kolayca uygulayabilirsiniz. Başlamak için nöral ağlar veya model optimizasyonu hakkında derinlemesine bilgi sahibi olmanız gerekmez.

İşleyiş şekli

ML Kit, Mobile Vision ve TensorFlow Lite gibi Google'ın makine öğrenimi teknolojilerini tek bir SDK'da bir araya getirerek uygulamalarınızda makine öğrenimi tekniklerini kolayca uygulamanızı sağlar. İster Mobile Vision'ın cihaz üzerinde modellerinin gerçek zamanlı özelliklerinin gücüne, ister özel TensorFlow Lite görüntü sınıflandırma modellerinin esnekliğine ihtiyacınız olsun, ML Kit yalnızca birkaç satır kodla bunu mümkün kılar.

Bu Codelab'de, bir resimdeki metni ve yüz özelliklerini otomatik olarak algılayabilen kendi iOS uygulamanızı oluşturma adımları açıklanmaktadır.

Ne oluşturacaksınız?

Bu codelab'de ML Kiti ile bir iOS uygulaması oluşturacaksınız. Uygulamanız şunları yapabilecek:

  • Resimlerdeki metinleri algılamak için ML Kit Metin Tanıma API'sini kullanma
  • Resimlerdeki yüz özelliklerini belirlemek için ML Kit Yüz Algılama API'sini kullanma

Grace Hopper, ML Kit Yüz Tanıma API'sini gösteriyorÇim üzerinde, metin tanıma API'sini gösteren tabelanın resmi

Neler öğreneceksiniz?

  • ML Kit SDK'yı kullanarak metin tanıma ve yüz özelliği algılama gibi gelişmiş makine öğrenimi özelliklerini herhangi bir iOS uygulamasına kolayca ekleme

Gerekenler

  • Xcode'un son sürümlerinden biri (v12.4+)
  • iOS Simulator veya iOS 10.0 ya da sonraki sürümlerin yüklü olduğu fiziksel bir iOS cihaz
  • ML Kiti yalnızca şu iki 64 bit mimariyi destekler: x86_64 ve arm64
  • Örnek kod
  • Swift ile iOS geliştirme hakkında temel bilgiler
  • Makine öğrenimi modelleri hakkında temel bilgi

Bu codelab, ML Kit'e odaklanmaktadır. Alakalı olmayan kavramlar ve kod blokları işaretlenmiştir ve yalnızca kopyalayıp yapıştırmanız için paylaşılmıştır.

2. Hazırlanma

Kodu İndirme

Bu codelab'in tüm kodunu indirmek için aşağıdaki bağlantıyı tıklayın:

İndirilen ZIP dosyasını açın. Bu işlem, ihtiyacınız olacak tüm kaynakların bulunduğu bir kök klasör (mlkit-ios-codelab) oluşturur. Bu codelab için yalnızca vision alt dizinindeki kaynaklara ihtiyacınız olacak.

mlkit-ios-codelab deposundaki vision alt dizini iki dizin içerir:

  • android_studio_folder.pngstarter: Bu codelab'de temel alacağınız başlangıç kodu.
  • android_studio_folder.pngfinal: Tamamlanmış örnek uygulamanın kodu.

CocoaPods ile ML Kit bağımlılıklarını ekleme

CocoaPods, ML Kit bağımlılıklarını uygulamanıza eklemek için kullanılır. Makinenizde CocoaPods yüklü değilse yükleme talimatlarını burada bulabilirsiniz. Yüklendikten sonra Podfile'ı favori düzenleyicinizde açın ve ML Kit'i bağımlılık olarak ekleyin:

Podfile

platform :ios, '10.0'
use_frameworks!

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

target 'MLKit-codelab' do
end

ML Kit Cocoa Pod'larını yükleme

Tüm bağımlılıkların uygulamanızda kullanılabilir olduğundan emin olmak için ML Kit Cocoa Pod'larını yüklemek üzere komut satırını kullanmanız gerekir.

Komut Satırı

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

3. Başlangıç uygulamasını çalıştırma

Artık uygulamayı ilk kez çalıştırmaya hazırsınız. Uygulamayı derlemek ve iOS simülatöründe çalıştırmak için Xcode'da 98205811bbed9d74.pngÇalıştır'ı tıklayın.

Uygulama, simülatörünüzde başlatılmalıdır. Bu noktada, 2 resim arasında seçim yapmanıza olanak tanıyan bir seçici içeren temel bir düzen görmelisiniz. Sonraki bölümde, resimlerdeki metinleri tanımlamak için uygulamanıza metin tanıma özelliği ekleyeceksiniz.

4. Cihaz üzerinde metin tanıma ekleme

Bu adımda, uygulamanıza resimlerdeki metinleri tanıma işlevi ekleyeceğiz.

MLVision modülünü içe aktarma

ViewController sınıfınıza aşağıdaki içe aktarma işlemlerinin yapıldığını onaylayın.

ViewController.swift

import MLKit

VisionTextRecognizer oluşturma

ViewController sınıfınıza aşağıdaki geç yükleme özelliklerini ekleyin.

ViewController.swift

private lazy var textRecognizer = TextRecognizer.textRecognizer()

Görüntü üzerinde cihaz üzerinde metin tanıma özelliğini ayarlama ve çalıştırma

ViewController sınıfının runTextRecognition yöntemine aşağıdakileri ekleyin:

ViewController.swift

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

Yukarıdaki kod, metin tanıma dedektörünü yapılandırır ve yanıtla birlikte processResult(from:, error:) işlevini çağırır.

Metin tanıma yanıtını işleme

Sonuçları ayrıştırmak ve uygulamanızda göstermek için processResult sınıfındaki ViewController öğesine aşağıdaki kodu ekleyin.

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)
        }
      }
    }
  }

Uygulamayı simülatörde çalıştırma

Şimdi Xcode'da 98205811bbed9d74.pngRun'ı (Çalıştır) tıklayın. Uygulama yüklendikten sonra seçicide Image 1 simgesinin seçili olduğundan emin olun ve Find Text düğmesini tıklayın.

Uygulamanız artık aşağıdaki resimdeki gibi görünmeli, metin tanıma sonuçlarını ve sınırlayıcı kutuları orijinal resmin üzerinde göstermelidir.

7269fd8fcb4dc793.png

Fotoğraf: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0

Tebrikler, ML Kit'i kullanarak uygulamanıza cihaz üzerinde metin tanıma özelliğini eklediniz. Cihaz üzerinde metin tanıma, uygulamanız internete bağlı olmasa bile çalıştığı ve hem hareketsiz görüntülerde hem de canlı video karelerinde kullanılabilecek kadar hızlı olduğu için birçok kullanım alanı için idealdir.

5. Cihaz üzerinde yüz konturu algılama özelliği eklendi

Bu adımda, resimlerdeki yüzlerin hatlarını algılayacak işlevleri uygulamanıza ekleyeceğiz.

FaceDetector oluşturma

ViewController sınıfınıza aşağıdaki geç yükleme özelliklerini ekleyin.

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)

Görüntüde cihaz üzerinde yüz konturu algılamayı ayarlama ve çalıştırma

ViewController sınıfının runFaceContourDetection yöntemine aşağıdakileri ekleyin:

ViewController.swift

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

Yukarıdaki kod, metin tanıma dedektörünü yapılandırır ve yanıtla birlikte processResult(from:, error:) işlevini çağırır.

Yüz algılayıcı yanıtını işleme

Sonuçları ayrıştırmak ve uygulamanızda göstermek için processResult sınıfındaki ViewController öğesine aşağıdaki kodu ekleyin.

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)
    }
  }

Son olarak, kontur noktalarını çizmek için ViewController sınıfına yardımcı yöntemi addContours ekleyin.

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)
      }
    }
  }

Uygulamayı simülatörde çalıştırma

Şimdi Xcode'da 98205811bbed9d74.pngRun'ı (Çalıştır) tıklayın. Uygulama yüklendikten sonra seçicide Image 2 simgesinin seçili olduğundan emin olun ve Find Face Contour düğmesini tıklayın. Uygulamanız artık aşağıdaki resimdeki gibi görünmeli ve orijinal resmin üzerine yerleştirilmiş noktalarla Grace Hopper'ın yüzünün hatlarını göstermelidir.

a5169b50dafbcb2f.png

Tebrikler, ML Kiti yüz kontur algılama özelliğini kullanarak uygulamanıza cihaz üzerinde yüz kontur algılama özelliğini eklediniz. Bu özellik, uygulamanızın internet bağlantısı olmasa bile çalıştığı ve hem hareketsiz görüntülerde hem de canlı video karelerinde kullanılabilecek kadar hızlı olduğu için birçok kullanım alanı için idealdir.

6. Tebrikler!

Uygulamanıza kolayca gelişmiş makine öğrenimi özellikleri eklemek için ML Kit'i kullanmış olmanız gerekir.

İşlediğimiz konular

  • iOS uygulamanıza ML Kit'i ekleme
  • Resimlerdeki metinleri bulmak için ML Kit'te cihaz üzerinde metin tanıma nasıl kullanılır?
  • Resimlerdeki yüz özelliklerini belirlemek için ML Kit'teki cihaz üzerinde yüz tanıma özelliğini kullanma

Sonraki Adımlar

  • ML Kit'i kendi iOS uygulamanızda kullanın.

Daha Fazla Bilgi

  • https://g.co/mlkit