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

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

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

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

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

التطبيق الذي ستصممه

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

في النهاية، من المفترض أن يظهر لك ما يلي:

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

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

المتطلبات

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

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

تنزيل الرمز

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

تنزيل رمز المصدر

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

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

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

في ملف 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'

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

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

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

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

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

TextAnalyzer.kt

private val detector = TextRecognition.getClient()

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

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

TextAnalyzer.kt

private fun recognizeTextOnDevice(
   image: InputImage
): Task<Text> {
   // Pass image to an ML Kit Vision API
   return detector.process(image)
       .addOnSuccessListener { visionText ->
           // Task completed successfully
           result.value = visionText.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

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

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

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

إنشاء مثيل لمعرّف اللغة في ML Kit

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

MainViewModel.kt

private val languageIdentification = LanguageIdentification.getClient()

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

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

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

MainViewModel.kt

languageIdentification.identifyLanguage(text)
   .addOnSuccessListener {
       if (it != "und")
           result.value = Language(it)
   }

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

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

استبدِل الدالة 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.

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

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

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

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

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

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