تشخیص متن و ویژگی های صورت با ML Kit: Android

۱. مقدمه

کیت ML یک SDK موبایل است که تخصص یادگیری ماشینی گوگل را در قالب یک بسته قدرتمند اما آسان برای استفاده، به برنامه‌های اندروید و iOS می‌آورد. چه در یادگیری ماشینی تازه‌کار باشید و چه باتجربه، می‌توانید به راحتی قابلیت‌های مورد نیاز خود را تنها با چند خط کد پیاده‌سازی کنید. برای شروع نیازی به دانش عمیق در مورد شبکه‌های عصبی یا بهینه‌سازی مدل نیست.

اگر در حین کار با این آزمایشگاه کد با هرگونه مشکلی (اشکال در کد، خطاهای دستوری، کلمات نامفهوم و غیره) مواجه شدید، لطفاً مشکل را از طریق لینک «گزارش اشتباه» در گوشه پایین سمت چپ آزمایشگاه کد گزارش دهید.

چگونه کار می‌کند؟

کیت ML با گرد هم آوردن فناوری‌های یادگیری ماشین گوگل، مانند Mobile Vision و TensorFlow Lite ، در یک SDK واحد، اعمال تکنیک‌های یادگیری ماشین را در برنامه‌های شما آسان می‌کند. چه به قابلیت‌های بلادرنگ مدل‌های روی دستگاه Mobile Vision نیاز داشته باشید و چه به انعطاف‌پذیری مدل‌های سفارشی TensorFlow Lite، کیت ML نیازهای شما را برآورده می‌کند.

این آزمایشگاه کدنویسی شما را در ساخت اپلیکیشن اندروید خودتان که می‌تواند به طور خودکار متن و ویژگی‌های چهره را در یک تصویر تشخیص دهد، راهنمایی می‌کند.

آنچه خواهید ساخت

در این آزمایشگاه کد، شما یک برنامه اندروید با ML Kit خواهید ساخت. برنامه شما:

  • استفاده از API تشخیص متن ML Kit برای تشخیص متن در تصاویر
  • استفاده از API کانتور چهره ML Kit برای شناسایی ویژگی‌های چهره در تصاویر

آنچه یاد خواهید گرفت

  • نحوه استفاده از ML Kit SDK برای افزودن آسان قابلیت‌های پیشرفته یادگیری ماشینی مانند تشخیص متن و تشخیص ویژگی‌های چهره

آنچه نیاز دارید

  • نسخه جدید اندروید استودیو (نسخه ۳.۰ به بالا)
  • شبیه‌ساز اندروید استودیو یا یک دستگاه اندروید فیزیکی
  • کد نمونه
  • آشنایی اولیه با توسعه اندروید در جاوا
  • درک اولیه از مدل‌های یادگیری ماشین

این آزمایشگاه کد بر روی کیت یادگیری ماشین (ML Kit) تمرکز دارد. مفاهیم و بلوک‌های کد نامربوط، حذف شده‌اند و برای کپی و پیست ساده در اختیار شما قرار گرفته‌اند.

۲. راه‌اندازی

کد را دانلود کنید

برای دانلود تمام کدهای این codelab روی لینک زیر کلیک کنید:

فایل زیپ دانلود شده را از حالت فشرده خارج کنید. این کار یک پوشه ریشه ( mlkit-android-master ) را با تمام منابع مورد نیاز شما از حالت فشرده خارج می‌کند. برای این codelab، فقط به منابع موجود در زیرشاخه vision نیاز خواهید داشت.

زیرشاخه‌ی vision در مخزن mlkit-android-master شامل دو دایرکتوری است:

  • پوشه android_studio.png کد آغازین - کدی که در این آزمایشگاه کد بر اساس آن کدنویسی می‌کنید.
  • پوشه android_studio.png نهایی - کد تکمیل‌شده برای برنامه نمونه نهایی.

۳. وابستگی‌های ML Kit را بررسی کنید

وابستگی‌های کیت ML را تأیید کنید

خطوط زیر باید از قبل به انتهای فایل build.gradle در دایرکتوری app پروژه شما اضافه شده باشند (برای تأیید تیک بزنید):

ساخت.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 هستند که برای پیاده‌سازی ویژگی‌های این codelab به آنها نیاز دارید.

