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

במסמך הזה מפורטים השלבים שצריך לבצע כדי להעביר את הפרויקטים מ-Google Mobile Vision ‏ (GMV) אל ML Kit ב-Android.

שינויים כלליים ב-API

השינויים האלה חלים על כל ממשקי ה-API:

  • ממשקי GMV API מחזירים תוצאה SparseArray<T> באופן סינכרוני. ממשקי ML Kit API משתמשים ב-Task API של שירותי Google Play כדי להחזיר תוצאות באופן אסינכרוני.
  • הפונקציה isOperational() ב-API surface משמשת את GMV כדי לציין אם מודול מסוים הורד בהצלחה ומוכן לשימוש. אין ב-ML Kit שיטה כזו. ‫ML Kit יוצר חריגה (exception) מסוג MlKitException.UNAVAILABLE אם מודול לא הורד. אפשר לטפל בחריגה הזו ולעבד את הפריים הבא, או להגדיר פסק זמן ולנסות שוב עם הפריים הנוכחי.
  • השיטות של GMV משתמשות ב-Frame כקלט. ‫ML Kit משתמש ב-InputImage.
  • ‫GMV מספקת מסגרות MultiDetector, MultiProcessor ו-FocusingProcessor לביצוע מספר זיהויים וסינון תוצאות. ‫ML Kit לא מספק מנגנונים כאלה, אבל המפתח יכול להטמיע את אותה פונקציונליות אם הוא רוצה.

עדכון הייבוא של Gradle

מעדכנים את יחסי התלות של ספריות ML Kit Android בקובץ Gradle של המודול (ברמת האפליקציה), שבדרך כלל נמצא בנתיב app/build.gradle, בהתאם לטבלה הבאה:

API GMV Artifact פריט מידע שנוצר בתהליך פיתוח (Artifact) של 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.1
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 הוצא משימוש

קבלת עזרה

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