Chuyển từ Tầm nhìn thiết bị di động sang Bộ công cụ học máy trên Android

Tài liệu này trình bày các bước bạn cần thực hiện để di chuyển dự án từ Google Mobile Vision (GMV) sang Bộ công cụ học máy trên Android.

Thay đổi tổng thể về API

Những thay đổi này áp dụng cho tất cả API:

  • API GMV trả về kết quả SparseArray<T> một cách đồng bộ. Các API Bộ công cụ học máy sử dụng API Tác vụ của Dịch vụ Google Play để trả về kết quả không đồng bộ.
  • GMV sử dụng lệnh gọi isOperational() trong giao diện API để cho biết liệu một mô-đun đã được tải xuống thành công và sẵn sàng sử dụng hay chưa. Bộ công cụ học máy không có phương thức như vậy. Bộ công cụ học máy sẽ gửi một ngoại lệ MlKitException.UNAVAILABLE nếu bạn chưa tải mô-đun xuống. Bạn có thể phát hiện trường hợp ngoại lệ này và xử lý khung hình tiếp theo hoặc đặt thời gian chờ và thử lại với khung hình hiện tại.
  • Các phương thức GMV sử dụng Frame để nhập. Bộ công cụ học máy sử dụng InputImage.
  • GMV cung cấp các khung MultiDetector, MultiProcessorFocusingProcessor để thực hiện nhiều hoạt động phát hiện và lọc kết quả. Bộ công cụ học máy không cung cấp các cơ chế như vậy, nhưng nhà phát triển có thể triển khai chức năng tương tự nếu muốn.

Cập nhật dữ liệu nhập Gradle

Cập nhật các phần phụ thuộc cho thư viện Android của Bộ công cụ học máy trong tệp Gradle của mô-đun (cấp ứng dụng), thường là app/build.gradle, theo bảng sau:

API Cấu phần phần mềm GMV Cấu phần phần mềm của Bộ công cụ học máy
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

Thay đổi về API

Phần này mô tả các lớp và phương thức tương ứng của GMV và Bộ công cụ học máy cho từng API Vision, đồng thời cho biết cách khởi chạy API.

FaceDetector

Hãy viết lại mã khởi tạo như trong ví dụ sau:

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

Thay đổi tên lớp và phương thức sau:

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

sử dụng #setContourMode để thay thế 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) Tính năng này được cung cấp trong chế độ đường viền khuôn mặt.
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

Hãy viết lại mã khởi tạo như trong ví dụ sau:

GMVML Kit
barcodeDetector = new BarcodeDetector.Builder(context).build());
barcodeScanner = BarcodeScanning.getClient();

Thay đổi tên lớp và phương thức sau:

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

TextRecognition

Hãy viết lại mã khởi tạo như trong ví dụ sau:

GMVML Kit
textRecognizer = new TextRecognizer.Builder(context).build();
textRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);

Thay đổi tên lớp và phương thức sau:

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

Nếu sử dụng thư viện CameraSource do Google Mobile Vision cung cấp, bạn có thể dễ dàng di chuyển sang thư viện CameraXSource của Bộ công cụ học máy, miễn là ứng dụng của bạn đang chạy trên phiên bản sdk tối thiểu >= 21.

Thay đổi tên lớp và phương thức sau:

android.gms.vision mlkit.vision.camera
CameraSource CameraSourceConfig
CameraSource.Builder CameraSourceConfig.Builder
CameraSource.Builder.setAutoFocusEnabled Tính năng tự động lấy nét được cung cấp theo mặc định khi sử dụng CameraX.
CameraSource.Builder.setFacing CameraSourceConfig.Builder.setCameraFacing
CameraSource.Builder.setFocusMode Tính năng tự động lấy nét được cung cấp theo mặc định khi sử dụng CameraX.
CameraSource.Builder.setRequestedFps Không dùng nữa.
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() Được xử lý nội bộ
CameraSource.PictureCallback Không được dùng nữa
CameraSource.ShutterCallback Không được dùng nữa

Nhận trợ giúp

Nếu bạn gặp vấn đề, hãy tham khảo trang Cộng đồng của chúng tôi. Tại đây, chúng tôi trình bày các kênh liên hệ với chúng tôi.