Entérate de todos los anuncios de Firebase Summit y descubre cómo Firebase puede ayudarte a acelerar el desarrollo de las apps y a ejecutarlas con confianza. Más información

Etiquetar imágenes con Firebase ML en plataformas Apple

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Puedes usar Firebase ML para etiquetar objetos reconocidos en una imagen. Consulte la descripción general para obtener información sobre las funciones de esta API.

Antes de que empieces

    Si aún no ha agregado Firebase a su aplicación, hágalo siguiendo los pasos de la guía de inicio .

    Use Swift Package Manager para instalar y administrar las dependencias de Firebase.

    1. En Xcode, con su proyecto de aplicación abierto, vaya a Archivo > Agregar paquetes .
    2. Cuando se le solicite, agregue el repositorio del SDK de las plataformas Apple de Firebase:
    3.   https://github.com/firebase/firebase-ios-sdk
    4. Elija la biblioteca Firebase ML.
    5. Cuando termine, Xcode comenzará a resolver y descargar automáticamente sus dependencias en segundo plano.

    A continuación, realice alguna configuración en la aplicación:

    1. En su aplicación, importe Firebase:

      Rápido

      import FirebaseMLModelDownloader

      C objetivo

      @import FirebaseMLModelDownloader;
  1. Si aún no ha habilitado las API basadas en la nube para su proyecto, hágalo ahora:

    1. Abra la página de las API de Firebase ML de la consola de Firebase.
    2. Si aún no ha actualizado su proyecto al plan de precios de Blaze, haga clic en Actualizar para hacerlo. (Se le pedirá que actualice solo si su proyecto no está en el plan Blaze).

      Solo los proyectos de nivel Blaze pueden usar API basadas en la nube.

    3. Si las API basadas en la nube aún no están habilitadas, haga clic en Habilitar API basadas en la nube .

Ahora está listo para etiquetar imágenes.

1. Preparar la imagen de entrada

Cree un objeto VisionImage usando UIImage o CMSampleBufferRef .

Para usar una UIImage :

  1. Si es necesario, gire la imagen para que su propiedad imageOrientation sea .up .
  2. Cree un objeto VisionImage usando la UIImage girada correctamente. No especifique ningún metadato de rotación; se debe usar el valor predeterminado, .topLeft .

    Rápido

    let image = VisionImage(image: uiImage)

    C objetivo

    FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];

Para usar un CMSampleBufferRef :

  1. Cree un objeto VisionImageMetadata que especifique la orientación de los datos de imagen contenidos en el búfer CMSampleBufferRef .

    Para obtener la orientación de la imagen:

    Rápido

    func imageOrientation(
        deviceOrientation: UIDeviceOrientation,
        cameraPosition: AVCaptureDevice.Position
        ) -> VisionDetectorImageOrientation {
        switch deviceOrientation {
        case .portrait:
            return cameraPosition == .front ? .leftTop : .rightTop
        case .landscapeLeft:
            return cameraPosition == .front ? .bottomLeft : .topLeft
        case .portraitUpsideDown:
            return cameraPosition == .front ? .rightBottom : .leftBottom
        case .landscapeRight:
            return cameraPosition == .front ? .topRight : .bottomRight
        case .faceDown, .faceUp, .unknown:
            return .leftTop
        }
    }

    C objetivo

    - (FIRVisionDetectorImageOrientation)
        imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation
                               cameraPosition:(AVCaptureDevicePosition)cameraPosition {
      switch (deviceOrientation) {
        case UIDeviceOrientationPortrait:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationLeftTop;
          } else {
            return FIRVisionDetectorImageOrientationRightTop;
          }
        case UIDeviceOrientationLandscapeLeft:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationBottomLeft;
          } else {
            return FIRVisionDetectorImageOrientationTopLeft;
          }
        case UIDeviceOrientationPortraitUpsideDown:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationRightBottom;
          } else {
            return FIRVisionDetectorImageOrientationLeftBottom;
          }
        case UIDeviceOrientationLandscapeRight:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationTopRight;
          } else {
            return FIRVisionDetectorImageOrientationBottomRight;
          }
        default:
          return FIRVisionDetectorImageOrientationTopLeft;
      }
    }

    Luego, crea el objeto de metadatos:

    Rápido

    let cameraPosition = AVCaptureDevice.Position.back  // Set to the capture device you used.
    let metadata = VisionImageMetadata()
    metadata.orientation = imageOrientation(
        deviceOrientation: UIDevice.current.orientation,
        cameraPosition: cameraPosition
    )

    C objetivo

    FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init];
    AVCaptureDevicePosition cameraPosition =
        AVCaptureDevicePositionBack;  // Set to the capture device you used.
    metadata.orientation =
        [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation
                                     cameraPosition:cameraPosition];
  2. Cree un objeto VisionImage utilizando el objeto CMSampleBufferRef y los metadatos de rotación:

    Rápido

    let image = VisionImage(buffer: sampleBuffer)
    image.metadata = metadata

    C objetivo

    FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer];
    image.metadata = metadata;

