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