التعرّف على النص وملامح الوجه باستخدام حزمة تعلُّم الآلة في Android

1. مقدمة

ML Kit هي حزمة SDK للأجهزة الجوّالة توفِّر خبرة تكنولوجيا تعلُّم الآلة من Google لتطبيقات Android وiOS في حزمة قوية وسهلة الاستخدام. سواء كنت مبتدئًا أو متمرّسًا في مجال تعلُّم الآلة، يمكنك بسهولة تنفيذ الوظائف التي تحتاجها من خلال بضعة أسطر من الرموز البرمجية. ليست هناك حاجة إلى معرفة عميقة بالشبكات العصبونية أو تحسين النماذج للبدء.

إذا واجهت أي مشاكل (أخطاء في الرموز أو أخطاء نحوية أو صياغة غير واضحة أو غير ذلك) أثناء حلّ هذا الدرس التطبيقي حول الترميز، يُرجى الإبلاغ عن المشكلة من خلال رابط الإبلاغ عن خطأ في أسفل يمين الدرس التطبيقي حول الترميز.

كيف تعمل هذه الميزة؟

تُسهِّل عليك حزمة تعلّم الآلة تطبيق تقنيات تعلُّم الآلة في تطبيقاتك من خلال دمج تقنيات تعلُّم الآلة من Google، مثل Mobile Vision وTensorFlow Lite، معًا في حزمة تطوير برامج واحدة. سواء كنت بحاجة إلى الإمكانات في الوقت الفعلي لطُرز Mobile Vision المتوفّرة على الجهاز أو إلى المرونة في نماذج TensorFlow Lite المخصّصة، ستجد في هذه الأدوات ما تحتاجه من أدوات تعلّم الآلة.

سترشدك هذه الدروس التطبيقية حول الترميز خلال عملية إنشاء تطبيقك على Android الذي يمكنه التعرّف تلقائيًا على النص وملامح الوجه في أي صورة.

ما ستقوم بإنشائه

في هذا الدرس التطبيقي حول الترميز، ستنشئ تطبيق Android باستخدام ML Kit. سينفّذ تطبيقك ما يلي:

  • استخدام واجهة برمجة تطبيقات التعرف على النص في ML Kit لرصد النص في الصور
  • استخدام ML Kit Face Contour API لتحديد ملامح الوجه في الصور

المعلومات التي ستطّلع عليها

  • كيفية استخدام حزمة تطوير البرامج (SDK) لحزمة تعلّم الآلة لإضافة إمكانات تعلُّم الآلة المتقدّمة بسهولة، مثل التعرّف على النص ورصد ملامح الوجه

المتطلبات

  • إصدار حديث من "استوديو Android" (الإصدار 3.0 أو الإصدارات الأحدث)
  • محاكي "استوديو Android" أو جهاز Android فعلي
  • نموذج الرمز
  • معرفة أساسية بتطوير Android باستخدام Java
  • فهم أساسي لنماذج تعلُّم الآلة

يركّز هذا الدرس التطبيقي حول الترميز على أدوات تعلُّم الآلة. يتم مسح المفاهيم غير ذات الصلة وكتل الرموز ويتم توفيرها لك لنسخها ولصقها ببساطة.

2. بدء الإعداد

تنزيل الرمز

انقر على الرابط التالي لتنزيل جميع الرموز الخاصة بهذا الدرس التطبيقي حول الترميز:

فك ضغط ملف ZIP الذي تم تنزيله. سيؤدي هذا الإجراء إلى فك ضغط المجلد الجذر (mlkit-android-master) الذي يتضمّن كل الموارد اللازمة. بالنسبة إلى هذا الدرس التطبيقي، ستحتاج فقط إلى الموارد المتوفّرة في الدليل الفرعي vision.

يحتوي الدليل الفرعي vision في مستودع mlkit-android-master على دليلَين:

  • android_studio_مجلد.pngإجراء التفعيل: بدء الرمز البرمجي الذي اعتمدته في هذا الدرس التطبيقي حول الترميز
  • android_studio_مجلد.pngأخير: رمز برمجي مكتمل لنموذج التطبيق المكتمل.

