Flutter ile Firebase MLKit Entegrasyonu

Flutter ile Makine Öğrenmesi konusuna girmeden önce biraz Flutter'dan bahsetmek istiyorum:
Flutter: Google tarafından üretilen ve geliştirilen açık kaynak kodlu mobil uygulama geliştirme UI framework'tür. Ayrıca web, masaüstü ve gömülü sistemlerde de kullanılmak için Google tarafından geliştirilmeye devam etmektedir.
Makine Öğrenmesin'den kısaca bahsetmek gerekirse yapay zekanın bir alt dalıdır. Öğrenebilen ve verileri üzerinde tahmin yürütebilen ve bu tahminleri kendi kendine uygulayan, algoritmaların inşalarını araştıran bir sistemdir diyebiliriz.

Makine Öğrenmesi yoluyla, makinemizi eğitebiliriz ve kendi başına karar verebilmesini sağlayabiliriz. Cihazlar üzerinde Makine Öğrenmesi birçok uygulamada kullanılmaktadır. Örneğin:
Akıllı Asistanlar
Akıllı Mesaj cevaplama sistemleri
Snapchat Filtreleri
Instgram Filtreleri
Google Lens
gibi uygulamalar Makine Öğrenmesini kullanarak mobil cihazlarda kullanılıyor.
Flutter kullanarak yaptığımız mobil uygulamalara da Makine Öğrenmesini entegre edebiliriz. Peki bunu nasıl yapacağız?
Firebase ML Kit ile;
ML Kit: Google tarafından üretilmiş, mobil geliştiricilerin uygulamalarına Makine Öğrenmesi yeteneklerini eklemelerini kolaylaştıran bir SDK’dir. ML Kit ile mobil uygulamanıza çeşitli özellikleri ekleyebilirsiniz;
Metin tanıma
Yüz tanıma
Görüntü etiketleme
Barkod okuma
Dil tanıma
Dil çevirme
Görselleri yazıya çevirme
Yazıları görsellere çevirme
gibi işlemler de kullanılmaktadır. Daha fazla kullanım alanları geliştiricinin hayal gücüne kalmıştır. ML Kit önemli bir SDK dir. Google Cloud Vision ve Cloud Auto ML gibi farklı Google Cloud platform hizmetleri tarafından desteklenmektedir.
Firebase ML Kit Nasıl Kullanılır:
Firebase ML, makine öğrenmesini kullanmak için size bazı seçeneklerden bahsedeceğim.
Bunlar;
Firebase Konsoldan kolay bir şekilde kullanmak
Cloud AutoML Vision kullanmak
Hazır Makine öğrenmesi API’leri kullanmak
1) Firebase Konsoldan kolay bir şekilde kullanmak:
Firebase Konsoluna giriş yapın ve yeni proje ekleyin.
Proje detayını ve ismini girin ve Android logosuna tıklayın daha sonra kontrol panelinden uygulama ekleyin.

Uygulamayı kaydedin; Android klasörünüzdeki /app/build.gradle dosyasına gidin.

Google-service.json dosyasını indirin ve uygulama klasörünüze yerleştirin.

