الانتقال من Mobile Vision إلى ML Kit على نظام التشغيل Android

يتناول هذا المستند الخطوات التي يجب اتّخاذها لنقل بيانات مشاريعك من Google Mobile Vision (GMV) إلى ML Kit على Android.

التغييرات العامة في واجهة برمجة التطبيقات

تنطبق هذه التغييرات على جميع واجهات برمجة التطبيقات:

  • تعرض واجهات برمجة التطبيقات GMV نتيجة SparseArray<T> بشكل متزامن. تستخدم واجهات برمجة تطبيقات ML Kit واجهة برمجة التطبيقات Task API من "خدمات Google Play" لعرض النتائج بشكل غير متزامن.
  • يستخدم GMV طلب isOperational() في واجهة برمجة التطبيقات للإشارة إلى ما إذا تم تنزيل وحدة بنجاح وأصبحت جاهزة للاستخدام. لا تتضمّن حزمة ML Kit مثل هذه الطريقة. تُعرِض "حزمة تعلُّم الآلة" استثناء MlKitException.UNAVAILABLE في حال عدم تنزيل ملف وحدة. يمكنك رصد هذا الاستثناء ومعالجة الإطار التالي أو ضبط مهلة وإعادة المحاولة باستخدام الإطار الحالي.
  • تستخدِم طُرق GMV Frame للإدخال. تستخدم حزمة ML Kit InputImage.
  • توفّر GMV إطارَي عمل MultiDetector وMultiProcessor وFocusingProcessor لرصد العديد من الأحداث وفلترة النتائج. لا يوفّر ML Kit مثل هذه الآليات، ولكن يمكن للمطوّر تنفيذ الوظيفة نفسها إذا أراد ذلك.

تعديل عمليات استيراد Gradle

عدِّل الملحقات لمكتبات ML Kit لنظام التشغيل 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.1
CameraSource com.google.android.gms:play-services-vision:x.x.x com.google.mlkit:camera:16.0.0-beta3

التغييرات في واجهة برمجة التطبيقات

يوضّح هذا القسم فئات وطُرق GMV وML Kit المقابلة لكل واجهة برمجة تطبيقات Vision API، ويعرض كيفية إعداد واجهة برمجة التطبيقات.

FaceDetector

أعِد ترميز عملية الإعداد كما هو موضّح في هذا المثال:

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

أعِد ترميز عملية الإعداد كما هو موضّح في هذا المثال:

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

TextRecognition

أعِد ترميز عملية الإعداد كما هو موضّح في هذا المثال:

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

إذا كنت تستخدم مكتبة CameraSource التي تقدّمها ميزة "الرؤية على الأجهزة الجوّالة من Google "، يمكنك الانتقال بسهولة إلى مكتبة 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 منهي العمل به

الحصول على المساعدة

إذا واجهت أي مشاكل، يمكنك الاطّلاع على صفحة "المنتدى" التي توضّح القنوات المتاحة للتواصل معنا.