2. Configure y ejecute el etiquetador de imágenes

Para etiquetar objetos en una imagen, pase el objeto VisionImage al VisionImageLabeler processImage() de VisionImageLabeler.

  1. Primero, obtenga una instancia de VisionImageLabeler :

    Rápido

    let labeler = Vision.vision().cloudImageLabeler()
    
    // Or, to set the minimum confidence required:
    // let options = VisionCloudImageLabelerOptions()
    // options.confidenceThreshold = 0.7
    // let labeler = Vision.vision().cloudImageLabeler(options: options)
    

    C objetivo

    FIRVisionImageLabeler *labeler = [[FIRVision vision] cloudImageLabeler];
    
    // Or, to set the minimum confidence required:
    // FIRVisionCloudImageLabelerOptions *options =
    //         [[FIRVisionCloudImageLabelerOptions alloc] init];
    // options.confidenceThreshold = 0.7;
    // FIRVisionImageLabeler *labeler =
    //         [[FIRVision vision] cloudImageLabelerWithOptions:options];
    
  2. Luego, pasa la imagen al método processImage() :

    Rápido

    labeler.process(image) { labels, error in
        guard error == nil, let labels = labels else { return }
    
        // Task succeeded.
        // ...
    }
    

    C objetivo

    [labeler processImage:image
               completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels,
                            NSError *_Nullable error) {
                   if (error != nil) { return; }
    
                   // Task succeeded.
                   // ...
               }];
    

3. Obtener información sobre objetos etiquetados

Si el etiquetado de imágenes tiene éxito, se pasará una matriz de objetos VisionImageLabel al controlador de finalización. De cada objeto, puede obtener información sobre una característica reconocida en la imagen.

Por ejemplo:

Rápido

for label in labels {
    let labelText = label.text
    let entityId = label.entityID
    let confidence = label.confidence
}

C objetivo

for (FIRVisionImageLabel *label in labels) {
   NSString *labelText = label.text;
   NSString *entityId = label.entityID;
   NSNumber *confidence = label.confidence;
}

Próximos pasos

,

Puedes usar Firebase ML para etiquetar objetos reconocidos en una imagen. Consulte la descripción general para obtener información sobre las funciones de esta API.

Antes de que empieces

    Si aún no ha agregado Firebase a su aplicación, hágalo siguiendo los pasos de la guía de inicio .

    Use Swift Package Manager para instalar y administrar las dependencias de Firebase.

    1. En Xcode, con su proyecto de aplicación abierto, vaya a Archivo > Agregar paquetes .
    2. Cuando se le solicite, agregue el repositorio del SDK de las plataformas Apple de Firebase:
    3.   https://github.com/firebase/firebase-ios-sdk
    4. Elija la biblioteca Firebase ML.
    5. Cuando termine, Xcode comenzará a resolver y descargar automáticamente sus dependencias en segundo plano.

    A continuación, realice alguna configuración en la aplicación:

    1. En su aplicación, importe Firebase:

      Rápido

      import FirebaseMLModelDownloader

      C objetivo

      @import FirebaseMLModelDownloader;
  1. Si aún no ha habilitado las API basadas en la nube para su proyecto, hágalo ahora:

    1. Abra la página de las API de Firebase ML de la consola de Firebase.
    2. Si aún no ha actualizado su proyecto al plan de precios de Blaze, haga clic en Actualizar para hacerlo. (Se le pedirá que actualice solo si su proyecto no está en el plan Blaze).

      Solo los proyectos de nivel Blaze pueden usar API basadas en la nube.

    3. Si las API basadas en la nube aún no están habilitadas, haga clic en Habilitar API basadas en la nube .

Ahora está listo para etiquetar imágenes.

1. Preparar la imagen de entrada

Cree un objeto VisionImage usando UIImage o CMSampleBufferRef .

Para usar una UIImage :

  1. Si es necesario, gire la imagen para que su propiedad imageOrientation sea .up .
  2. Cree un objeto VisionImage usando la UIImage girada correctamente. No especifique ningún metadato de rotación; se debe usar el valor predeterminado, .topLeft .

    Rápido

    let image = VisionImage(image: uiImage)

    C objetivo

    FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];

