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

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

تغییرات کلی API

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

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

Gradle Imports را به روز کنید

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

API مصنوع GMV مصنوع کیت ام ال
تشخیص چهره 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();

کیت ام ال

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());

کیت ام ال

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();

کیت ام ال

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 مهاجرت کنید، مشروط بر اینکه برنامه شما با نسخه حداقل 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 منسوخ شده است

کمک گرفتن

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