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'eccezioneMlKitException.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 utilizzaInputImage
. - GMV fornisce framework
MultiDetector
,MultiProcessor
eFocusingProcessor
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 |
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.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.