Makine Öğrenimi Kiti ile metin ve yüz özelliklerini tanıma: Android

1. Giriş

ML Kit, Google'ın makine öğrenimi uzmanlığını Android ve iOS uygulamalarına taşıyan, güçlü ancak kullanımı kolay bir mobil SDK'dır. Makine öğrenimine yeni başlamış olsanız da deneyimli olsanız da ihtiyacınız olan işlevleri yalnızca birkaç satır kodla kolayca uygulayabilirsiniz. Başlamak için nöral ağlar veya model optimizasyonu hakkında derinlemesine bilgi sahibi olmanız gerekmez.

Bu codelab'i uygularken herhangi bir sorunla (kod hataları, dilbilgisi hataları, net olmayan ifadeler vb.) karşılaşırsanız lütfen codelab'in sol alt köşesindeki Hata bildir bağlantısını kullanarak sorunu bildirin.

İşleyiş şekli

ML Kit, Mobile Vision ve TensorFlow Lite gibi Google'ın makine öğrenimi teknolojilerini tek bir SDK'da bir araya getirerek uygulamalarınızda makine öğrenimi tekniklerini kolayca uygulamanızı sağlar. İster Mobile Vision'ın cihaz üzerinde modellerinin gerçek zamanlı özelliklerine ister özel TensorFlow Lite modellerinin esnekliğine ihtiyacınız olsun, ML Kit size yardımcı olur.

Bu codelab'de, resimdeki metinleri ve yüz özelliklerini otomatik olarak algılayabilen kendi Android uygulamanızı oluşturma adımları açıklanmaktadır.

Ne oluşturacaksınız?

Bu codelab'de ML Kit ile bir Android uygulaması oluşturacaksınız. Uygulamanız şunları yapabilecek:

  • Resimlerdeki metinleri algılamak için ML Kit Metin Tanıma API'sini kullanma
  • Resimlerdeki yüz özelliklerini belirlemek için ML Kit Face Contour API'yi kullanma

Neler öğreneceksiniz?

  • Metin tanıma ve yüz özelliği algılama gibi gelişmiş makine öğrenimi özelliklerini kolayca eklemek için ML Kit SDK'sını kullanma

Gerekenler

  • Android Studio'nun yeni bir sürümü (3.0 veya daha yeni)
  • Android Studio Emulator veya fiziksel bir Android cihaz
  • Örnek kod
  • Java'da Android geliştirme hakkında temel bilgiler
  • Makine öğrenimi modelleri hakkında temel bilgi

Bu codelab, ML Kit'e odaklanmaktadır. Alakalı olmayan kavramlar ve kod blokları işaretlenmiştir ve yalnızca kopyalayıp yapıştırmanız için paylaşılmıştır.

2. Hazırlanma

Kodu İndirme

Bu codelab'in tüm kodunu indirmek için aşağıdaki bağlantıyı tıklayın:

İndirilen ZIP dosyasını açın. Bu işlem, ihtiyacınız olan tüm kaynakları içeren bir kök klasörü (mlkit-android-master) açar. Bu codelab için yalnızca vision alt dizinindeki kaynaklara ihtiyacınız olacak.

mlkit-android-master deposundaki vision alt dizini iki dizin içerir:

  • android_studio_folder.pngstarter: Bu codelab'de temel alacağınız başlangıç kodu.
  • android_studio_folder.pngfinal: Tamamlanmış örnek uygulamanın kodu.

3. ML Kit'in bağımlılıklarını kontrol etme

ML Kit'in bağımlılıklarını doğrulama

Aşağıdaki satırlar, projenizin app dizinindeki build.gradle dosyasının sonuna eklenmiş olmalıdır (onaylamak için kontrol edin):

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'
}

Bu kod laboratuvarındaki özellikleri uygulamak için gereken belirli ML Kit bağımlılıkları şunlardır:

4. Başlangıç uygulamasını çalıştırma

Projeyi Android Studio'ya aktarıp ML Kit'in bağımlılıklarını kontrol ettiğinize göre artık uygulamayı ilk kez çalıştırmaya hazırsınız. Android Studio emülatörünü başlatın ve Android Studio araç çubuğunda Run'ı ( execute.png) tıklayın.

Uygulama, emülatörünüzde başlatılmalıdır. Bu noktada, 3 resim arasından seçim yapmanıza olanak tanıyan bir açılır alan içeren temel bir düzen görmeniz gerekir. Sonraki bölümde, resimlerdeki metinleri tanımlamak için uygulamanıza metin tanıma özelliği ekleyeceksiniz.

