במאמר הזה נפרט את הפעולות שצריך לבצע כדי להעביר את הפרויקטים שלכם מ-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
שימוש ב- |
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 |
הוצא משימוש |
קבלת עזרה
נתקלתם בבעיות? תוכלו להיעזר בדף הקהילה. דף זה כולל פירוט של הערוצים שבהם תוכלו ליצור איתנו קשר.