Ir para o console

Reconhecer texto em imagens (OCR) com o ML Kit no iOS

Você pode usar o ML Kit para reconhecer texto em imagens usando um modelo no dispositivo ou um modelo em nuvem. Consulte a visão geral para saber mais sobre os benefícios de cada abordagem.

Antes de começar

  1. (EAP) Autentique e receba um cookie do Git executando o comando mostrado no site do CPDC EAP.
  2. (EAP) Adicione o repositório do EAP ao Podfile do projeto:
    source ‘https://cpdc-eap.googlesource.com/spec.git’
  3. Conclua as etapas em Adicionar o Firebase ao projeto do iOS. Além da biblioteca principal, inclua a biblioteca do ML Kit no Podfile:
    pod 'FirebaseML'
  4. (EAP) No app, importe o módulo FirebaseML:

    Swift

    import FirebaseML

    Objective-C

    @import FirebaseML;

Já é possível reconhecer texto usando um modelo no dispositivo ou baseado na nuvem.

Reconhecimento de texto no dispositivo

Executar o detector de texto

Para reconhecer texto em uma imagem, passe a imagem como um CMSampleBufferRef ao método detect(buffer:metadata:) de VisionTextDetector ou passe a imagem como um UIImage ao método detect(image:metadata:).

  1. Receba uma instância de VisionTextDetector:

    Swift

    do {
      let textDetector = try FirebaseMachineLearning.machineLearning().textDetector()
    } catch let error as NSError {
      print("Error: \(error)")
    }
    

    Objective-C

    NSError *textError;
    FIRMachineLearning *machineLearning = [FIRMachineLearning machineLearning];
    FIRVisionTextDetector *textDetector = [machineLearning textDetectorWithError:&textError];
    
    if (textError != nil) {
      NSLog(@"Text detector creation error: %@", textError.localizedDescription);
    }
    
  2. Se a imagem não estiver orientada com a primeira linha e a coluna no canto superior esquerdo, especifique a orientação da imagem criando um objeto VisionImageMetadata:

    Swift

    let metadata = VisionImageMetadata()
    metadata.orientation = VisionDetectorImageOrientation.topRight
    

    Objective-C

    FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init];
    metadata.orientation = FIRVisionDetectorImageOrientationTopRight;
    
    Se a imagem estiver orientada de maneira que a primeira linha e a coluna no canto superior esquerdo, bastará passar nil em vez de um objeto de metadados:
  3. Em seguida, passe a imagem ao método detect(buffer:metadata:) ou detect(image:metadata:):

    Swift

    do {
      textBlocks = try textDetector.detect(buffer: buffer!, metadata: nil)  // or detect(image:...)
    } catch let error as NSError {
      print("Error: \(error)")
    }
    

    Objective-C

    NSError *textDetectError = nil;
    NSArray> *textBlocks =
        [textDetector detectInBuffer:buffer  // or detectInImage:...
                            metadata:nil
                               error:&textDetectError];
    if (textDetectError != nil) {
      NSLog(@"Text detection error: %@", textDetectError.localizedDescription);
      return 0;
    }
    

Extrair texto de blocos de texto reconhecido

Se for bem-sucedida, a operação de reconhecimento de texto retornará uma matriz de objetos VisionTextBlockFeature. Cada objeto VisionTextBlockFeature representa um bloco retangular de texto detectado na imagem (como um parágrafo de texto impresso). Para cada VisionTextBlockFeature, é possível receber as coordenadas delimitadoras do bloco e o texto contido no bloco:

Swift

let block = textBlocks[0]
let text = block.recognizedText
let corners = block.cornerPoints

Objective-C

FIRVisionTextBlockFeature *block = textBlocks[0];
NSString *text = block.recognizedText;
NSArray *corners = block.cornerPoints;

Além disso, para cada VisionTextBlockFeature, é possível receber as linhas de texto que constituem o bloco e os elementos, como caracteres ou sinais de pontuação, que constituem cada linha de texto:

Swift

let line = block.lines[0]
let lineText = line.recognizedText
let lineCorners = line.cornerPoints

let elem = line.elements[0]
let elemText = elem.recognizedText
let elemCorners = elem.cornerPoints

Objective-C

FIRVisionTextLineFeature *line = block.lines[0];
NSString *lineText = line.recognizedText;
NSArray *LineCorners = line.cornerPoints;

FIRVisionTextElementFeature *elem = line.elements[0];
NSString *elemText = elem.recognizedText;
NSArray *elemCorners = elem.cornerPoints;

Reconhecimento de texto em nuvem

Em breve.