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.
Các thay đổi chung 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 Tasks 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.UNAVAILABLEnếu một mô-đun chưa được tải xuống. Bạn có thể phát hiện ngoại lệ này và xử lý khung hình tiếp theo hoặc đặt thời gian chờ rồi thử lại với khung hình hiện tại. - Các phương thức GMV sử dụng
Framelàm dữ liệu đầu vào. Bộ công cụ học máy sử dụngInputImage. - GMV cung cấp các khung
MultiDetector,MultiProcessorvàFocusingProcessorđể 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ấp ứng dụng) của mô-đun (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 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.2 |
| 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 Thị giác máy tính, đồng thời cho biết cách khởi chạy API.
FaceDetector
Viết lại mã khởi chạy như trong ví dụ sau:
GMV
detector = new FaceDetector.Builder(context) .setMode(FaceDetector.ACCURATE_MODE) .setLandmarkType(FaceDetector.ALL_LANDMARKS) .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS) .build();
Bộ công cụ học máy
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à tên 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 |
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 hỗ trợ 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.getBoundingBox()
|
BarcodeDetector
Viết lại mã khởi chạy như trong ví dụ sau:
GMV
barcodeDetector = new BarcodeDetector.Builder(context).build());
Bộ công cụ học máy
barcodeScanner = BarcodeScanning.getClient();
Thay đổi tên lớp và tên 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
Viết lại mã khởi chạy như trong ví dụ sau:
GMV
textRecognizer = new TextRecognizer.Builder(context).build();
Bộ công cụ học máy
textRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);
Thay đổi tên lớp và tên 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à tên 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 xem trang Cộng đồng của chúng tôi, nơi chúng tôi nêu rõ các kênh bạn có thể dùng để liên hệ với chúng tôi.