從 Android 裝置中的 Vision Vision 遷移至 ML Kit

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

本文件說明如何將專案從 Google Mobile Vision (GMV) 遷移至 Android 上的機器學習套件。

整體 API 變更

這些變更適用於所有 API:

  • GMV API 會以同步的方式傳回 SparseArray<T> 結果。ML Kit API 會使用 Google Play 服務 Task API 以非同步方式傳回結果。
  • GMV 會使用 API 介面中的 isOperational() 呼叫來表示模組是否已成功下載且可供使用。機器學習套件沒有這類方法。如果未下載模組,機器學習套件會擲回 MlKitException.UNAVAILABLE 例外狀況。您可以擷取這個例外狀況並處理下一個影格,或是設定逾時時間,並使用目前的影格重試。
  • GMV 方法使用 Frame 做為輸入。機器學習套件使用 InputImage
  • GMV 提供 MultiDetectorMultiProcessorFocusingProcessor 架構,可用於執行多項偵測和結果篩選。機器學習套件不提供這類機制,但開發人員可視需要實作相同的功能。

更新 Gradle 匯入作業

更新模組 (應用程式層級) Gradle 檔案中的機器學習套件 Android 程式庫的依附元件 (通常為 app/build.gradle),如下表所示:

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
條碼偵測器 com.google.android.gms:play-services-vision:x.x.x com.google.android.gms:play-services-mlkit-barcode-scanning:18.1.0
文字辨識 com.google.android.gms:play-services-vision:x.x.x com.google.android.gms:play-services-mlkit-text-recognition:18.0.2
相機來源 com.google.android.gms:play-services-vision:x.x.x com.google.mlkit:camera:16.0.0-beta3

API 變更

本節說明每個 Vision API 所對應的 GMV 和 ML Kit 類別和方法,並說明如何初始化 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_nestS)

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

條碼偵測器

重新初始化初始化,如以下範例所示:

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

文字辨識

重新初始化初始化,如以下範例所示:

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

相機來源

如果使用 Google Mobile Vision 提供的 CameraSource 程式庫,只要應用程式是在最低 SDK 版本 >= 21 上執行,即可輕鬆遷移至 ML Kit' 的 CameraXSource 程式庫。

變更下列類別和方法名稱:

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 已淘汰

取得說明

如果遇到任何問題,請查看社群頁面,其中會列出可與我們聯絡的頻道。