Flutter'da bilgisayarla görü mobil uygulaması nasıl oluşturulur?
Yayınlanan: 2020-04-22Makine Öğrenimi özellikleri günümüz uygulamalarında olmazsa olmaz hale geldi. Memnuniyeti artırabilir ve hedef kitlenize istedikleri olağanüstü uygulama deneyimini sunabilirler. Son donanım ve yazılım optimizasyonları sayesinde, Makine Öğrenimi modellerinin yürütülmesi buluttan mobil cihazlara taşınıyor.
Bu, yanıt gecikmesini ortadan kaldırarak ve gizlilik sorunlarını ele alarak kullanıcı deneyimi üzerinde büyük bir etkiye sahiptir. Kullanıcıların ev bitkilerine bakmalarına yardımcı olan bir uygulama olan Planter'ı oluşturmaya karar verdiğimizde, onu uygulama pazarında öne çıkarabilecek şeyin yapay zeka olduğunu biliyorduk.
Bizim fikrimiz, bilgisayarlı görme tekniklerini kullanarak bir görüntüden ev-bitki tipini tanıma işlevselliği eklemekti. Cihaz üzerindeki performansın TensorFlow Lite optimizasyonları sayesinde uygulama, sınıflandırma modelimizi yalnızca kullanıcının cihazında çalıştırabilir. Bu yazıda, hızlı bir şekilde bir görüntü sınıflandırma modelinin nasıl hazırlanacağını ve Flutter ile geliştirilmiş bir uygulamada nasıl dağıtılacağını anlatacağım.
Flutter'da Makine Öğrenimi Modülü Oluşturma - Adım Adım
Küçük Veri Sorunuyla Başa Çıkma
Bir Makine Öğrenimi modeli oluşturmanın ilk adımı veri toplamadır. Bir eğitim veri seti oluşturmak için, ticari yeniden kullanım için etiketlenmiş haklara sahip bir Google Aramasından bitki resimlerini aşağıdaki kısa komut dosyasıyla indirmemize izin veren Google Görseller İndirici'yi kullandık:
$ googleimagesdownload --keywords "Zamioculcas zamiifolia" --usage_rights yeniden kullanım için etiketlendi
Nihai veri setimiz, tür başına yaklaşık 70-170 görüntüden oluşuyordu. Bu kadar az veri ile sıfırdan iyi performans gösteren bir görüntü sınıflandırma modeli hazırlamak çok zor olurdu.
Neyse ki, veri kümeniz her sınıf için yalnızca yaklaşık yüz örnekten oluşsa bile, yüksek doğrulukta bir görüntü sınıflandırıcı oluşturmak için kullanılabilecek, herkese açık olarak kullanılabilen, önceden eğitilmiş bazı güçlü yapay sinir ağları vardır. Önceden eğitilmiş bir modeli belirli bir kullanım durumuna göre kullanma ve değiştirme tekniğine transfer öğrenmesi denir.
Veri Büyütme
Veri kümemizden maksimum düzeyde yararlanmak için, tensör görüntüleri yığınları oluşturan ve bunları anında artıran keras'ın ImageDataGenerator ön işleme paketini kullandık. Aşağıdaki dönüşümleri kullandık:
- Girişleri yatay olarak çevirme: horizontal_flip = True
- Aralıktan bir parlaklık kaydırma değeri ayarlama: parlaklık_aralığı = (0.75, 1.25)
- Sağlanan yoğunlukta kesme: shear_range = 15
- Belirtilen bir değerle çarparak yeniden ölçeklendirme: rescale=1./255
- Yakınlaştırma ve uzaklaştırma: zoom_range=0.4
- Herhangi bir yöne kaydırma: width_shift_range = 0.1, height_shift_range = 0.15
train_datagen_augment = ImageDataGenerator(rotation_range = 30, yatay_flip = Doğru, parlaklık_aralığı = (0.75,1.25), kesme_aralığı = 15, yeniden ölçeklendirme=1./255, zoom_range=0.4, genişlik_kaydırma_aralığı = 0.1, yükseklik_kaydırma_aralığı = 0.15)
Eğitim
ImageNet veri kümesinden bir milyondan fazla görüntü üzerinde eğitilmiş bir evrişimsel sinir ağı olan NASNet-Mobile'ı kullandık. NasNetMobile mimarisi, sinir ağı hücreleriyle oluşturulmuş bir dizi bloktan oluşur.
Blok, görüntü sınıflandırma sinir ağlarından bilinen, normal evrişimler, ayrılabilir evrişimler, maksimum havuzlama, ortalama havuzlama, kimlik eşleme vb. dahil olmak üzere bilinen dönüşümleri içeren operasyonel bir modüldür. Ağ, görüntüden 1'ini atamak üzere eğitilmiştir. Hayvanları, çiçekleri ve mobilyaları içeren 1000 kategori. Sonuç olarak, ağ, çok çeşitli görüntüler için zengin özellik temsillerini 'öğrendi'.
Aşağıdaki adımları tamamlayarak modelimizi oluşturduk:
- Önceden eğitilmiş ağın son katmanını kaldırın
- Ağın sonuna bir evrişim modeli ekleyin
- Eklenen modelden gelenler hariç, birleşik ağdaki tüm katmanları dondur
- Doğruluk artışı durana kadar modeli eğitin
- Önceden eğitilmiş modelin son donmuş evrişim bloğundaki tüm katmanları çöz
- Doğruluk artışı durana kadar modeli eğitin
- 5. ve 6. noktaları beş kez tekrarlayın
- Tüm modeli çözün ve doğruluk artışı durana kadar eğitin
Model Değerlendirmesi
Planter'ın sınıflandırma modeli, fotoğrafına dayalı olarak bir ev bitkisine bir bitki türü atamaya çalışır. Model, kullanıcının seçebileceği en yüksek olasılıkları atadığı üç türü döndürür. Modelin değerlendirilmesi sırasında aşağıdaki iki metriği kullandık:
- kategorik_doğruluk,
- top_k_categorical_doğruluk (k=3 ile).
Aşağıdaki grafik, modelimizin her eğitim dönemi için kategorik doğruluğu sunar.