3- التحقّق من اعتماديات ML Kit

التحقّق من اعتماديات ML Kit

من المفترض إضافة الأسطر التالية إلى نهاية ملف Build.gradle في دليل app الخاص بمشروعك (يُرجى وضع علامة في المربّع للتأكيد):

build.gradle

dependencies {
  // Face features
  implementation 'com.google.mlkit:face-detection:16.0.0'

  // Text features
  implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
}

في ما يلي تبعيات ML Kit المحددة التي تحتاج إليها لتنفيذ الميزات الواردة في هذا الدرس التطبيقي حول الترميز.

4. تشغيل تطبيق إجراء التفعيل

بعد أن استوردت المشروع إلى "استوديو Android" وراجعت اعتماديات ML Kit، أصبحت جاهزًا لتشغيل التطبيق لأول مرة. ابدأ تشغيل محاكي "استوديو Android" وانقر على تشغيل ( التنفيذ.png) في شريط أدوات "استوديو Android".

من المفترض أن يتم تشغيل التطبيق على المحاكي. في هذه المرحلة، يُفترض أن يظهر لك تخطيط أساسي يحتوي على حقل قائمة منسدلة يسمح لك بالاختيار من بين 3 صور. في القسم التالي، ستضيف ميزة التعرّف على النص في تطبيقك لتحديد النص في الصور.

5- إضافة ميزة التعرّف على النص على الجهاز فقط

في هذه الخطوة، سنضيف الوظيفة إلى تطبيقك للتعرّف على النص في الصور.

إعداد ميزة التعرّف على النص في صورة وتشغيلها على الجهاز فقط

أضِف ما يلي إلى طريقة runTextRecognition لفئة MainActivity:

MainActivity.java

private void runTextRecognition() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   TextRecognizer recognizer = TextRecognition.getClient();
   mTextButton.setEnabled(false);
   recognizer.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<Text>() {
                       @Override
                       public void onSuccess(Text texts) {
                           mTextButton.setEnabled(true);
                           processTextRecognitionResult(texts);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mTextButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });
}

يقوم الرمز البرمجي أعلاه بإعداد أداة رصد التعرّف على النص واستدعاء الدالة processTextRecognitionResult مع الاستجابة.

معالجة استجابة التعرّف على النص

أضِف الرمز التالي إلى processTextRecognitionResult في الفئة MainActivity لتحليل النتائج وعرضها في تطبيقك.

MainActivity.java

private void processTextRecognitionResult(Text texts) {
   List<Text.TextBlock> blocks = texts.getTextBlocks();
   if (blocks.size() == 0) {
       showToast("No text found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < blocks.size(); i++) {
       List<Text.Line> lines = blocks.get(i).getLines();
       for (int j = 0; j < lines.size(); j++) {
           List<Text.Element> elements = lines.get(j).getElements();
           for (int k = 0; k < elements.size(); k++) {
               Graphic textGraphic = new TextGraphic(mGraphicOverlay, elements.get(k));
               mGraphicOverlay.add(textGraphic);

           }
       }
   }
}

تشغيل التطبيق على المحاكي

انقر الآن على تشغيل ( التنفيذ.png) في شريط أدوات "استوديو Android". بعد تحميل التطبيق، يُرجى التأكّد من اختيار Test Image 1(Text) في حقل القائمة المنسدلة والنقر على الزر FIND TEXT.

يُفترض أن يبدو تطبيقك الآن مثل الصورة أدناه، وتعرض نتائج التعرف على النص ومربعات الإحاطة متراكبة فوق الصورة الأصلية.

10b12d0e8822eaf5.png

الصورة: كاي شرايبر / ويكيميديا كومنز / CC BY-SA 2.0

تهانينا، لقد أضفت ميزة التعرّف على النص على الجهاز فقط إلى تطبيقك باستخدام حزمة تعلُّم الآلة. تُعدّ ميزة "التعرّف على النص" على الجهاز فقط مناسبة للعديد من حالات الاستخدام، لأنّها تعمل حتى في حال عدم اتصال التطبيق بالإنترنت، كما أنّها سريعة بما يكفي لاستخدامها مع الصور الثابتة وإطارات الفيديو المباشر.

6- إضافة ميزة "التعرّف على الوجه" على الجهاز فقط

في هذه الخطوة، سنضيف وظيفة إلى تطبيقك تتيح التعرّف على أشكال الوجوه في الصور.

إعداد ميزة "التعرّف على الوجه" وضبطها على الجهاز في إحدى الصور

أضِف ما يلي إلى طريقة runFaceContourDetection لفئة MainActivity:

MainActivity.java

private void runFaceContourDetection() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   FaceDetectorOptions options =
           new FaceDetectorOptions.Builder()
                   .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
                   .setContourMode(FaceDetectorOptions.CONTOUR_MODE_ALL)
                   .build();

   mFaceButton.setEnabled(false);
   FaceDetector detector = FaceDetection.getClient(options);
   detector.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<List<Face>>() {
                       @Override
                       public void onSuccess(List<Face> faces) {
                           mFaceButton.setEnabled(true);
                           processFaceContourDetectionResult(faces);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mFaceButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });

}

