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