iOS'te Firebase ML ile Görsellerdeki Metinleri Tanıma

Resimlerdeki metinleri tanımak için Firebase ML özelliğini kullanabilirsiniz. Firebase ML, hem resimlerdeki metinleri tanımaya uygun genel amaçlı bir API hem de metni tanımak için optimize edilmiş bir API ve bir sokak işaretinin metni yardımcı olur.

ziyaret edin.

Başlamadan önce

    Firebase'i uygulamanıza henüz eklemediyseniz başlangıç kılavuzundaki adımlara bakın.

    Firebase bağımlılıklarını yükleyip yönetmek için Swift Package Manager'ı kullanın.

    1. Xcode'da, uygulamanız açıkken Dosya > Paket Ekle'yi tıklayın.
    2. İstendiğinde Firebase Apple platformlar SDK deposunu ekleyin:
    3.   https://github.com/firebase/firebase-ios-sdk.git
      .
    4. Firebase ML kitaplığını seçin.
    5. -ObjC işaretini, hedefinizin derleme ayarlarındaki Diğer Bağlayıcı İşaretleri bölümüne ekleyin.
    6. İşlemi tamamladığınızda, Xcode otomatik olarak arka planda tutmalarını sağlayabilirsiniz.

    Sonra, bazı uygulama içi kurulum işlemleri gerçekleştirin:

    1. Uygulamanızda Firebase'i içe aktarın:

      Swift

      import FirebaseMLModelDownloader

      Objective-C

      @import FirebaseMLModelDownloader;
  1. Projeniz için Cloud tabanlı API'leri henüz etkinleştirmediyseniz etkinleştirin şimdi:

    1. Firebase ML Firebase konsolunun API'ler sayfası.
    2. Projenizi daha önce Blaze fiyatlandırma planına yükseltmediyseniz Bunun için yeni sürüme geçin. (Yalnızca emin olun.)

      Bulut tabanlı API'ler yalnızca Blaze düzeyindeki projelerde kullanılabilir.

    3. Cloud tabanlı API'ler henüz etkinleştirilmemişse Bulut tabanlı API'leri etkinleştir'i tıklayın. API'ler.
    ziyaret edin.

Artık resimlerdeki metinleri tanımaya hazırsınız.

Giriş resmi kuralları

  • Firebase ML ürününün metni doğru bir şekilde tanıyabilmesi için giriş resimleri şunları içermelidir: yeterli piksel verisi ile temsil edilen metin. İdeal olarak, Latince metin, her karakter en az 16x16 piksel olmalıdır. Çince için Japonca ve Korece metin, karakter 24x24 piksel olmalıdır. Tüm dillerde genellikle daha doğru olması gerekir.

    Bu nedenle, örneğin, 640x480 boyutunda bir resim, kartvizit taraması için iyi performans bir resim seçin. Üzerine yazdırılmış bir dokümanı taramak için büyük harf kullanıyorsanız 720x1280 piksel boyutunda bir resim gerekebilir.

  • Zayıf resim odağı, metin tanıma doğruluğunu olumsuz etkileyebilir. Uygun değilseniz kabul edilebilir sonuçlar alıyorsanız kullanıcıdan resmi yeniden çekmesini isteyin.


Resimlerdeki metinleri tanıyın

Görseldeki metni tanımak için metin tanıyıcıyı açıklandığı şekilde çalıştırın bölümüne göz atın.

1. Metin tanıyıcıyı çalıştır

