Ir a la consola

Lee códigos de barras con el Kit de AA en iOS

Puedes usar el Kit de AA para reconocer y códigos de barras y decodificarlos

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;

Configura el detector de códigos de barras

Si sabes qué formatos de códigos de barras leerás, puedes configurar el detector de códigos de barras para que solo detecte esos formatos a fin de aumentar su velocidad.

Swift

Por ejemplo, para detectar solo código Aztec y códigos QR, crea un objeto VisionBarcodeDetectorOptions como el del ejemplo siguiente:

let options = VisionBarcodeDetectorOptions()
options.formats = .QRCode | .Aztec

Se admiten los siguientes formatos:

  • Code128
  • Code39
  • Code93
  • CodaBar
  • EAN13
  • EAN8
  • ITF
  • UPCA
  • UPCE
  • DataMatrix
  • Código QR
  • PDF417
  • Azteca

Objective-C

Por ejemplo, para detectar solo código Aztec y códigos QR, crea un objeto FIRVisionBarcodeDetectorOptions como el del ejemplo siguiente:

FIRVisionBarcodeDetectorOptions *options = [[FIRVisionBarcodeDetectorOptions alloc] init];
options.formats = FIRVisionBarcodeFormatQRCode | FIRVisionBarcodeFormatAztec;

Se admiten los siguientes formatos:

  • Code 128 (FIRVisionBarcodeFormatCode128)
  • Code 39 (FIRVisionBarcodeFormatCode39)
  • Code 93 (FIRVisionBarcodeFormatCode93)
  • Codabar (FIRVisionBarcodeFormatCodaBar)
  • EAN-13 (FIRVisionBarcodeFormatEAN13)
  • EAN-8 (FIRVisionBarcodeFormatEAN8)
  • ITF (FIRVisionBarcodeFormatITF)
  • UPC-A (FIRVisionBarcodeFormatUPCA)
  • UPC-E (FIRVisionBarcodeFormatUPCE)
  • Data Matrix (FIRVisionBarcodeFormatDataMatrix)
  • Código QR (FIRVisionBarcodeFormatQRCode)
  • PDF417 (FIRVisionBarcodeFormatPDF417)
  • Aztec (FIRVisionBarcodeFormatAztec)

Ejecuta el detector códigos de barras

Para leer códigos de barras en una imagen, pasa la imagen como un CMSampleBufferRef al método detect(buffer:metadata:) de VisionBarcodeDetector o como una UIImage al método detect(image:metadata:).

  1. Obtén una instancia de VisionBarcodeDetector:

    Swift

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

    Objective-C

    NSError *error;
    FIRMachineLearning *machineLearning = [FIRMachineLearning machineLearning];
    FIRVisionBarcodeDetector *barcodeDetector = [machineLearning barcodeDetectorWithError:&error];
    
    if (error != nil) {
      NSLog(@"Barcode detector creation error: %@", error.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 {
      barcodes = try barcodeDetector.detect(buffer: buffer!, metadata: nil)  // or detect(image:...)
    } catch let error as NSError {
      print("Error: \(error)")
    }
    

    Objective-C

    NSError *barcodeDetectError = nil;
    NSArray *barcodes =
        [barcodeDetector detectInBuffer:buffer  // or detectInImage:...
                               metadata:nil
                                  error:&error];
    if (error != nil) {
      NSLog(@"Barcode detection error: %@", error.localizedDescription);
      return 0;
    }
    

Obtén información de códigos de barras

Si la operación de reconocimiento de códigos de barras se ejecuta correctamente, el detector muestra un arreglo de objetos VisionBarcodeFeature. Cada objeto VisionBarcodeFeature representa un código de barras que se detectó en la imagen. Para cada código de barras, puedes obtener las coordenadas de sus límites en la imagen de entrada, junto con los datos sin procesar codificados en el código de barras. Además, si el detector de códigos de barras pudo determinar el tipo de datos codificados en el código de barras, puedes obtener un objeto que contenga los datos analizados.

Por ejemplo:

Swift

for barcode in barcodes {
  let corners = barcode.cornerPoints

  let displayValue = barcode.displayValue
  let rawValue = barcode.rawValue

  let valueType = barcode.valueType
  switch valueType {
    case .WiFi:
      let ssid = barcode.wifi.ssid
      let password = barcode.wifi.password
      let encryptionType = barcode.wifi.type
    case .URLBookmark:
      let title = barcode.URL.title
      let url = barcode.URL.url
    default:
      // See API reference for all supported value types
  }
}

Objective-C

for (id barcode in barcodes) {
  NSArray corners = barcode.cornerPoints;

  NSString *displayValue = barcode.displayValue;
  NSString *rawValue = barcode.rawValue;

  FIRVisionBarcodeValueType valueType = barcode.valueType;
  switch (valueType) {
    case FIRVisionBarcodeValueTypeWiFi:
      NSString *ssid = barcode.wifi.ssid;
      NSString *password = barcode.wifi.password;
      FIRVisionBarcodeFeatureWiFiEncryptionType encryptionType = barcode.wifi.type;
      break;
    case FIRVisionBarcodeValueTypeURL:
      NSString *url = barcode.URL.url;
      NSString *title = barcode.URL.title;
      break;
  }
}