Questo documento illustra i passaggi da seguire per eseguire la migrazione dei 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 utilizzano l'API Task di Google Play Services per restituire i risultati in modo asincrono. - GMV utilizza la chiamata
isOperational()
nell'interfaccia API per indicare se un modulo è stato scaricato correttamente ed è pronto per l'uso. ML Kit non ha un metodo simile. ML Kit genera un'eccezioneMlKitException.UNAVAILABLE
se un modulo non è stato scaricato. Puoi intercettare questa eccezione ed elaborare il frame successivo o impostare un timeout e riprovare con il frame corrente. - I metodi GMV utilizzano
Frame
per l'input. ML Kit utilizzaInputImage
. - GMV fornisce framework
MultiDetector
,MultiProcessor
eFocusingProcessor
per eseguire più rilevamenti e filtrare i risultati. ML Kit non fornisce questi meccanismi, ma se lo desidera, lo sviluppatore può implementare la stessa funzionalità.
Aggiorna le importazioni di Gradle
Aggiorna le dipendenze per le librerie Android di ML Kit nel file Gradle del modulo (a livello di app), che in genere è app/build.gradle
, in base alla seguente tabella:
API | Artefatto GMV | 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.1 |
TextRecognition | com.google.android.gms:play-services-vision:x.x.x |
com.google.android.gms:play-services-mlkit-text-recognition:19.0.1 |
CameraSource | com.google.android.gms:play-services-vision:x.x.x |
com.google.mlkit:camera:16.0.0-beta3 |
Modifiche all'API
Questa sezione descrive le classi e i metodi GMV e ML Kit corrispondenti per ogni API Vision e mostra come inizializzare l'API.
FaceDetector
Ricodifica l'inizializzazione come mostrato in questo esempio:
detector = new FaceDetector.Builder(context) .setMode(FaceDetector.ACCURATE_MODE) .setLandmarkType(FaceDetector.ALL_LANDMARKS) .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS) .build();
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 |
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 viso. |
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
Ricodifica l'inizializzazione come mostrato in questo esempio:
barcodeDetector = new BarcodeDetector.Builder(context).build());
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:
textRecognizer = new TextRecognizer.Builder(context).build();
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 la tua app sia in esecuzione su una versione SDK minima >= 21.
Modifica i seguenti nomi di classi e metodi:
android.gms.vision |
mlkit.vision.camera |
---|---|
CameraSource
|
CameraSourceConfig
|
CameraSource.Builder
|
CameraSourceConfig.Builder
|
CameraSource.Builder.setAutoFocusEnabled
|
L'autofocus è fornito per impostazione predefinita quando utilizzi CameraX. |
CameraSource.Builder.setFacing
|
CameraSourceConfig.Builder.setCameraFacing
|
CameraSource.Builder.setFocusMode
|
L'autofocus è fornito per impostazione predefinita quando utilizzi 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()
|
Gestito internamente |
CameraSource.PictureCallback |
Deprecato |
CameraSource.ShutterCallback |
Deprecato |
Richiesta di aiuto
In caso di problemi, consulta la nostra pagina Community, dove sono descritti i canali a tua disposizione per contattarci.