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

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

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

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

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

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

عدِّل الاعتماديات لمكتبات حزمة تعلّم الآلة على Android في ملف Gradle للوحدة (على مستوى التطبيق)، والذي يكون عادةً app/build.gradle، وفقًا للجدول التالي:

واجهة برمجة التطبيقات GMV Artifact عنصر حزمة تعلّم الآلة
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، ويوضح كيفية تهيئة واجهة برمجة التطبيقات.

FaceDetector

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

GMV

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

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

GMV

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

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

GMV

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 Mobile Vision، يمكنك بسهولة نقل البيانات إلى مكتبة CameraXSource في حزمة تعلّم الآلة، بشرط أن يكون تطبيقك يعمل على إصدار حزمة تطوير برامج (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 منهي العمل به

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

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