מעבר מ-Mobile Vision ל-ML Kit ב-Android

במסמך הזה מוסבר איך להעביר את הפרויקטים מ-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

צריך להשתמש ב-#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());

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 הוצא משימוש

קבלת עזרה

אם נתקלת בבעיות, כדאי לעיין בדף הקהילה שלנו, שבו מפורטים הערוצים הזמינים ליצירת קשר איתנו.