5. Cihaz üzerinde metin tanıma ekleme

Bu adımda, resimlerdeki metinleri tanıma işlevini uygulamanıza ekleyeceğiz.

Görüntü üzerinde cihaz üzerinde metin tanıma özelliğini ayarlama ve çalıştırma

MainActivity sınıfının runTextRecognition yöntemine aşağıdakileri ekleyin:

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

Yukarıdaki kod, metin tanıma dedektörünü yapılandırır ve yanıtla birlikte processTextRecognitionResult işlevini çağırır.

Metin tanıma yanıtını işleme

Sonuçları ayrıştırmak ve uygulamanızda göstermek için processTextRecognitionResult sınıfındaki MainActivity öğesine aşağıdaki kodu ekleyin.

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

           }
       }
   }
}

Uygulamayı emülatörde çalıştırma

Şimdi Android Studio araç çubuğunda Run'ı ( execute.png) tıklayın. Uygulama yüklendikten sonra açılır listede Test Image 1(Text) seçeneğinin belirlendiğinden emin olun ve FIND TEXT düğmesini tıklayın.

Uygulamanız artık aşağıdaki resimdeki gibi görünmeli, metin tanıma sonuçlarını ve sınırlayıcı kutuları orijinal resmin üzerinde göstermelidir.

10b12d0e8822eaf5.png

Fotoğraf: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0

Tebrikler, ML Kit'i kullanarak uygulamanıza cihaz üzerinde metin tanıma özelliğini eklediniz. Cihaz üzerinde metin tanıma, uygulamanız internete bağlı olmasa bile çalıştığı ve hem hareketsiz görüntülerde hem de canlı video karelerinde kullanılabilecek kadar hızlı olduğu için birçok kullanım alanı için idealdir.

6. Cihaz üzerinde yüz konturu algılama özelliği eklendi

Bu adımda, uygulamanıza resimlerdeki yüzlerin hatlarını tanıma işlevi ekleyeceğiz.

Görüntüde cihaz üzerinde yüz konturu algılamayı ayarlama ve çalıştırma

MainActivity sınıfının runFaceContourDetection yöntemine aşağıdakileri ekleyin:

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

}

Yukarıdaki kod, yüz konturu algılayıcıyı yapılandırır ve yanıtta processFaceContourDetectionResult işlevini çağırır.

Yüz konturu algılama yanıtını işleme

Sonuçları ayrıştırmak ve uygulamanızda göstermek için processFaceContourDetectionResult sınıfındaki MainActivity öğesine aşağıdaki kodu ekleyin.

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

Uygulamayı emülatörde çalıştırma

Şimdi Android Studio araç çubuğunda Run'ı ( execute.png) tıklayın. Uygulama yüklendikten sonra açılır listede Test Image 2 (Face) seçeneğinin belirlendiğinden emin olun ve FIND FACE CONTOUR düğmesini tıklayın.

Uygulamanız artık aşağıdaki resimdeki gibi görünmeli, yüz konturu algılama sonuçlarını göstermeli ve yüzün konturlarını orijinal resmin üzerine yerleştirilmiş noktalar olarak göstermelidir.

f9ff2fcbf63f0f3b.png

Tebrikler, ML Kit'i kullanarak uygulamanıza cihaz üzerinde yüz konturu algılama özelliğini eklediniz. Cihaz üzerinde yüz konturu algılama, uygulamanızın internet bağlantısı olmasa bile çalıştığı ve hem hareketsiz görüntülerde hem de canlı video karelerinde kullanılabilecek kadar hızlı olduğu için birçok kullanım alanı için idealdir.

7. Tebrikler!

Uygulamanıza kolayca gelişmiş makine öğrenimi özellikleri eklemek için ML Kit'i başarıyla kullandınız.

İşlediğimiz konular

  • Android uygulamanıza ML Kit'i ekleme
  • Resimlerdeki metinleri bulmak için ML Kit'te cihaz üzerinde metin tanıma nasıl kullanılır?
  • Görüntülerdeki yüz özelliklerini belirlemek için ML Kit'te cihaz üzerinde yüz konturu özelliğini kullanma

Sonraki Adımlar

  • ML Kit'i kendi Android uygulamanızda kullanın.

Daha Fazla Bilgi