从 Mobile Vision 迁移到 Android 上的机器学习套件

本文档介绍了从 Google Cloud 迁移项目所需执行的步骤 将 Google 移动视觉 (GMV) 迁移到 Android 机器学习套件。

整体 API 变更

这些变更适用于所有 API:

  • GMV API 会同步返回 SparseArray<T> 结果。机器学习套件 API 使用 用于异步返回结果的 Google Play 服务 Task API。
  • GMV 会使用 API Surface 中的 isOperational() 调用来指明 模块已经成功下载,可以开始使用了。机器学习套件 方法。如果存在以下情况,机器学习套件会抛出 MlKitException.UNAVAILABLE 异常: 尚未下载模块。您可以捕获此异常并处理 或设置超时,然后使用当前帧重试。
  • GMV 方法使用 Frame 进行输入。机器学习套件使用 InputImage
  • GMV 提供MultiDetectorMultiProcessorFocusingProcessor 用于执行多项检测和结果过滤的框架。机器学习套件 不提供此类机制,但 由开发者实现

更新 Gradle 导入

根据下表更新模块(应用级)Gradle 文件(通常为 app/build.gradle)中 Android 版机器学习套件库的依赖项:

API GMV 工件 机器学习套件制品
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 更改

本部分介绍了每个 Vision API 对应的 GMV 和机器学习套件类和方法,并介绍了如何初始化该 API。

FaceDetector

对初始化进行重新编码,如以下示例所示:

GMV

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

更改以下类和方法名称:

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

机器学习套件

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

机器学习套件

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

如果您使用 Google Mobile Vision 提供的 CameraSource 库,则可以 轻松迁移至机器学习套件的 CameraXSource 库,前提是您的应用在最低 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 已弃用

获取帮助

如果您遇到任何问题,请查看我们的社区页面 ,其中介绍了与我们联系的渠道。