انتقال دادن از Mobile Vision به ML Kit در Android

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

تغییرات کلی میانای برنامه‌سازی کاربردی

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

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

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

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

میانای برنامه‌سازی کاربردی آرتیفکت 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.2
CameraSource com.google.android.gms:play-services-vision:x.x.x com.google.mlkit:camera:16.0.0-beta3

تغییرات میانای برنامه‌سازی کاربردی

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

FaceDetector

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

ارزش ناخالص کالا

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

از #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

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

ارزش ناخالص کالا

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

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

ارزش ناخالص کالا

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

دریافت راهنمایی

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