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

1. مقدمة

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

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

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

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

ما ستنشئه

في هذا الدرس التطبيقي، ستنشئ تطبيق Android باستخدام حزمة تعلّم الآلة. سيستخدم تطبيقك واجهة برمجة التطبيقات "التعرّف على النصوص" من حزمة تعلّم الآلة على الجهاز فقط للتعرّف على النصوص من خلاصة الكاميرا في الوقت الفعلي. سيتم استخدام واجهة برمجة التطبيقات Language Identification في حزمة تعلّم الآلة لتحديد لغة النص الذي تم التعرّف عليه. أخيرًا، سيترجم تطبيقك هذا النص إلى أي لغة من بين 59 خيارًا باستخدام ML Kit Translation API.

في النهاية، من المفترض أن يظهر لك شيء مشابه للصورة أدناه.

e2a9b80f1ff442d7.png

ما ستتعلمه

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

المتطلبات

  • إصدار حديث من "استوديو Android" (الإصدار 4.0 أو إصدار أحدث)
  • جهاز Android فعلي
  • الرمز النموذجي
  • معرفة أساسية بتطوير تطبيقات Android باستخدام لغة Kotlin

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

2. الإعداد

تنزيل الرمز

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

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

يحتوي الدليل الفرعي translate في مستودع mlkit-android على الدليل التالي:

  • android_studio_folder.pngstarter: الرمز الأوّلي الذي ستستند إليه في هذا الدرس التطبيقي حول الترميز.

3- استيراد المشروع والتحقّق من الموارد التابعة لكلّ من حزمة تعلّم الآلة وCameraX

استورِد مشروع البداية إلى "استوديو Android". في ملف app/build.gradle، تأكَّد من تضمين التبعيات اللازمة لكلّ من حزمة تعلّم الآلة وCameraX:

// CameraX dependencies
def camerax_version = "1.0.0-beta05"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-view:1.0.0-alpha12"

// ML Kit dependencies
implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
implementation 'com.google.mlkit:language-id:16.0.0'
implementation 'com.google.mlkit:translate:16.0.0'

4. تشغيل التطبيق النموذجي

بعد استيراد المشروع إلى "استوديو Android" والتحقّق من تبعيات حزمة تعلّم الآلة، ستكون مستعدًا لتشغيل التطبيق للمرة الأولى. انقر على تشغيل ( execute.png) في شريط أدوات "استوديو Android".

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

bd1489441c334de3.png

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

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

إنشاء مثيل لأداة "رصد النصوص" في حزمة تعلّم الآلة

استبدِل TODO في أعلى TextAnalyzer.kt لإنشاء مثيل TextRecognition. تتيح لك هذه الطريقة الحصول على معرّف أداة التعرّف على النصوص لاستخدامه في الخطوات اللاحقة. علينا أيضًا إضافة أداة الرصد كمراقب لمراحل النشاط من أجل إغلاقها بشكل صحيح عندما لا تعود هناك حاجة إليها.

TextAnalyzer.kt

private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

init {
   lifecycle.addObserver(detector)
}

تشغيل ميزة التعرّف على النص في "صورة الإدخال" (التي تم إنشاؤها باستخدام المخزن المؤقت من الكاميرا)

توفّر مكتبة CameraX مجموعة من الصور من الكاميرا جاهزة لتحليل الصور. استبدِل طريقة recognizeText() في فئة TextAnalyzer لاستخدام ميزة "التعرّف على النص" من حزمة تعلّم الآلة في كل إطار صورة.

TextAnalyzer.kt

private fun recognizeText(
   image: InputImage
): Task<Text> {
   // Pass image to an ML Kit Vision API
   return detector.process(image)
       .addOnSuccessListener { text ->
           // Task completed successfully
           result.value = text.text
       }
       .addOnFailureListener { exception ->
           // Task failed with an exception
           Log.e(TAG, "Text recognition error", exception)
           val message = getErrorMessage(exception)
           message?.let {
               Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
           }
       }
}

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

TextAnalyzer.kt

recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
   imageProxy.close()
}

تشغيل التطبيق على جهازك