Resmi UIImage veya CMSampleBufferRef olarak şuraya aktarın: VisionTextRecognizer adlı çocuğun process(_:completion:) cihazı yöntem:

  1. Şu numarayı arayarak VisionTextRecognizer örneğini alın: cloudTextRecognizer:

    Swift

    let vision = Vision.vision()
    let textRecognizer = vision.cloudTextRecognizer()
    
    // Or, to provide language hints to assist with language detection:
    // See https://cloud.google.com/vision/docs/languages for supported languages
    let options = VisionCloudTextRecognizerOptions()
    options.languageHints = ["en", "hi"]
    let textRecognizer = vision.cloudTextRecognizer(options: options)
    

    Objective-C

    FIRVision *vision = [FIRVision vision];
    FIRVisionTextRecognizer *textRecognizer = [vision cloudTextRecognizer];
    
    // Or, to provide language hints to assist with language detection:
    // See https://cloud.google.com/vision/docs/languages for supported languages
    FIRVisionCloudTextRecognizerOptions *options =
            [[FIRVisionCloudTextRecognizerOptions alloc] init];
    options.languageHints = @[@"en", @"hi"];
    FIRVisionTextRecognizer *textRecognizer = [vision cloudTextRecognizerWithOptions:options];
    
  2. Cloud Vision'ı çağırmak için görüntünün base64 kodlu dize. Bir UIImage öğesini işlemek için:

    Swift

    guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return }
    let base64encodedImage = imageData.base64EncodedString()

    Objective-C

    NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f);
    NSString *base64encodedImage =
      [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
  3. Ardından resmi process(_:completion:) yöntemine iletin:

    Swift

    textRecognizer.process(visionImage) { result, error in
      guard error == nil, let result = result else {
        // ...
        return
      }
    
      // Recognized text
    }
    

    Objective-C

    [textRecognizer processImage:image
                      completion:^(FIRVisionText *_Nullable result,
                                   NSError *_Nullable error) {
      if (error != nil || result == nil) {
        // ...
        return;
      }
    
      // Recognized text
    }];
    

2. Tanınan metin bloklarındaki metni ayıkla

Metin tanıma işlemi başarılı olursa, yeni bir VisionText nesnesini tanımlayın. Bir VisionText nesnesi tam metni içeriyor resimde tanındı ve sıfır veya daha fazla VisionTextBlock nesneler'i tıklayın.

Her VisionTextBlock, dikdörtgen bir metin bloğunu temsil eder. sıfır veya daha fazla VisionTextLine nesne. Her VisionTextLine nesne sıfır veya daha fazla VisionTextElement nesne içeriyorsa, Bunlar, kelimeleri ve kelime benzeri varlıkları (tarihler, sayılar vb.) temsil eder.

Her VisionTextBlock, VisionTextLine ve VisionTextElement nesnesi için metnin bölgede tanındığını ve bu bölgenin sınırlayıcı koordinatlarının bölge.

Örneğin:

Swift

let resultText = result.text
for block in result.blocks {
    let blockText = block.text
    let blockConfidence = block.confidence
    let blockLanguages = block.recognizedLanguages
    let blockCornerPoints = block.cornerPoints
    let blockFrame = block.frame
    for line in block.lines {
        let lineText = line.text
        let lineConfidence = line.confidence
        let lineLanguages = line.recognizedLanguages
        let lineCornerPoints = line.cornerPoints
        let lineFrame = line.frame
        for element in line.elements {
            let elementText = element.text
            let elementConfidence = element.confidence
            let elementLanguages = element.recognizedLanguages
            let elementCornerPoints = element.cornerPoints
            let elementFrame = element.frame
        }
    }
}

Objective-C

NSString *resultText = result.text;
for (FIRVisionTextBlock *block in result.blocks) {
  NSString *blockText = block.text;
  NSNumber *blockConfidence = block.confidence;
  NSArray<FIRVisionTextRecognizedLanguage *> *blockLanguages = block.recognizedLanguages;
  NSArray<NSValue *> *blockCornerPoints = block.cornerPoints;
  CGRect blockFrame = block.frame;
  for (FIRVisionTextLine *line in block.lines) {
    NSString *lineText = line.text;
    NSNumber *lineConfidence = line.confidence;
    NSArray<FIRVisionTextRecognizedLanguage *> *lineLanguages = line.recognizedLanguages;
    NSArray<NSValue *> *lineCornerPoints = line.cornerPoints;
    CGRect lineFrame = line.frame;
    for (FIRVisionTextElement *element in line.elements) {
      NSString *elementText = element.text;
      NSNumber *elementConfidence = element.confidence;
      NSArray<FIRVisionTextRecognizedLanguage *> *elementLanguages = element.recognizedLanguages;
      NSArray<NSValue *> *elementCornerPoints = element.cornerPoints;
      CGRect elementFrame = element.frame;
    }
  }
}

Sonraki adımlar


Belge resimlerindeki metinleri tanıyın

Bir dokümanın metnini tanımak için, doküman metni tanıyıcıyı kullanın.

Aşağıda açıklanan doküman metni tanıma API'si, Google Cloud Platform'un doküman resimleriyle çalışırken daha kullanışlı olması amaçlanmıştır. Ancak, seyrek metin API'si tarafından sağlanan arayüzü tercih ederseniz bunu kullanabilirsiniz yapılandırarak dokümanları taramak yerine Cloud metin tanıyıcıyı yoğun metin modelini kullanın.

Doküman metni tanıma API'sini kullanmak için:

1. Metin tanıyıcıyı çalıştır

Resmi UIImage veya CMSampleBufferRef olarak şuraya aktarın: VisionDocumentTextRecognizer adlı çocuğun process(_:completion:) cihazı yöntem:

  1. Şu numarayı arayarak VisionDocumentTextRecognizer örneğini alın: cloudDocumentTextRecognizer:

    Swift

    let vision = Vision.vision()
    let textRecognizer = vision.cloudDocumentTextRecognizer()
    
    // Or, to provide language hints to assist with language detection:
    // See https://cloud.google.com/vision/docs/languages for supported languages
    let options = VisionCloudDocumentTextRecognizerOptions()
    options.languageHints = ["en", "hi"]
    let textRecognizer = vision.cloudDocumentTextRecognizer(options: options)
    

    Objective-C

    FIRVision *vision = [FIRVision vision];
    FIRVisionDocumentTextRecognizer *textRecognizer = [vision cloudDocumentTextRecognizer];
    
    // Or, to provide language hints to assist with language detection:
    // See https://cloud.google.com/vision/docs/languages for supported languages
    FIRVisionCloudDocumentTextRecognizerOptions *options =
            [[FIRVisionCloudDocumentTextRecognizerOptions alloc] init];
    options.languageHints = @[@"en", @"hi"];
    FIRVisionDocumentTextRecognizer *textRecognizer = [vision cloudDocumentTextRecognizerWithOptions:options];
    
  2. Cloud Vision'ı çağırmak için görüntünün base64 kodlu dize. Bir UIImage öğesini işlemek için:

    Swift

    guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return }
    let base64encodedImage = imageData.base64EncodedString()

    Objective-C

    NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f);
    NSString *base64encodedImage =
      [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
  3. Ardından resmi process(_:completion:) yöntemine iletin:

    Swift

    textRecognizer.process(visionImage) { result, error in
      guard error == nil, let result = result else {
        // ...
        return
      }
    
      // Recognized text
    }
    

    Objective-C

    [textRecognizer processImage:image
                      completion:^(FIRVisionDocumentText *_Nullable result,
                                   NSError *_Nullable error) {
      if (error != nil || result == nil) {
        // ...
        return;
      }
    
        // Recognized text
    }];
    

2. Tanınan metin bloklarındaki metni ayıkla

Metin tanıma işlemi başarılı olursa, yeni bir VisionDocumentText nesnesini tanımlayın. VisionDocumentText nesnesi resimde tanınan tam metni ve tanınan belgenin yapısını yansıtmalıdır:

Her VisionDocumentTextBlock, VisionDocumentTextParagraph için VisionDocumentTextWord ve VisionDocumentTextSymbol nesnesini içeriyorsa bölgede tanınan metin ve bölgenin sınırlayıcı koordinatları.

Örneğin:

Swift

let resultText = result.text
for block in result.blocks {
    let blockText = block.text
    let blockConfidence = block.confidence
    let blockRecognizedLanguages = block.recognizedLanguages
    let blockBreak = block.recognizedBreak
    let blockCornerPoints = block.cornerPoints
    let blockFrame = block.frame
    for paragraph in block.paragraphs {
        let paragraphText = paragraph.text
        let paragraphConfidence = paragraph.confidence
        let paragraphRecognizedLanguages = paragraph.recognizedLanguages
        let paragraphBreak = paragraph.recognizedBreak
        let paragraphCornerPoints = paragraph.cornerPoints
        let paragraphFrame = paragraph.frame
        for word in paragraph.words {
            let wordText = word.text
            let wordConfidence = word.confidence
            let wordRecognizedLanguages = word.recognizedLanguages
            let wordBreak = word.recognizedBreak
            let wordCornerPoints = word.cornerPoints
            let wordFrame = word.frame
            for symbol in word.symbols {
                let symbolText = symbol.text
                let symbolConfidence = symbol.confidence
                let symbolRecognizedLanguages = symbol.recognizedLanguages
                let symbolBreak = symbol.recognizedBreak
                let symbolCornerPoints = symbol.cornerPoints
                let symbolFrame = symbol.frame
            }
        }
    }
}

Objective-C

NSString *resultText = result.text;
for (FIRVisionDocumentTextBlock *block in result.blocks) {
  NSString *blockText = block.text;
  NSNumber *blockConfidence = block.confidence;
  NSArray<FIRVisionTextRecognizedLanguage *> *blockRecognizedLanguages = block.recognizedLanguages;
  FIRVisionTextRecognizedBreak *blockBreak = block.recognizedBreak;
  CGRect blockFrame = block.frame;
  for (FIRVisionDocumentTextParagraph *paragraph in block.paragraphs) {
    NSString *paragraphText = paragraph.text;
    NSNumber *paragraphConfidence = paragraph.confidence;
    NSArray<FIRVisionTextRecognizedLanguage *> *paragraphRecognizedLanguages = paragraph.recognizedLanguages;
    FIRVisionTextRecognizedBreak *paragraphBreak = paragraph.recognizedBreak;
    CGRect paragraphFrame = paragraph.frame;
    for (FIRVisionDocumentTextWord *word in paragraph.words) {
      NSString *wordText = word.text;
      NSNumber *wordConfidence = word.confidence;
      NSArray<FIRVisionTextRecognizedLanguage *> *wordRecognizedLanguages = word.recognizedLanguages;
      FIRVisionTextRecognizedBreak *wordBreak = word.recognizedBreak;
      CGRect wordFrame = word.frame;
      for (FIRVisionDocumentTextSymbol *symbol in word.symbols) {
        NSString *symbolText = symbol.text;
        NSNumber *symbolConfidence = symbol.confidence;
        NSArray<FIRVisionTextRecognizedLanguage *> *symbolRecognizedLanguages = symbol.recognizedLanguages;
        FIRVisionTextRecognizedBreak *symbolBreak = symbol.recognizedBreak;
        CGRect symbolFrame = symbol.frame;
      }
    }
  }
}

Sonraki adımlar