۴. برنامه‌ی آغازین را اجرا کنید

حالا که پروژه را به اندروید استودیو وارد کرده‌اید و وابستگی‌های ML Kit را بررسی کرده‌اید، آماده‌اید تا برنامه را برای اولین بار اجرا کنید. شبیه‌ساز اندروید استودیو را اجرا کنید و روی Run () کلیک کنید. اجرا.png ) در نوار ابزار اندروید استودیو.

برنامه باید روی شبیه‌ساز شما اجرا شود. در این مرحله، باید یک طرح‌بندی اولیه ببینید که دارای یک فیلد کشویی است که به شما امکان می‌دهد بین ۳ تصویر انتخاب کنید. در بخش بعدی، قابلیت تشخیص متن را به برنامه خود اضافه خواهید کرد تا متن موجود در تصاویر را شناسایی کند.

۵. اضافه کردن قابلیت تشخیص متن روی دستگاه

در این مرحله، قابلیتی را به برنامه شما اضافه خواهیم کرد تا متن موجود در تصاویر را تشخیص دهد.

تنظیم و اجرای تشخیص متن روی تصویر در دستگاه

کد زیر را به متد 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 ) را در نوار ابزار اندروید استودیو پیدا کنید. پس از بارگذاری برنامه، مطمئن شوید که Test Image 1(Text) در فیلد کشویی انتخاب شده است و روی دکمه FIND TEXT کلیک کنید.

اکنون برنامه شما باید مانند تصویر زیر باشد، که نتایج تشخیص متن و کادرهای محصورکننده را در بالای تصویر اصلی نشان می‌دهد.

10b12d0e8822eaf5.png

عکس: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0

تبریک می‌گویم، شما به تازگی تشخیص متن روی دستگاه را با استفاده از کیت ML به برنامه خود اضافه کرده‌اید! تشخیص متن روی دستگاه برای بسیاری از موارد استفاده عالی است زیرا حتی زمانی که برنامه شما به اینترنت متصل نیست نیز کار می‌کند و به اندازه کافی سریع است که بتوان از آن در تصاویر ثابت و همچنین فریم‌های ویدیویی زنده استفاده کرد.

۶. اضافه کردن تشخیص خطوط چهره روی دستگاه

در این مرحله، ما قابلیتی را به برنامه شما اضافه خواهیم کرد تا خطوط چهره‌ها را در تصاویر تشخیص دهد.

تنظیم و اجرای تشخیص خطوط چهره روی تصویر روی دستگاه

کد زیر را به متد 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 ) را در نوار ابزار اندروید استودیو انتخاب کنید. پس از بارگذاری برنامه، مطمئن شوید که Test Image 2 (Face) در فیلد کشویی انتخاب شده است و روی دکمه FIND FACE CONTOUR کلیک کنید.

اکنون برنامه شما باید مانند تصویر زیر باشد، که نتایج تشخیص خطوط چهره و خطوط چهره را به صورت نقاطی که روی تصویر اصلی قرار گرفته‌اند، نشان می‌دهد.

f9ff2fcbf63f0f3b.png

تبریک می‌گویم، شما به تازگی تشخیص خطوط چهره روی دستگاه را با استفاده از کیت ML به برنامه خود اضافه کرده‌اید! تشخیص خطوط چهره روی دستگاه برای بسیاری از موارد استفاده عالی است زیرا حتی زمانی که برنامه شما به اینترنت متصل نیست نیز کار می‌کند و به اندازه کافی سریع است که می‌توان از آن در تصاویر ثابت و همچنین فریم‌های ویدیویی زنده استفاده کرد.

۷. تبریک می‌گویم!

شما با موفقیت از ML Kit برای افزودن آسان قابلیت‌های پیشرفته یادگیری ماشین به برنامه خود استفاده کردید.

آنچه ما پوشش داده‌ایم

  • نحوه اضافه کردن ML Kit به برنامه اندروید شما
  • نحوه استفاده از تشخیص متن روی دستگاه در کیت ML برای یافتن متن در تصاویر
  • نحوه استفاده از کانتور چهره روی دستگاه در کیت ML برای شناسایی ویژگی‌های چهره در تصاویر

مراحل بعدی

  • از کیت ML در برنامه اندروید خود استفاده کنید!

اطلاعات بیشتر