Aşağıdaki kodları aynı şekilde ekleyin.
buildscript{
repositories{
//Aşağıdaki satıra sahip olup olmadığınızı kontrol edin.
google() //Google maven deposu.
}
dependencies{
}
}
allprojects{
repositories{
}
}
Aşağıdaki kodları /app/build.gradle dosyasına ekleyin.
apply plugin: 'com.android.application'
//Bu satırı ekleyin.
apply plugin: 'com.google.gms.google-services'
dependencies{
}
daha sonra;
FLUTTER UYGULAMANIZI KODLAYIN
Flutter uygulamanızı oluşturun.
pubspec.yaml dosyasına bir Firebase ML Kit paketi ekleyin.
dependencies:firebase_ml_vision: ^0.9.3+8
Görüntüleri etiketlemek için /app/build.gradle dosya dizinine aşağıdaki kodu ekleyin.
android {
dependencies{
api 'com.google.firebase:firebase-ml-vision-image-label-
model:17.0.2'
}
}
Uygulamanızda yüz algılama için /app/build.gradle dosya dizinine aşağıdaki kodu ekleyin.
android{
dependencies{
api 'com.google.firebase:firebase-ml-vision-face-model:17.0.2'
}
}
/app/src/main/AndroidManifest.xml dizinine aşağıdaki kodu ekleyin.
<application>
<meta-data
android:name="com.google.firebase.ml.vision.DEPENDENCİES"
android:value="ocr"/>
</application>
Projenin devamı için Cloud AutoML Vision kullanmamız gerekiyor. Aynı şekilde yönergelere devam edip projemizin yapımını devam ediyoruz.
2) Cloud AutoML Vision Kullanma: İkinci bölümde hem Coud AutoML Vision'u nasıl kullanıldığını anlatacağım, hem de bu projeye ekleyip projemizi yapımını sağlıklı bir şekilde devam ettireceğiz.
İlk olarak Firebase VisionImage oluşturun oluşturmak için bu kodları ekleyin.
final File imageFile = getImageFile();
final FirebaseVisionImage visionImage =
FirebaseVisionImage.fromFile(imageFile);
Barkod, resim, yüz ve metin tanımak için aşağıdaki kodlar ile dedektörleri oluşturun.
final BarcodeDetector barcodeDetector =
FirebaseVision.instance.barcodeDetector();
final ImageLabeler cloudLabeler =
FirebaseVision.instance.cloudImageLabeler();
final FaceDetector faceDetector =
FirebaseVision.instance.faceDetector();
final ImageLabeler labeler = FirebaseVision.instance.imageLabeler();
final TextRecognizer textRecognizer =
FirebaseVision.instance.textRecognizer();
Metin tanıması dışında tüm dedektörleri istediğiniz şekilde aşağıdaki kod ile yapılandırabilirsiniz.
final ImageLabeler labeler =
FirebaseVision.instance.imageLabler(ImageLabelerOptions(confidenceThreshold: 0.75),
);
VisionImage ile ProcessImage ögesini ayıklayın.
final List<Barcode> barcodes = await
barcodeDetector.detectInImage(visionImage)
final List<ImageLabel> cloudLabels = await
cloudLabeler.processImage(visionImage);
final List<Face> faces = await faceDetector.processImage(visionImage);
final List<ImageLabel> labels = await
labeler.processImage(visionImage);
final VisionText visionText = await
textRecognizer.processImage(visionImage);
Verileri Ayıklayın:
İlk olarak barkodları ayıklıyoruz.
for (Barcode barcode in barcodes) {
final Rectangle<int> boundingBox = barcode.boundingBox;
final List<Point<int>> cornerPoints = barcode.cornerPoints;
final String rawValue = barcode.rawValue;
final BarcodeValueTypevalueType = barcode.valueType;
switch (valueType) {
case BarcodeValueType.wifi:
final String ssid = barcode.wifi.ssid;
final String password = barcode.wifi.password;
final BarcodeWiFiEncryptionType type = barcode.wifi.encryptionType;
break;
case BarcodeValueType.url:
final String title = barcode.url.title;
final String url = barcode.url.url;
break;
}
}
Yüz tanımayı ayıklayın.
for (Face face in faces) {
final Rectangle<int> boundingBox = face.boundingBox;
final double rotY = face.headEulerAngleY; // Bu kod parçası Y ekseninde döndürür
final double rotZ = face.headEulerAngleZ;
FaceDetectorOptions (mouth, ears,
//Gözleri,yanakları ve burunu tanır):
final FaceLandmark leftEar =
face.getLandmark(FaceLandmarkType.leftEar);
if (leftEar != null) {
final Point<double> leftEarPos = leftEar.position;
}
if (face.smilingProbability != null) {
final double smileProb = face.smilingProbability;
}
if (face.trackingId != null) {
final int id = face.trackingId;
}
}
Son olarak close() komutu ile verileri serbest bırakın.
barcodeDetector.close();
cloudLabeler.close();
faceDetector.close();
labeler.close();
textRecognizer.close();
Tüm adımları bitirdikten sonra mobil uygulamanız artık hazır haldedir.
Bu uygulamada;
Metin Tanıma
Yüz Tanıma
Görüntü Etiketleme
Barkod Okuma
özelliklerinizi kullanabilirsiniz.
3) Hazır Makine Öğrenmesi API’leri kullanımı:
Önceden eğitilmiş hazır Makine Öğrenmesi API'lerinin kullanılmasıdır.
Yüz algılamadan metin tanımaya kadar, veri girişlerini besleyerek bu uygulamaları analiz edebilirsiniz.

Görsel de gördüğünüz gibi tüm Makine Öğrenmesi API'leri hazır olarak verilmiştir. Bunlar fiyatlandırılmaktadır. Ayda 1.000 adet kullanıma kadar ücretsizdir, daha sonra ise ücretlendirilmektedir.

Get Started in ML Kit ikonuna tıklayarak bu API'leri kolay bir şekilde başlatabilirsiniz.
Flutter ile Makine Öğrenmesi konusunu böylelikle tamamlamış olduk. Umarım faydalı olmuştur.
Github: https://github.com/TheMarsocx/FluttterMachineLearning
Teşekkürler.
Kaynaklar:
https://flutter.dev/docs/development/data-and-backend/firebase
https://firebase.google.com/docs/android/setup
https://firebase.flutter.dev/docs/overview/
https://icml.cc/Conferences/2010/papers/493.pdf
https://ieeexplore.ieee.org/abstract/document/7524469
https://jamanetwork.com/journals/jama/article-abstract/398051
https://aip.scitation.org/doi/abs/10.1063/1.5143373
#flutter #machinelearining #ai #mlkit #firebase #deeplearning