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

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

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

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

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

עדכון של Gradle Imports

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

API פריט מידע שנוצר בתהליך פיתוח (Artifact) של GMV פריט מידע שנוצר בתהליך הפיתוח (Artifact) של ערכת ML
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.0
TextRecognition com.google.android.gms:play-services-vision:x.x.x com.google.android.gms:play-services-mlkit-text-recognition:19.0.0
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_][=S)

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

קבלת עזרה

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