במסמך הזה מוסבר איך להעביר את הפרויקטים מ-Google Mobile Vision (GMV) ל-ML Kit ב-Android.
שינויים כלליים ב-API
השינויים האלה חלים על כל ממשקי ה-API:
- ממשקי ה-API של GMV מחזירים תוצאה של
SparseArray<T>באופן סינכרוני. ממשקי ה-API של ML Kit משתמשים ב-Task API של Google Play Services כדי להחזיר תוצאות באופן אסינכרוני. - GMV משתמש בקריאה
isOperational()בממשק ה-API כדי לציין אם מודול הורד בהצלחה ומוכן לשימוש. ב-ML Kit אין שיטה כזו. אם מודול לא הורד, ML Kit זורק חריגה מסוגMlKitException.UNAVAILABLE. אפשר לתפוס את החריגה הזו ולעבד את הפריים הבא, או להגדיר זמן קצוב לתפוגה ולנסות שוב עם הפריים הנוכחי. - בשיטות GMV משתמשים ב-
Frameכקלט. ML Kit משתמש ב-InputImage. - GMV מספקת מסגרות של
MultiDetector,MultiProcessorו-FocusingProcessorלביצוע כמה זיהויים וסינון תוצאות. ב-ML Kit אין מנגנונים כאלה, אבל המפתח יכול להטמיע פונקציונליות דומה אם הוא רוצה.
עדכון הייבוא של Gradle
מעדכנים את יחסי התלות של ספריות Android של ML Kit בקובץ 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.2 |
| 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
צריך להשתמש ב- |
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.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 |
הוצא משימוש |
קבלת עזרה
אם נתקלת בבעיות, כדאי לעיין בדף הקהילה שלנו, שבו מפורטים הערוצים הזמינים ליצירת קשר איתנו.