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