Переход с Mobile Vision на ML Kit в Android

В этом документе описаны шаги, которые необходимо предпринять для переноса проектов из Google Mobile Vision (GMV) в ML Kit на Android.

Общие изменения в API

Эти изменения касаются всех API:

  • API GMV возвращают результат SparseArray<T> синхронно. API ML Kit используют Task API сервисов Google Play для асинхронного возврата результатов.
  • Чтобы определить, скачан ли модуль и готов ли он к использованию, GMV использует вызов isOperational() в API. В ML Kit нет такого метода. Если модуль не скачан, ML Kit выдает исключение MlKitException.UNAVAILABLE. Вы можете перехватить это исключение и обработать следующий кадр или установить время ожидания и повторить попытку с текущим кадром.
  • Методы GMV используют для ввода Frame. ML Kit использует InputImage.
  • GMV предоставляет фреймворки MultiDetector, MultiProcessor и FocusingProcessor для выполнения нескольких обнаружений и фильтрации результатов. В ML Kit нет таких механизмов, но разработчик может реализовать их самостоятельно.

Обновить импорт Gradle

Обновите зависимости для библиотек ML Kit для Android в файле Gradle модуля (на уровне приложения), который обычно называется app/build.gradle, в соответствии со следующей таблицей:

API Артефакт GMV Артефакт 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.2
CameraSource com.google.android.gms:play-services-vision:x.x.x com.google.mlkit:camera:16.0.0-beta3

Изменения в API

В этом разделе описываются соответствующие классы и методы GMV и ML Kit для каждого Vision API, а также показано, как инициализировать API.

FaceDetector

Перекодируйте инициализацию, как показано в этом примере:

Стоимость выполненных заказов

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

Измените названия следующих классов и методов:

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

используйте #setContourMode вместо GMV CONTOUR_LANDMARKS)

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) Эта функция доступна в режиме контурирования лица.
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

Перекодируйте инициализацию, как показано в этом примере:

Стоимость выполненных заказов

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

ML Kit

barcodeScanner = BarcodeScanning.getClient();

Измените названия следующих классов и методов:

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

TextRecognition

Перекодируйте инициализацию, как показано в этом примере:

Стоимость выполненных заказов

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

ML Kit

textRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);

Измените названия следующих классов и методов:

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

Если вы используете библиотеку CameraSource, предоставляемую Google Mobile Vision, вы можете легко перейти на библиотеку CameraXSource ML Kit, если ваше приложение работает на минимальной версии SDK >= 21.

Измените названия следующих классов и методов:

android.gms.vision mlkit.vision.camera
CameraSource CameraSourceConfig
CameraSource.Builder CameraSourceConfig.Builder
CameraSource.Builder.setAutoFocusEnabled При использовании CameraX автофокус включен по умолчанию.
CameraSource.Builder.setFacing CameraSourceConfig.Builder.setCameraFacing
CameraSource.Builder.setFocusMode При использовании CameraX автофокус включен по умолчанию.
CameraSource.Builder.setRequestedFps Устаревший метод.
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() Обрабатывается внутри компании
CameraSource.PictureCallback Поддержка прекращена
CameraSource.ShutterCallback Поддержка прекращена

Помощь

Если у вас возникнут проблемы, посетите страницу сообщества, где указаны доступные каналы связи с нами.