Bermigrasi dari Mobile Vision ke ML Kit di Android

Dokumen ini membahas langkah-langkah yang perlu Anda lakukan untuk memigrasikan project Anda dari Google Mobile Vision (GMV) ke ML Kit di Android.

Perubahan API Keseluruhan

Perubahan ini berlaku untuk semua API:

  • GMV API menampilkan hasil SparseArray<T> secara sinkron. ML Kit API menggunakan Task API layanan Google Play untuk menampilkan hasil secara asinkron.
  • GMV menggunakan panggilan isOperational() di platform API untuk menunjukkan apakah modul telah berhasil didownload dan siap digunakan. ML Kit tidak memiliki metode seperti itu. ML Kit akan menampilkan pengecualian MlKitException.UNAVAILABLE jika modul belum didownload. Anda dapat menangkap pengecualian ini dan memproses frame berikutnya atau menetapkan waktu tunggu dan mencoba lagi dengan frame saat ini.
  • Metode GMV menggunakan Frame untuk input. ML Kit menggunakan InputImage.
  • GMV menyediakan framework MultiDetector, MultiProcessor, dan FocusingProcessor untuk melakukan beberapa deteksi dan pemfilteran hasil. ML Kit tidak menyediakan mekanisme tersebut, tetapi fungsi yang sama dapat diterapkan oleh developer jika diinginkan.

Mengupdate Impor Gradle

Update dependensi untuk library Android ML Kit di file Gradle modul (level aplikasi), biasanya app/build.gradle, sesuai dengan tabel berikut:

API Artefak GMV Artefak 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

Perubahan API

Bagian ini menjelaskan class dan metode GMV dan ML Kit yang sesuai untuk setiap Vision API, dan menunjukkan cara menginisialisasi API tersebut.

FaceDetector

Kode ulang inisialisasi seperti yang ditunjukkan dalam contoh ini:

GMV

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

Ubah nama class dan metode berikut:

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

gunakan #setContourMode untuk mengganti GMV CONTOUR_smartlS)

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) Fitur ini dilindungi oleh mode kontur wajah.
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

Kode ulang inisialisasi seperti yang ditunjukkan dalam contoh ini:

GMV

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

ML Kit

barcodeScanner = BarcodeScanning.getClient();

Ubah nama class dan metode berikut:

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

TextRecognition

Kode ulang inisialisasi seperti yang ditunjukkan dalam contoh ini:

GMV

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

ML Kit

textRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);

Ubah nama class dan metode berikut:

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

Jika menggunakan library CameraSource yang disediakan oleh Google Mobile Vision, Anda dapat dengan mudah bermigrasi ke library CameraXSource ML Kit, asalkan aplikasi Anda berjalan di versi sdk min >= 21.

Ubah nama class dan metode berikut:

android.gms.vision mlkit.vision.camera
CameraSource CameraSourceConfig
CameraSource.Builder CameraSourceConfig.Builder
CameraSource.Builder.setAutoFocusEnabled Fokus otomatis disediakan secara default saat menggunakan CameraX.
CameraSource.Builder.setFacing CameraSourceConfig.Builder.setCameraFacing
CameraSource.Builder.setFocusMode Fokus otomatis disediakan secara default saat menggunakan CameraX.
CameraSource.Builder.setRequestedFps Tidak digunakan lagi.
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() Ditangani secara internal
CameraSource.PictureCallback Tidak digunakan lagi
CameraSource.ShutterCallback Tidak digunakan lagi

Mendapatkan bantuan

Jika Anda mengalami masalah, lihat halaman Komunitas kami, tempat kami menjelaskan channel yang tersedia untuk menghubungi kami.