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.
- Xcode'da, uygulamanız açıkken Dosya > Paket Ekle'yi tıklayın.
- İstendiğinde Firebase Apple platformlar SDK deposunu ekleyin:
- Firebase ML kitaplığını seçin.
-ObjC
işaretini, hedefinizin derleme ayarlarındaki Diğer Bağlayıcı İşaretleri bölümüne ekleyin.- İşlemi tamamladığınızda, Xcode otomatik olarak arka planda tutmalarını sağlayabilirsiniz.
- Uygulamanızda Firebase'i içe aktarın:
Swift
import FirebaseMLModelDownloader
Objective-C
@import FirebaseMLModelDownloader;
-
Projeniz için Cloud tabanlı API'leri henüz etkinleştirmediyseniz etkinleştirin şimdi:
- Firebase ML Firebase konsolunun API'ler sayfası.
-
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.
- Cloud tabanlı API'ler henüz etkinleştirilmemişse Bulut tabanlı API'leri etkinleştir'i tıklayın. API'ler.
Firebase bağımlılıklarını yükleyip yönetmek için Swift Package Manager'ı kullanın.
https://github.com/firebase/firebase-ios-sdk.git.
Sonra, bazı uygulama içi kurulum işlemleri gerçekleştirin:
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
ResmiUIImage
veya CMSampleBufferRef
olarak şuraya aktarın:
VisionTextRecognizer
adlı çocuğun process(_:completion:)
cihazı
yöntem:
- Ş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];
-
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];
-
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 birVisionText
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
- Cloud API kullanan bir uygulamanın üretim sürümüne dağıtım yapmadan önce şunları yapmanız gerekir: önlemek ve etkilerini azaltmak amacıyla neden olabileceğiyle ilgili daha fazla bilgi edinin.
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
ResmiUIImage
veya CMSampleBufferRef
olarak şuraya aktarın:
VisionDocumentTextRecognizer
adlı çocuğun process(_:completion:)
cihazı
yöntem:
- Ş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];
-
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];
-
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 birVisionDocumentText
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
- Cloud API kullanan bir uygulamanın üretim sürümüne dağıtım yapmadan önce şunları yapmanız gerekir: önlemek ve etkilerini azaltmak amacıyla neden olabileceğiyle ilgili daha fazla bilgi edinin.