Ir a la consola

Reconoce texto en imágenes (OCR) con el Kit de AA en iOS

Puedes usar el Kit de AA para reconocer texto en imágenes mediante un modelo en el dispositivo o un modelo en la nube. Consulta la descripción general para obtener más información sobre los beneficios de cada enfoque.

Antes de comenzar

  1. (EAP) Autentica y obtén una cookie para Git, mediante la ejecución del comando que se muestra en el sitio CPDC EAP.
  2. (EAP) Agrega el repositorio de EAP al Podfile de tu proyecto:
    source ‘https://cpdc-eap.googlesource.com/spec.git’
  3. Completa los pasos en Agrega Firebase a tu proyecto de iOS. Además de la biblioteca principal, incluye la biblioteca del Kit de AA en tu Podfile:
    pod 'FirebaseML'
  4. (EAP) En tu app, importa el módulo FirebaseML:

    Swift

    import FirebaseML

    Objective-C

    @import FirebaseML;

Ahora estás listo para reconocer texto mediante un modelo en el dispositivo o un modelo basado en la nube.

Reconocimiento de texto en el dispositivo

Ejecuta el detector de texto

Para reconocer texto en una imagen, pasa la imagen como un CMSampleBufferRef al método VisionTextDetector de detect(buffer:metadata:) o como una UIImage al método detect(image:metadata:).

  1. Obtén una instancia 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. Si tu imagen no está orientada con la primera fila y columna de la esquina superior izquierda, crea un objeto VisionImageMetadata para especificar también la orientación de la imagen:

    Swift

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

    Objective-C

    FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init];
    metadata.orientation = FIRVisionDetectorImageOrientationTopRight;
    
    Si tu imagen está orientada con la primera fila y columna en la esquina superior izquierda, simplemente puedes pasar nil en lugar de un objeto de metadatos:
  3. Luego, pasa la imagen al método detect(buffer:metadata:) o 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;
    }
    

Extrae texto desde bloques de texto reconocido

Si la operación de reconocimiento de texto se ejecuta correctamente, se mostrará un arreglo de objetos VisionTextBlockFeature. Cada objeto VisionTextBlockFeature representa un bloque rectangular de texto que se detectó en la imagen (por ejemplo, un párrafo de texto impreso). Para cada VisionTextBlockFeature, puedes obtener las coordenadas de límites del bloque y el texto contenido en el bloque:

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;

Además, para cada VisionTextBlockFeature, puedes obtener las líneas de texto que conforman el bloque y los elementos, como los caracteres o los signos de puntuación, que conforman cada línea 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;

Reconocimiento de texto en la nube

Disponible próximamente