يتناول هذا المستند الخطوات التي عليك اتّخاذها لنقل مشاريعك من Google Mobile Vision (GMV) إلى حزمة تعلّم الآلة على Android.
التغييرات العامة في واجهة برمجة التطبيقات
تنطبق هذه التغييرات على جميع واجهات برمجة التطبيقات:
- تعرض واجهات برمجة التطبيقات الخاصة بـ "إحصاءات Google" نتيجة
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.1 |
| CameraSource | com.google.android.gms:play-services-vision:x.x.x |
com.google.mlkit:camera:16.0.0-beta3 |
التغييرات في واجهة برمجة التطبيقات
يوضّح هذا القسم فئات وأساليب GMV و حزمة تعلّم الآلة المقابلة لكل 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
استخدِم |
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.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 في 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 |
منهي العمل به |
الحصول على المساعدة
إذا واجهت أي مشاكل، يُرجى الاطّلاع على صفحة المنتدى حيث نوضّح القنوات المتاحة للتواصل معنا.