CloudImageLabelingProcessor.java
/** Cloud Label Detector Demo. */
public class CloudImageLabelingProcessor
    extends VisionProcessorBase> {
  private static final String TAG = "CloudImgLabelProc";

  private final FirebaseVisionCloudLabelDetector detector;

  public CloudImageLabelingProcessor() {
    FirebaseVisionCloudDetectorOptions options =
        new FirebaseVisionCloudDetectorOptions.Builder()
            .setMaxResults(10)
            .setModelType(FirebaseVisionCloudDetectorOptions.STABLE_MODEL)
            .build();

    detector = FirebaseVision.getInstance().getVisionCloudLabelDetector(options);
  }

  @Override
  protected Task> detectInImage(FirebaseVisionImage image) {
    return detector.detectInImage(image);
  }

  @Override
  protected void onSuccess(
      @NonNull List labels,
      @NonNull FrameMetadata frameMetadata,
      @NonNull GraphicOverlay graphicOverlay) {
    graphicOverlay.clear();
    Log.d(TAG, "cloud label size: " + labels.size());
    List labelsStr = new ArrayList<>();
    for (int i = 0; i < labels.size(); ++i) {
      FirebaseVisionCloudLabel label = labels.get(i);
      Log.d(TAG, "cloud label: " + label);
      if (label.getLabel() != null) {
        labelsStr.add((label.getLabel()));
      }
    }
    CloudLabelGraphic cloudLabelGraphic = new CloudLabelGraphic(graphicOverlay);
    graphicOverlay.add(cloudLabelGraphic);
    cloudLabelGraphic.updateLabel(labelsStr);
  }

  @Override
  protected void onFailure(@NonNull Exception e) {
    Log.e(TAG, "Cloud Label detection failed " + e);
  }
}