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

1. مقدمة

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

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

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

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

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

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

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

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

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

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

المتطلبات

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

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

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

تنزيل الرمز

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

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

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

  • android_studio_folder.pngإجراء التفعيل: بدء الرمز البرمجي الذي اعتمدته في هذا الدرس التطبيقي حول الترميز
  • android_studio_folder.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" وانقر على تشغيل ( execute.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);

           }
       }
   }
}

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

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

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

10b12d0e8822eaf5.png

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

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

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);
   }
}

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

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

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

f9ff2fcbf63f0f3b.png

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

7- تهانينا!

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

المواضيع التي تناولناها

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

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

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

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