Migrar da Vision para dispositivos móveis para o Kit de ML no Android

Este documento aborda as etapas necessárias para migrar seus projetos do Google Mobile Vision (GMV) para o kit de ML no Android.

Mudanças gerais na API

Essas mudanças se aplicam a todas as APIs:

  • As APIs GMV retornam um resultado SparseArray<T> de forma síncrona. As APIs do Kit de ML usam a API Task do Google Play Services para retornar resultados de forma assíncrona.
  • O GMV usa a chamada isOperational() na plataforma de API para indicar se um módulo foi baixado e está pronto para uso. O Kit de ML não tem esse método. O Kit de ML gera uma exceção MlKitException.UNAVAILABLE se não foi feito o download de um módulo. Capture essa exceção e processe o próximo frame ou defina um tempo limite e tente novamente com o frame atual.
  • Os métodos GMV usam Frame como entrada. O Kit de ML usa InputImage.
  • O GMV fornece os frameworks MultiDetector, MultiProcessor e FocusingProcessor para executar várias detecções e filtragem de resultados. O Kit de ML não fornece esses mecanismos, mas a mesma funcionalidade pode ser implementada pelo desenvolvedor, se você quiser.

Atualizar importações do Gradle

Atualize as dependências das bibliotecas do Android do Kit de ML no arquivo Gradle do módulo (nível do app), que geralmente é app/build.gradle, de acordo com a tabela a seguir:

API Artefato GMV Artefato do kit de ML
FaceDetector com.google.android.gms:play-services-vision:x.x.x com.google.android.gms:play-services-mlkit-face-detection:17.1.0
BarcodeDetector com.google.android.gms:play-services-vision:x.x.x com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0
TextRecognition com.google.android.gms:play-services-vision:x.x.x com.google.android.gms:play-services-mlkit-text-recognition:19.0.0
CameraSource com.google.android.gms:play-services-vision:x.x.x com.google.mlkit:camera:16.0.0-beta3

Mudanças na API

Esta seção descreve as classes e os métodos correspondentes do GMV e do kit de ML para cada API Vision e mostra como inicializá-la.

FaceDetector

Recodifique a inicialização conforme mostrado neste exemplo:

GMV

detector = new FaceDetector.Builder(context)
    .setMode(FaceDetector.ACCURATE_MODE)
    .setLandmarkType(FaceDetector.ALL_LANDMARKS)
    .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
    .build();

Kit de ML

FaceDetectorOptions options = new FaceDetectorOptions.Builder()
    .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_ACCURATE)
    .setLandmarkMode(FaceDetectorOptions.LANDMARK_MODE_ALL)
    .setClassificationMode(FaceDetectorOptions.CLASSIFICATION_MODE_ALL)
    .build();

detector = FaceDetection.getClient(options);

Mude os seguintes nomes de classes e métodos:

android.gms.vision.face mlkit.vision.face
FaceDetector FaceDetector
SparseArray<Face> detect(Frame frame) Task<List<Face>> process(@NonNull InputImage image)
FaceDetector.Builder.setClassificationType(int classificationType) FaceDetectorOptions.Builder.setClassificationMode(int classificationMode)
NO_CLASSIFICATIONS, ALL_CLASSIFICATIONS CLASSIFICATION_MODE_NONE, CLASSIFICATION_MODE_ALL
FaceDetector.Builder.setLandmarkType(int landmarkType) FaceDetectorOptions.Builder.setLandmarkMode(int landmarkMode)
NO_LANDMARKS, ALL_LANDMARKS, CONTOUR_LANDMARKS LANDMARK_MODE_NONE, LANDMARK_MODE_ALL

use #setContourMode para substituir GMV CONTOUR_{9/}S)

