Migrazione da Mobile Vision a ML Kit su Android

Questo documento illustra i passaggi da seguire per eseguire la migrazione dei tuoi progetti da Google Mobile Vision (GMV) a ML Kit su Android.

Modifiche generali all'API

Queste modifiche si applicano a tutte le API:

  • Le API GMV restituiscono un risultato SparseArray<T> in modo sincrono. Le API ML Kit usano l'API Google Play Services Task per restituire i risultati in modo asincrono.
  • GMV utilizza la chiamata isOperational() nella piattaforma API per indicare se un modulo è stato scaricato correttamente ed è pronto per l'uso. ML Kit non ha questo metodo. ML Kit genera un'eccezione MlKitException.UNAVAILABLE se non è stato scaricato un modulo. Puoi individuare questa eccezione ed elaborare il frame successivo oppure impostare un timeout e riprovare con il frame attuale.
  • I metodi RLV utilizzano Frame come input. ML Kit utilizza InputImage.
  • GMV fornisce framework MultiDetector, MultiProcessor e FocusingProcessor per eseguire più rilevamenti e filtrare i risultati. ML Kit non fornisce questi meccanismi, ma la stessa funzionalità può essere implementata dallo sviluppatore, se lo desidera.

Aggiornamento importazioni Gradle

Aggiorna le dipendenze per le librerie Android ML Kit nel file Gradle del modulo (a livello di app), che in genere è app/build.gradle, in base alla tabella seguente:

API Artefatto RLV Artefatto ML Kit
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

Modifiche alle API

Questa sezione descrive le classi e i metodi GMV e ML Kit corrispondenti per ciascuna API Vision e mostra come inizializzare l'API.

FaceDetector

Ricodifica l'inizializzazione come mostrato in questo esempio:

RLV

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

ML Kit

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);

Modifica i seguenti nomi di classi e metodi:

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

utilizza #setContourMode per sostituire GMV CONTOUR_ATS)

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) Questa funzionalità è coperta dalla modalità Contorno volto.
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

Ricodifica l'inizializzazione come mostrato in questo esempio:

RLV

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

ML Kit

barcodeScanner = BarcodeScanning.getClient();

Modifica i seguenti nomi di classi e metodi:

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

TextRecognition

Ricodifica l'inizializzazione come mostrato in questo esempio:

RLV

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

ML Kit

textRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);

Modifica i seguenti nomi di classi e metodi:

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 utilizzi la libreria CameraSource fornita da Google Mobile Vision, puoi eseguire facilmente la migrazione alla libreria CameraXSource di ML Kit, a condizione che l'app sia in esecuzione su una versione minima dell'SDK >= 21.

Modifica i seguenti nomi di classi e metodi:

android.gms.vision mlkit.vision.camera
CameraSource CameraSourceConfig
CameraSource.Builder CameraSourceConfig.Builder
CameraSource.Builder.setAutoFocusEnabled La messa a fuoco automatica è fornita per impostazione predefinita quando si utilizza CameraX.
CameraSource.Builder.setFacing CameraSourceConfig.Builder.setCameraFacing
CameraSource.Builder.setFocusMode La messa a fuoco automatica è fornita per impostazione predefinita quando si utilizza CameraX.
CameraSource.Builder.setRequestedFps Deprecato.
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() Gestita internamente
CameraSource.PictureCallback Deprecata
CameraSource.ShutterCallback Deprecata

Richiesta di aiuto

Se riscontri problemi, consulta la pagina della community in cui sono indicati i canali disponibili per metterti in contatto con noi.