Değerlendirme seti için nihai kategorik doğruluk 0,870 ve ilk 3 kategorik doğruluk 0,916'dır. Bu sonuçlar, kullanılan eğitim veri setinin küçük boyutu dikkate alındığında oldukça tatmin ediciydi.
Model Dönüşümü
Bir mobil uygulamada bir keras modelinin kullanılmasını istiyorsak, bunun bir TensorFlow Lite FlatBuffer nesnesine dönüştürülmesi gerekir. Bu, aşağıdaki örnekte gösterilen kodla yapılabilir.
tensorflow.lite'ı lite olarak içe aktar keras_model_path = "model/keras_model" tflite_model_path = "model/model.tflite" model.save(keras_model_path) dönüştürücü = lite.TFliteConverter.from_keras_model_file(keras_model_path) tflite_model = dönüştürücü.convert() open(tflite_model_path, "wb").write(tflite_model)
Model/model.tflite yolunda depolanan optimize edilmiş modele sahip olduğumuza göre, onu yerel mobil uygulamalarda aşağıdakileri kullanarak kolayca kullanabiliriz:
- Core ML – iOS uygulamaları için
- TensorFlow Lite Android Destek Kitaplığı – Android uygulamaları için
Şimdi size Planter ile olan deneyimimize dayanarak bu modeli Flutter ile nasıl kullanacağınızı göstereceğim.