انقر الآن على تشغيل ( execute.png) في شريط أدوات "استوديو Android". بعد تحميل التطبيق، من المفترض أن يبدأ في التعرّف على النص من الكاميرا في الوقت الفعلي. وجِّه الكاميرا إلى أي نص للتأكيد. إذا كان تطبيقك لا يتعرّف على أي نص، جرِّب "إعادة ضبط" عملية الرصد من خلال توجيه الكاميرا إلى مساحة فارغة قبل توجيهها إلى النص.

6. إضافة ميزة التعرّف على اللغة

إنشاء مثيل لأداة "معرّف اللغة" في حزمة تعلّم الآلة

يقع MainViewModel.kt في المجلد الرئيسي. انتقِل إلى الملف وأضِف الحقل التالي إلى MainViewModel.kt. إليك كيفية الحصول على معرّف اللغة لاستخدامه في الخطوة التالية.

MainViewModel.kt

private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

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

MainViewModel.kt

override fun onCleared() {
   languageIdentifier.close()
   translators.evictAll()
}

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

استخدِم أداة "تحديد اللغة" في حزمة تعلّم الآلة للحصول على لغة النص الذي تم رصده في الصورة.

استبدِل TODO في تعريف الحقل sourceLang في MainViewModel.kt بالرمز التالي. يستدعي هذا المقتطف طريقة تحديد اللغة ويُعيّن النتيجة إذا لم تكن غير محدّدة ("und"). تعني اللغة غير المحدّدة أنّ واجهة برمجة التطبيقات لم تتمكّن من تحديد اللغة استنادًا إلى قائمة اللغات المتاحة.

MainViewModel.kt

val sourceLang = Transformations.switchMap(sourceText) { text ->
   val result = MutableLiveData<Language>()
   languageIdentifier.identifyLanguage(text)
       .addOnSuccessListener { languageCode ->
           if (languageCode != "und")
               result.value = Language(languageCode)
       }
   result
}

تشغيل التطبيق على جهازك

انقر الآن على تشغيل ( execute.png) في شريط أدوات "استوديو Android". بعد تحميل التطبيق، يجب أن يبدأ في التعرّف على النص من الكاميرا وتحديد لغة النص في الوقت الفعلي. وجِّه الكاميرا إلى أي نص للتأكيد.

7. إضافة ترجمة

استبدِل الدالة translate() في MainViewModel.kt بالرمز البرمجي التالي. تأخذ هذه الدالة قيمة اللغة المصدر وقيمة اللغة الهدف والنص المصدر وتجري الترجمة. لاحظ أنّه إذا لم يتم تنزيل نموذج اللغة المستهدَفة المحدَّدة على الجهاز بعد، فإنّنا نستدعي downloadModelIfNeeded() لتنفيذ ذلك، ثم نتابع عملية الترجمة.

MainViewModel.kt

private fun translate(): Task<String> {
   val text = sourceText.value
   val source = sourceLang.value
   val target = targetLang.value
   if (modelDownloading.value != false || translating.value != false) {
       return Tasks.forCanceled()
   }
   if (source == null || target == null || text == null || text.isEmpty()) {
       return Tasks.forResult("")
   }
   val sourceLangCode = TranslateLanguage.fromLanguageTag(source.code)
   val targetLangCode = TranslateLanguage.fromLanguageTag(target.code)
   if (sourceLangCode == null || targetLangCode == null) {
       return Tasks.forCanceled()
   }
   val options = TranslatorOptions.Builder()
       .setSourceLanguage(sourceLangCode)
       .setTargetLanguage(targetLangCode)
       .build()
   val translator = translators[options]
   modelDownloading.setValue(true)

   // Register watchdog to unblock long running downloads
   Handler().postDelayed({ modelDownloading.setValue(false) }, 15000)
   modelDownloadTask = translator.downloadModelIfNeeded().addOnCompleteListener {
       modelDownloading.setValue(false)
   }
   translating.value = true
   return modelDownloadTask.onSuccessTask {
       translator.translate(text)
   }.addOnCompleteListener {
       translating.value = false
   }
}

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

انقر الآن على تشغيل ( execute.png) في شريط أدوات "استوديو Android". بعد تحميل التطبيق، من المفترض أن يظهر الآن على شكل الصورة المتحركة أدناه، حيث يعرض نتائج التعرّف على النص واللغة المحدّدة والنص المترجم إلى اللغة المختارة. يمكنك الاختيار من بين أيّ من اللغات الـ 59.

e2a9b80f1ff442d7.png

8. تهانينا!

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

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

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

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

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

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