Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Mengenali Teks dalam Gambar dengan Firebase ML di iOS

Anda dapat menggunakan Firebase ML untuk mengenali teks dalam gambar. Firebase ML memiliki API tujuan umum yang cocok untuk mengenali teks dalam gambar, seperti teks tanda jalan, dan API yang dioptimalkan untuk mengenali teks dokumen.

Sebelum kamu memulai

  1. Jika Anda belum menambahkan Firebase untuk aplikasi Anda, melakukannya dengan mengikuti langkah-langkah dalam panduan untuk memulai .
  2. Sertakan Firebase di Podfile Anda:
    pod 'Firebase/MLVision'
    
    Setelah Anda menginstal atau memperbarui Pods proyek Anda, pastikan untuk membuka proyek Xcode Anda menggunakan nya .xcworkspace .
  3. Di aplikasi Anda, impor Firebase:

    Cepat

    import Firebase

    Objective-C

    @import Firebase;
  4. Jika Anda belum mengaktifkan API berbasis Cloud untuk proyek Anda, lakukan sekarang:

    1. Buka halaman Firebase ML API dari konsol Firebase.
    2. Jika Anda belum upgrade proyek Anda dengan rencana harga Blaze, klik Upgrade untuk melakukannya. (Anda akan diminta untuk memutakhirkan hanya jika proyek Anda tidak ada dalam paket Blaze.)

      Hanya project level Blaze yang dapat menggunakan API berbasis Cloud.

    3. Jika API berbasis Cloud yang belum diaktifkan, klik Aktifkan API berbasis Cloud.

Sekarang Anda siap untuk mulai mengenali teks dalam gambar.

Pedoman gambar masukan

  • Agar Firebase ML dapat mengenali teks secara akurat, gambar masukan harus berisi teks yang diwakili oleh data piksel yang memadai. Idealnya, untuk teks Latin, setiap karakter setidaknya berukuran 16x16 piksel. Untuk teks Cina, Jepang, dan Korea, setiap karakter harus berukuran 24x24 piksel. Untuk semua bahasa, umumnya tidak ada manfaat akurasi untuk karakter yang lebih besar dari 24x24 piksel.

    Jadi, misalnya, gambar 640x480 mungkin berfungsi dengan baik untuk memindai kartu nama yang menempati lebar penuh gambar. Untuk memindai dokumen yang dicetak pada kertas berukuran letter, gambar 720x1280 piksel mungkin diperlukan.

  • Fokus gambar yang buruk dapat merusak akurasi pengenalan teks. Jika Anda tidak mendapatkan hasil yang dapat diterima, coba minta pengguna untuk mengambil kembali gambar tersebut.


Kenali teks dalam gambar

Untuk mengenali teks dalam gambar, jalankan pengenal teks seperti yang dijelaskan di bawah ini.

1. Jalankan pengenal teks

Lulus citra sebagai UIImage atau CMSampleBufferRef ke VisionTextRecognizer 's process(_:completion:) metode:

  1. Dapatkan contoh VisionTextRecognizer dengan memanggil cloudTextRecognizer :

    Cepat

    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. Untuk memanggil Cloud Vision, gambar harus diformat sebagai string berenkode base64. Untuk memproses UIImage :

    Cepat

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

    Objective-C

    NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f);
    NSString *base64encodedImage =
      [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
  3. Kemudian, lulus gambar ke process(_:completion:) metode:

    Cepat

    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. Ekstrak teks dari blok teks yang dikenali

Jika operasi pengakuan teks berhasil, itu akan kembali VisionText objek. Sebuah VisionText objek berisi teks lengkap diakui dalam gambar dan nol atau lebih VisionTextBlock objek.

Setiap VisionTextBlock merupakan blok persegi panjang teks, yang mengandung nol atau lebih VisionTextLine objek. Setiap VisionTextLine objek berisi nol atau lebih VisionTextElement objek, yang mewakili kata-kata dan kata-seperti entitas (tanggal, angka, dan sebagainya).

Untuk setiap VisionTextBlock , VisionTextLine , dan VisionTextElement objek, Anda bisa mendapatkan teks diakui di wilayah tersebut dan koordinat berlari daerah.

Sebagai contoh:

Cepat

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

Langkah selanjutnya


Mengenali teks dalam gambar dokumen

Untuk mengenali teks dokumen, konfigurasikan dan jalankan pengenal teks dokumen seperti yang dijelaskan di bawah ini.

API pengenalan teks dokumen, yang dijelaskan di bawah, menyediakan antarmuka yang dimaksudkan agar lebih nyaman untuk bekerja dengan gambar dokumen. Namun, jika Anda lebih memilih antarmuka yang disediakan oleh API teks jarang, Anda dapat menggunakannya bukan untuk memindai dokumen dengan mengkonfigurasi recognizer teks awan untuk menggunakan model teks padat .

Untuk menggunakan API pengenalan teks dokumen:

1. Jalankan pengenal teks

Lulus citra sebagai UIImage atau CMSampleBufferRef ke VisionDocumentTextRecognizer 's process(_:completion:) metode:

  1. Dapatkan contoh VisionDocumentTextRecognizer dengan memanggil cloudDocumentTextRecognizer :

    Cepat

    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. Untuk memanggil Cloud Vision, gambar harus diformat sebagai string berenkode base64. Untuk memproses UIImage :

    Cepat

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

    Objective-C

    NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f);
    NSString *base64encodedImage =
      [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
  3. Kemudian, lulus gambar ke process(_:completion:) metode:

    Cepat

    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. Ekstrak teks dari blok teks yang dikenali

Jika operasi pengakuan teks berhasil, itu akan kembali VisionDocumentText objek. Sebuah VisionDocumentText objek berisi teks lengkap diakui dalam gambar dan hirarki objek yang mencerminkan struktur dari dokumen yang diakui:

Untuk setiap VisionDocumentTextBlock , VisionDocumentTextParagraph , VisionDocumentTextWord , dan VisionDocumentTextSymbol objek, Anda bisa mendapatkan teks diakui di wilayah tersebut dan koordinat berlari daerah.

Sebagai contoh:

Cepat

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

Langkah selanjutnya