Neden Flutter?
Flutter, Google'a ait bir UI araç takımıdır. Tek bir kod tabanından mobil, web ve masaüstü için yerel olarak derlenmiş uygulamalar oluşturmak için oluşturuldu. Flutter kullanmalı mıyım diye merak ediyorsanız, Topline by Abbey Road Studios'un Flutter by Miquido'da geliştirilmiş örnek olay incelemesi olan bu makaleyi okumanızı tavsiye ederim.
Modelimizi tflite kütüphanesi ile kullanabiliriz. TensorFlow Lite API'sine erişmek için bir Flutter eklentisidir. Hem iOS hem de Android platformlarında görüntü sınıflandırma, nesne algılama, Pix2Pix, Deeplab ve PoseNet'i destekler.
Flutter gelişimini merak mı ediyorsunuz?
Daha fazla bilgi edinUygulama geliştirme sürecimizde aşağıdaki adımları tamamlamamız gerekiyordu:
- pubspec.yaml dosyamıza tflite'ı bağımlılık olarak ekleyin
- Bir varlıklar klasörü oluşturun ve içine bir etiket dosyası ve bir model dosyası yerleştirin.
- pubspec.yaml'de şunu ekleyin:
varlıklar: - varlıklar/etiketler.txt - varlıklar/mobilenet_v1_1.0_224.tflite
- tflite kitaplığını içe aktarın:
'package:tflite/tflite.dart' dosyasını içe aktarın;
- Modeli ve etiketleri yükleyin:
String res = bekle Tflite.loadModel( model: "varlıklar/model.tflite", etiketler: "varlıklar/etiketler.txt", numThreads: 1 // varsayılan olarak 1'dir );
- Modeli bir görüntü üzerinde çalıştırın (bir tahmin yapın):
var tanıma = bekle Tflite.runModelOnImage( yol: tfResizeImage.path, resimStd: 255.0, numSonuçlar: 3, eşik: 0.00001, uyumsuz: doğru );
Tahmin çıktısı, aşağıdaki örnekte gösterilen biçime sahiptir:
[{güven: 0.03441339731216431, dizin: 46, etiket: Vriesea splendens}, {güven: 2.086162567138672e-7, dizin: 7, etiket: Aphelandra squarrosa}, {güven: 1.4901161193847656e-7, dizin: 19, etiket: Fern arum }]
- Yayın kaynakları:
bekle Tflite.close();
Sonuçlar
Planter, kütüphanenize resimli bir bitki eklemenizi sağlar. Bitkinizin fotoğrafını çekerek veya telefonun galerisinden bir fotoğraf seçerek görüntü alabilirsiniz. Dahil edilen ev-bitki sınıflandırma modeli, en yüksek olasılıkla tanınan üç türü döndürür ve bunları bir listede sunar.
Bir türü tıkladığınızda, önerilen sulama ve gübreleme programları ile önceden doldurulmuş bir form ve bitki hakkında bazı ek bilgiler içeren bitki özeti görünümüne yönlendirilirsiniz. Aşağıdaki akışta, bir kameralı cep telefonu ile çekilen bir görüntüde bir Zamioculcas zamiifolia'nın tanındığı bir örneği görebilirsiniz.



Makine Öğreniminizi Mobil'e Taşıyın!
Bu makalede, mobil uygulamanıza kullanıcı tarafından beğenilen yapay zeka özellikleri eklemenin basit ve hızlı olabileceğine sizi ikna etmek istedim. Ayrıca, model yürütmeyi mobil ortama taşımak, API yanıt gecikmelerini ortadan kaldırarak kullanıcılarınıza keyifli bir kullanıcı deneyimi sunar. Buluta veri gönderilmesi gerekmediğinden veri güvenliğinin sağlanmasına da yardımcı olur.
Flutter'ı kullanmaktan ve aynı anda hem iOS hem de Android yerel uygulamaları için kod derleme yeteneğinden büyük ölçüde yararlanabilirsiniz. Az bir çabayla uygulamanızın pazarda öne çıkmasını sağlayabilir ve uygulamanızın kitleyi elde tutma oranını en üst düzeye çıkarabilirsiniz.
Bir sonraki projeniz için hazır mısınız? Tereddüt etmeyin ve bizimle iletişime geçin!