Переход с 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.1
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

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

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

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

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

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

GMV

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

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

GMV

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 Поддержка прекращена

Помощь

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