FaceDetector.Builder.setTrackingEnabled(boolean trackingEnabled) FaceDetectorOptions.Builder.enableTracking()
FaceDetector.Builder.setMinFaceSize(float proportionalMinFaceSize) FaceDetectorOptions.Builder.setMinFaceSize(float minFaceSize)
FaceDetector.Builder.setMode(int mode) FaceDetectorOptions.Builder.setPerformanceMode(int performanceMode)
FAST_MODE, ACCURATE_MODE PERFORMANCE_MODE_FAST, PERFORMANCE_MODE_ACCURATE
FaceDetector.Builder.setProminentFaceOnly(boolean prominentFaceOnly) Esta funcionalidade é coberta pelo modo de contorno facial.
Face Face
Contour FaceContour
Landmark FaceLandmark
Face.getContours() Face.getAllContours()
Face.getEulerY() Face.getHeadEulerAngleY()
Face.getEulerZ() Face.getHeadEulerAngleZ()
Face.getId() Face.getTrackingId()
Face.getIsLeftEyeOpenProbability() Face.getLeftEyeOpenProbability()
Face.getIsRightEyeOpenProbability() Face.getRightEyeOpenProbability()
Face.getIsSmilingProbability() Face.getSmilingProbability()
Face.getLandmarks() Face.getLandmark(int landmarkType)
Face.getPosition()
Face.getHeight()
Face.getWidth()
Face.getBoundingBox()

BarcodeDetector

Recodifique a inicialização conforme mostrado neste exemplo:

GMV

barcodeDetector = new BarcodeDetector.Builder(context).build());

Kit de ML

barcodeScanner = BarcodeScanning.getClient();

Mude os seguintes nomes de classes e métodos:

android.gms.vision.barcode mlkit.vision.barcode
BarcodeDetector BarcodeScanner
SparseArray<Barcode> detect(Frame frame) Task<List<Barcode>> process(@NonNull InputImage image)
Barcode Barcode

TextRecognition

Recodifique a inicialização conforme mostrado neste exemplo:

GMV

textRecognizer = new TextRecognizer.Builder(context).build();

Kit de ML

textRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);

Mude os seguintes nomes de classes e métodos:

android.gms.vision.text mlkit.vision.text
TextRecognizer TextRecognizer
SparseArray<TextBlock> detect(Frame frame) Task<Text> process(@NonNull InputImage image)
SparseArray<TextBlock> Text
Line Line
TextBlock TextBlock
Element Element
getLanguage() getRecognizedLanguage()
getBoundingBox() getBoundingBox()
getCornerPoints() getCornerPoints()
TextBlock.getComponents() TextBlock.getLines()
TextBlock.getValue() TextBlock.getText()
Element.getValue() Element.getText()

CameraSource

Se você usa a biblioteca CameraSource fornecida pelo Google Mobile Vision, é possível migrar com facilidade para a biblioteca CameraXSource do Kit de ML, desde que o app esteja sendo executado em uma versão mínima do SDK >= 21.

Mude os seguintes nomes de classes e métodos:

android.gms.vision mlkit.vision.camera
CameraSource CameraSourceConfig
CameraSource.Builder CameraSourceConfig.Builder
CameraSource.Builder.setAutoFocusEnabled O foco automático é fornecido por padrão ao usar o CameraX.
CameraSource.Builder.setFacing CameraSourceConfig.Builder.setCameraFacing
CameraSource.Builder.setFocusMode O foco automático é fornecido por padrão ao usar o CameraX.
CameraSource.Builder.setRequestedFps Obsoleto.
CameraSource.Builder.setRequestedPreviewSize CameraSourceConfig.Builder.setRequestedPreviewSize
CameraSource CameraXSource
new CameraSource.Builder(mContext, detector)....build(); CameraXSource(CameraSourceConfig, PreviewView)
getCameraFacing() getCameraFacing()
getPreviewSize() getPreviewSize()
release() close()
start(SurfaceHolder surfaceHolder) start() // The previewview is set in the CameraSourceConfig
start() start()
stop() stop()
Detector.Processor DetectionTaskCallback
receiveDetections(Detections<T> detections) void onDetectionTaskReceived(@NonNull Task<ResultT> detectionTask);
release() Gerenciado internamente
CameraSource.PictureCallback Descontinuado
CameraSource.ShutterCallback Descontinuado

Receber ajuda

Em caso de problemas, confira nossa Página da comunidade, onde descrevemos os canais disponíveis para entrar em contato conosco.