במסמך הזה מפורטים השלבים שצריך לבצע כדי להעביר את הפרויקטים מ: Google Mobile Vision (GMV) ל-ML Kit ב-Android.
שינויים כוללים ב-API
השינויים האלה יחולו על כל ממשקי ה-API:
- ממשקי API של GMV מחזירים תוצאת
SparseArray<T>
באופן סינכרוני. ממשקי API של ML Kit משתמשים ממשק ה-API של Google Play Services להחזרת תוצאות באופן אסינכרוני. - GMV משתמש בקריאה
isOperational()
שבפלטפורמת ה-API כדי לציין אם המודול הורד בהצלחה ומוכן לשימוש. לערכת למידת המכונה אין שיטה כזו. ערכת למידת מכונה גורמת לחריגהMlKitException.UNAVAILABLE
אם המודול לא הורד. תוכלו לזהות את החריגה הזו ולעבד את למסגרת הבאה, או להגדיר זמן קצוב לתפוגה ולנסות שוב עם המסגרת הנוכחית. - בשיטות GMV נעשה שימוש ב-
Frame
לקלט. ב-ML Kit נעשה שימוש ב-InputImage
. - GMV מספק
MultiDetector
,MultiProcessor
וגםFocusingProcessor
frameworks לביצוע מספר זיהויים וסינון תוצאות. ערכת למידת מכונה לא מספקת מנגנונים כאלה, אבל את אותה פונקציונליות יכולה הטמענו על ידי המפתח, אם יש בכך צורך.
עדכון ייבוא של Gradle
מעדכנים את יחסי התלות של ספריות ML Kit ל-Android בקובץ Gradle של המודול (ברמת האפליקציה), שהוא בדרך כלל app/build.gradle
, לפי הטבלה הבאה:
API | ארטיפקט של GMV | פריט מידע של ערכת 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.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 |
הוצא משימוש |
קבלת עזרה
נתקלתם בבעיות? תוכלו לעיין בדף הקהילה שלנו שבו נפרט את הערוצים הזמינים ליצירת קשר איתנו.