Para usar un CMSampleBufferRef :

  1. Cree un objeto VisionImageMetadata que especifique la orientación de los datos de imagen contenidos en el búfer CMSampleBufferRef .

    Para obtener la orientación de la imagen:

    Rápido

    func imageOrientation(
        deviceOrientation: UIDeviceOrientation,
        cameraPosition: AVCaptureDevice.Position
        ) -> VisionDetectorImageOrientation {
        switch deviceOrientation {
        case .portrait:
            return cameraPosition == .front ? .leftTop : .rightTop
        case .landscapeLeft:
            return cameraPosition == .front ? .bottomLeft : .topLeft
        case .portraitUpsideDown:
            return cameraPosition == .front ? .rightBottom : .leftBottom
        case .landscapeRight:
            return cameraPosition == .front ? .topRight : .bottomRight
        case .faceDown, .faceUp, .unknown:
            return .leftTop
        }
    }

    C objetivo

    - (FIRVisionDetectorImageOrientation)
        imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation
                               cameraPosition:(AVCaptureDevicePosition)cameraPosition {
      switch (deviceOrientation) {
        case UIDeviceOrientationPortrait:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationLeftTop;
          } else {
            return FIRVisionDetectorImageOrientationRightTop;
          }
        case UIDeviceOrientationLandscapeLeft:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationBottomLeft;
          } else {
            return FIRVisionDetectorImageOrientationTopLeft;
          }
        case UIDeviceOrientationPortraitUpsideDown:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationRightBottom;
          } else {
            return FIRVisionDetectorImageOrientationLeftBottom;
          }
        case UIDeviceOrientationLandscapeRight:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationTopRight;
          } else {
            return FIRVisionDetectorImageOrientationBottomRight;
          }
        default:
          return FIRVisionDetectorImageOrientationTopLeft;
      }
    }

    Luego, crea el objeto de metadatos:

    Rápido

    let cameraPosition = AVCaptureDevice.Position.back  // Set to the capture device you used.
    let metadata = VisionImageMetadata()
    metadata.orientation = imageOrientation(
        deviceOrientation: UIDevice.current.orientation,
        cameraPosition: cameraPosition
    )

    C objetivo

    FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init];
    AVCaptureDevicePosition cameraPosition =
        AVCaptureDevicePositionBack;  // Set to the capture device you used.
    metadata.orientation =
        [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation
                                     cameraPosition:cameraPosition];
  2. Cree un objeto VisionImage utilizando el objeto CMSampleBufferRef y los metadatos de rotación:

    Rápido

    let image = VisionImage(buffer: sampleBuffer)
    image.metadata = metadata

    C objetivo

    FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer];
    image.metadata = metadata;

2. Configure y ejecute el etiquetador de imágenes

Para etiquetar objetos en una imagen, pase el objeto VisionImage al VisionImageLabeler processImage() de VisionImageLabeler.

  1. Primero, obtenga una instancia de VisionImageLabeler :

    Rápido

    let labeler = Vision.vision().cloudImageLabeler()
    
    // Or, to set the minimum confidence required:
    // let options = VisionCloudImageLabelerOptions()
    // options.confidenceThreshold = 0.7
    // let labeler = Vision.vision().cloudImageLabeler(options: options)
    

    C objetivo

    FIRVisionImageLabeler *labeler = [[FIRVision vision] cloudImageLabeler];
    
    // Or, to set the minimum confidence required:
    // FIRVisionCloudImageLabelerOptions *options =
    //         [[FIRVisionCloudImageLabelerOptions alloc] init];
    // options.confidenceThreshold = 0.7;
    // FIRVisionImageLabeler *labeler =
    //         [[FIRVision vision] cloudImageLabelerWithOptions:options];
    
  2. Luego, pasa la imagen al método processImage() :

    Rápido

    labeler.process(image) { labels, error in
        guard error == nil, let labels = labels else { return }
    
        // Task succeeded.
        // ...
    }
    

    C objetivo

    [labeler processImage:image
               completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels,
                            NSError *_Nullable error) {
                   if (error != nil) { return; }
    
                   // Task succeeded.
                   // ...
               }];
    

3. Obtener información sobre objetos etiquetados

Si el etiquetado de imágenes tiene éxito, se pasará una matriz de objetos VisionImageLabel al controlador de finalización. De cada objeto, puede obtener información sobre una característica reconocida en la imagen.

Por ejemplo:

Rápido

for label in labels {
    let labelText = label.text
    let entityId = label.entityID
    let confidence = label.confidence
}

C objetivo

for (FIRVisionImageLabel *label in labels) {
   NSString *labelText = label.text;
   NSString *entityId = label.entityID;
   NSNumber *confidence = label.confidence;
}

Próximos pasos