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

1. مقدمة

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

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

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

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

التطبيقات التي ستنشئها

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

في النهاية، من المفترض أن ترى شيئًا مشابهًا للصورة أدناه.

e2a9b80f1ff442d7.png

ما ستتعرّف عليه

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

المتطلبات

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

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

2. الإعداد

تنزيل الرمز

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

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

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

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

3- استيراد المشروع والتأكّد من تبعيات ML Kit وCameraX

استورِد المشروع الأوّلي إلى "استوديو Android". في ملف app/build.gradle، تأكَّد من تضمين التبعيات اللازمة لكلٍّ من ML Kit و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 Studio والتحقّق من تبعيات ML Kit، أصبحت مستعدًا لتشغيل التطبيق للمرة الأولى. انقر على تشغيل ( execute.png) في شريط أدوات "استوديو Android".

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

bd1489441c334de3.png

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

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

إنشاء مثيل لـ "أداة رصد النصوص" من حزمة ML Kit

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

TextAnalyzer.kt

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

init {
   lifecycle.addObserver(detector)
}

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

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

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

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

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

استبدِل 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. يمكنك الآن التعرّف على النص ولغته من خلاصة الكاميرا المباشرة وترجمته إلى لغة تختارها، وكل ذلك في الوقت الفعلي.

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

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

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

  • استخدِم ML Kit وCameraX في تطبيق Android الخاص بك.

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