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çãoMlKitException.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 usaInputImage
. - O GMV fornece os frameworks
MultiDetector
,MultiProcessor
eFocusingProcessor
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 |
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.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.