يقوم الرمز الموجود أعلاه بإعداد أداة رصد تحديد الوجه واستدعاء الدالة processFaceContourDetectionResult مع الاستجابة.

معالجة استجابة ميزة "التعرّف على الوجه"

أضِف الرمز التالي إلى processFaceContourDetectionResult في الفئة MainActivity لتحليل النتائج وعرضها في تطبيقك.

MainActivity.java

private void processFaceContourDetectionResult(List<Face> faces) {
   // Task completed successfully
   if (faces.size() == 0) {
       showToast("No face found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < faces.size(); ++i) {
       Face face = faces.get(i);
       FaceContourGraphic faceGraphic = new FaceContourGraphic(mGraphicOverlay);
       mGraphicOverlay.add(faceGraphic);
       faceGraphic.updateFace(face);
   }
}

تشغيل التطبيق على المحاكي

انقر الآن على تشغيل ( التنفيذ.png) في شريط أدوات "استوديو Android". بعد تحميل التطبيق، يُرجى التأكّد من اختيار Test Image 2 (Face) في حقل القائمة المنسدلة والنقر على الزر FIND FACE CONTOUR.

من المفترض أن يظهر تطبيقك الآن على النحو الموضّح في الصورة أدناه، حيث تعرض نتائج التعرّف على تحديد الوجه ومخططات الوجه كنقاط مركّبة أعلى الصورة الأصلية.

f9ff2fcbf63f0f3b.png

تهانينا، لقد أضفت للتو ميزة "رصد تحديد الوجه" على الجهاز فقط إلى تطبيقك باستخدام مجموعة أدوات تعلُّم الآلة. إنّ ميزة "رصد تحديد مناطق الوجه" على الجهاز فقط مناسبة للعديد من حالات الاستخدام لأنّها تعمل حتى إذا لم يتوفّر اتصال بالإنترنت في التطبيق، كما أنّها سريعة بما يكفي لاستخدامها مع الصور الثابتة وإطارات الفيديو المباشر.

7. تهانينا!

لقد استخدمتَ بنجاح حزمة تعلّم الآلة لإضافة إمكانات تعلُّم الآلة المتقدّمة إلى تطبيقك بسهولة.

النقاط التي تناولناها

  • كيفية إضافة حزمة تعلُّم الآلة إلى تطبيق Android
  • طريقة استخدام ميزة التعرّف على النص على الجهاز فقط في أدوات تعلُّم الآلة للعثور على النص في الصور
  • كيفية استخدام ميزة "تحديد الوجه" على الجهاز في "مجموعة أدوات تعلُّم الآلة" للتعرّف على ملامح الوجه في الصور

الخطوات التالية

  • استخدام حزمة تعلُّم الآلة في تطبيق Android

مزيد من المعلومات