مهاجرت از Mobile Vision به ML Kit در اندروید

این سند مراحلی را که باید برای انتقال پروژه‌های خود از Google Mobile Vision (GMV) به ML Kit در اندروید انجام دهید، پوشش می‌دهد.

تغییرات کلی API

این تغییرات برای همه APIها اعمال می‌شود:

  • APIهای GMV به صورت همزمان یک نتیجه SparseArray<T> برمی‌گردانند. APIهای ML Kit از API Task سرویس‌های Google Play برای برگرداندن نتایج به صورت غیرهمزمان استفاده می‌کنند.
  • GMV از فراخوانی isOperational() در سطح API برای نشان دادن اینکه آیا یک ماژول با موفقیت دانلود شده و آماده استفاده است یا خیر، استفاده می‌کند. ML Kit چنین متدی ندارد. ML Kit اگر ماژولی دانلود نشده باشد، خطای MlKitException.UNAVAILABLE را صادر می‌کند. می‌توانید این خطا را دریافت کرده و فریم بعدی را پردازش کنید یا یک زمان انقضا تنظیم کرده و با فریم فعلی دوباره امتحان کنید.
  • متدهای GMV از Frame برای ورودی استفاده می‌کنند. ML Kit از InputImage استفاده می‌کند.
  • GMV چارچوب‌های MultiDetector ، MultiProcessor و FocusingProcessor را برای انجام تشخیص‌های چندگانه و فیلتر کردن نتایج ارائه می‌دهد. ML Kit چنین سازوکارهایی را ارائه نمی‌دهد، اما در صورت تمایل، توسعه‌دهنده می‌تواند همین عملکرد را پیاده‌سازی کند.

به‌روزرسانی ایمپورت‌های Gradle

وابستگی‌های کتابخانه‌های اندروید ML Kit را در فایل Gradle ماژول (سطح برنامه) خود، که معمولاً app/build.gradle است، طبق جدول زیر به‌روزرسانی کنید:

رابط برنامه‌نویسی کاربردی مصنوع GMV مصنوع کیت ML
آشکارساز چهره com.google.android.gms:play-services-vision:xxx com.google.android.gms:play-services-mlkit-face-detection:17.1.0
آشکارساز بارکد com.google.android.gms:play-services-vision:xxx com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1
تشخیص متن com.google.android.gms:play-services-vision:xxx com.google.android.gms:play-services-mlkit-text-recognition:19.0.1
دوربین سورس com.google.android.gms:play-services-vision:xxx com.google.mlkit:camera:16.0.0-beta3

تغییرات API

این بخش کلاس‌ها و متدهای مربوط به GMV و ML Kit را برای هر Vision API شرح می‌دهد و نحوه مقداردهی اولیه API را نشان می‌دهد.

آشکارساز چهره

مقداردهی اولیه را همانطور که در این مثال نشان داده شده است، بازنویسی کنید:

جی ام وی

detector = new FaceDetector.Builder(context)
    .setMode(FaceDetector.ACCURATE_MODE)
    .setLandmarkType(FaceDetector.ALL_LANDMARKS)
    .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
    .build();

کیت ML

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

از #setContourMode برای جایگزینی GMV CONTOUR_LANDMARKS استفاده کنید)

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.getHeight()
Face.getWidth()
Face. getBoundingBox()

آشکارساز بارکد

مقداردهی اولیه را همانطور که در این مثال نشان داده شده است، بازنویسی کنید:

جی ام وی

barcodeDetector = new BarcodeDetector.Builder(context).build());

کیت ML

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

تشخیص متن

مقداردهی اولیه را همانطور که در این مثال نشان داده شده است، بازنویسی کنید:

جی ام وی

textRecognizer = new TextRecognizer.Builder(context).build();

کیت ML

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 ارائه شده توسط Google Mobile Vision استفاده می‌کنید، می‌توانید به راحتی به کتابخانه CameraXSource از ML Kit مهاجرت کنید، البته به شرطی که برنامه شما روی نسخه min 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 منسوخ شده

دریافت کمک

اگر با هرگونه مشکلی مواجه شدید، به صفحه انجمن ما مراجعه کنید، جایی که کانال‌های موجود برای ارتباط با ما را شرح داده‌ایم.