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

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

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

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

  • ממשקי GMV API מחזירים תוצאה מסוג 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

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

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

מקודדים מחדש את האתחול כמו בדוגמה הבאה:

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

משנים את שמות הכיתה והשיטה הבאים:

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

מקודדים מחדש את האתחול כמו בדוגמה הבאה:

GMVML Kit
barcodeDetector = new BarcodeDetector.Builder(context).build());
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

מקודדים מחדש את האתחול כמו בדוגמה הבאה:

GMVML Kit
textRecognizer = new TextRecognizer.Builder(context).build();
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 הוצא משימוש

קבלת עזרה

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