• Hakkımızda
  • Yazı Gönder
  • Sizden Gelenler
  • İletişim
Yazılım Karavanı | Bilim - Teknoloji - Mühendislik
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar
No Result
View All Result
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar
No Result
View All Result
Yazılım Karavanı | Bilim - Teknoloji - Mühendislik
No Result
View All Result
Home Flutter

Flutter’da TFLite Kullanımı

TFLite Çıktının Flutter'a Entegre Edilmesi

Ali Murat Çevik by Ali Murat Çevik
Ağustos 26, 2020
in Flutter, Yapay Zeka
10 min read
4
Flutter’da TFLite Kullanımı
WhatsApp'ta PaylaşTwitter'da PaylaşLinkedIn'de PaylaşTelegram'da Paylaş

Merhaba arkadaşlar, bu yazımda TensorFlow Lite kullanılarak elde edilmiş .tflite uzantılı dosyanın Flutter projesine entegre edilmesini inceleyeceğiz. Entegrasyonu eğitilmiş bir model üzerinden gerçekleştireceğiz, mobil kısmını anlatacağım bu bölümde bir model eğitme kısmına girmeyeceğim. Elinizde farklı uzantıda eğitilmiş bir modeliniz varsa, çıktısını .tflite’ a dönüştürüp kullanmanız da mümkündür.

Google tarafından Flutter için henüz resmi bir TensorFlow Lite paketi yayınlanmadı ancak geliştiricilerin paylaştığı Flutter “tflite” paketini kullanarak Flutter ile geliştirdiğimiz mobil uygulamalarımızı makine öğrenimiyle buluşturabiliyoruz. Mesela sağlık alanında cep telefonu kamerası ile ciltte yer alan ben, yara gibi problemlerin zararlı olup olmadığını taratabiliriz. Akciğer BT görüntüleri ile hastanın pnömoni belirtilerini inceleyebiliriz. İçerisinde benim de yer aldığım bir projede yine tflite kullanarak diyabetik retinopati hastalığının teşhisi için mobil uygulama geliştirildi. Bu proje retinayı, cep telefonu kamerasının ucuna takılan bir lens ile görüntülenip, dr hastalığına karar veren bir bir akıllı mobil uygulamaydı. Bunun gibi daha pek çok alanda geliştirdiğiniz modelleri, mobil uygulamanızda kullanabilirsiniz. Şimdi Flutter kısmına gelelim:

Öncelikle pubsec.yaml dosyamıza https://pub.dev/packages/tflite üzerinden tflite paketini ekleyelim.

dependencies:
tflite: ^1.0.5

Sonrasında, assets klasörüne model ekleyerek pubspec.yaml dosyasını güncelleyelim:

flutter:
assets:
- assets/modelAdi.tflite
- assets/labels.txt

assets klasörü içerisine .tflite uzantılı dosyanızla birlikte labels dosyanızı da metin belgesi olarak eklemeniz gerekmektedir. Örneği bir kedi – köpek fotoğraflarıyla eğitilmiş model için label.txt dosyası
0 Dog
1 Cat
0 köpeği, 1 kediyi işaret edecek şekilde olabilir.
Yapılandırmaları neredeyse tamamladık. android / app / build.gradle dosyasında bazı değişiklikler yapmamız gerekiyor. Android bloğunun altına aşağıdakileri ekleyelim:

aaptOptions {
noCompress 'tflite'
noCompress 'lite'
}

Hazırlıklar tamam!
TensorFlow lite gerçek zamanlı olarak sınıflandırma yaparak birden çok sonuç sağlıyor. Flutter’ın TensorFlow Lite ile birlikte çalışması gayet başarılı. İhtiyaç duyulan datasetleri Kaggle, IEEE DataPort gibi platformlardan edinerek eğitimlerinizi gerçekleştirebilirsiniz. Bu işin mutfağında Python yer alıyor. Google ML Kit ile de başarılı sonuçlar elde etmek mümkün ancak bu mutfakta ellerimize Python kesinlikle bulaşmalı diye düşünüyorum. 

Dart kısmına gelecek olursak, image_picker paketini kullanarak projemize devam edebiliriz.  pubsec.yaml dosyamıza image_picker paketini ekleyelim:

dependencies:
image_picker: ^0.6.7+7

Main.dart dosyası için import etmemiz gereken paketleri ekleyelim:

import 'package:flutter/material.dart';
import 'package:tflite/tflite.dart';
import 'package:image_picker/image_picker.dart';

import 'dart:io';

StatelessWidget kısmı için Scaffold içerisinde bir AppBar ekleyelim ve title olarak TFLite Örneği diyelim, body kısmı için birazdan tanımlayacağımız ResimSecimi() metodunu child olarak ekleyelim:

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('TFLite Örneği'),
centerTitle: true,
backgroundColor: Colors.black
),
body: Center(
child: ResimSecimi()
)
)
);
}
}

Bir StatefulWidget ve bir State sınıfı oluşturalım:

class ResimSecimi extends StatefulWidget {
@override
ResimSecimiState createState() => ResimSecimiState();
}

StatefulWidget sınıfını tanımlayalım:

class ResimSecimiState extends State {

}

Sıradaki işlem ihtiyacımız olan değişkenleri tanımlamak. Cihazdan gelecek olan görüntüyü tutmak için File tipinde bir imageURI değişkeni, sınıflandırma yapmak üzere kullanılacak String tipinde yüklenen görselin yolunu tutmak için path değişkeni ve TFLite ‘dan bize dönen sonucu tutmak için String tipinde bir result değişkeni tanımlayalım:

File imageURI;
String result;
String path;

Flutter’ın Future yapısını kullanarak ilk metodumuzu yazalım. getImageFromCamera() metodu adından da anlaşılacağı üzere mobil cihaz kamerası kullanılarak görüntülerin elde edilmesinde kullanılacak:

Future getImageFromCamera() async {
var image = await ImagePicker.pickImage(source: ImageSource.camera);

setState(() {
imageURI = image;
path = image.path;
});
}

Her zaman kameradan çekilen görsel kullanılmak istenilmeyebilir. Bu durum içinde cihaz depolamasında daha önceden yer alan imageları kullanabilmek için getImageFromGallery() metodunu kullanacağız.

Future getImageFromGallery() async {
var image = await ImagePicker.pickImage(source: ImageSource.gallery);

setState(() {
imageURI = image;
path = image.path;
});
}

benzer şekilde galeriden çekilen görsele ait nitelikler imageURI ve path değişkenlerinde tutulmakta. Artık görüntüyü aldık 🤓 Şimdi bu görüntüyü kullanarak sınıflandırma işlemlerimize devam edelim.

Future classifyImage() async {
await Tflite.loadModel(model: "assets/modelAdi.tflite",labels: "assets/labels.txt");
var output = await Tflite.runModelOnImage(path: path);

setState(() {
result = output.toString();
});
}

İlk olarak Tflite.loadModel ile modelimizi yüklüyoruz ve ardından modele kullanıcının seçtiği görsel yolunu vererek çalıştırıyoruz. Ardından sonucu result değişkeninde saklıyoruz. Görüntünün kendisi yerine yolu kullanıyoruz çünkü tflite paketi modeli File veri türlerinde çalıştıramaz. SetState () ‘de çıktıyı sonuç değişkeninde saklıyoruz. TFLite’ın kullanılabilmesi için gerekli yapıları tamamladık. Şimdi ise arayüz adımına geldik. Burada mantığın anlaşılması daha önemli olduğu için arayüze yalnızca 3 buton ekleyip projenin yürütülmesini sağlamak yeterli olacaktır. Butonlardan birisi kamerayı açmaya yarayacak olan fotoğraf çek butonu, galeriden seç butonu ve sınıflandırma işlemini başlatma butonu olacaktır. 

@override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
            child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
          imageURI == null
              ? Text('Resim seçilmedi.')
              : Image.file(imageURI,
                  width: 300, height: 200, fit: BoxFit.cover),
          Container(
              margin: EdgeInsets.fromLTRB(0, 30, 0, 20),
              child: FlatButton.icon(
                icon: Icon(Icons.camera_alt),
                onPressed: () => getImageFromCamera(),
                label: Text('Kamerayı Aç'),
                textColor: Colors.white,
                color: Colors.blue,
                padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
              )),
          Container(
              margin: EdgeInsets.fromLTRB(0, 0, 0, 0),
              child: FlatButton.icon(
                icon: Icon(Icons.image),
                onPressed: () => getImageFromGallery(),
                label: Text('Galeriden Seç'),
                textColor: Colors.white,
                color: Colors.orange,
                padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
              )),
          Container(
              margin: EdgeInsets.fromLTRB(0, 30, 0, 20),
              child: FlatButton.icon(
                icon: Icon(Icons.play_circle_outline),
                onPressed: () => classifyImage(),
                label: Text('Görüntüyü Sınıflandır'),
                textColor: Colors.white,
                color: Colors.green,
                padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
              )),
          result == null
              ? Text(
                  'Sonuç:',
                  style: TextStyle(fontSize: 22),
                )
              : Text(result, style: TextStyle(fontSize: 22))
        ])));
  }

Basit bir yapı için gerekli şeylerin hepsi bu kadar. Siz de mobil uygulama kısmını test etmek için hazır bir .tflite dosyası üzerinden deneyebilirsiniz. Ancak uygulamanızın başarısını artırmaya yönelik farklı yaklaşımlarla tflite paket özelliklerini de kullanmanız gereklidir.

Farklı Yaklaşımlar
Yukarıda tflite’ın basit kullanımını inceledik. Ancak tflite paketinin kullanımı yalnızca bununla sınırlı değil. Bu en basit haliyle bir kullanımdı. tflite paketi için farklı özellikler de mevcut. loadModel için farklı bir yaklaşım deneyebiliriz:

static Future<String> loadModel() async{
return Tflite.loadModel(
model: "assets/
modelAdi.tflite",
labels: "assets/labels.txt",
);
}

void initState() {
super.initState();

TFLiteHelper.loadModel().then((value) {
setState(() {
modelLoaded = true;
});
});
}

Model yüklendikten sonra, TensorFlow lite’a görselleri sağlamak için kameradan veya dosya yöneticisinden gelen fotoğraf çıktısını kullanabiliriz.

await Tflite.runModelOnFrame(
bytesList: image.planes.map((plane) {
return plane.bytes;
}).toList(),
numResults: 5)
.then((value) {
if (value.isNotEmpty) {
}});

Görüntü sınıflandırmada 2 çıktılı bir işlem için bazı özellikleri değiştirmek isteyebilirsiniz:

classifyImage(File image) async {
var output = await Tflite.runModelOnImage(
path: image.path,
numResults: 2,
threshold: 0.1,
imageMean: 125.5,
imageStd: 125.5
);

Sorularınızı aşağıdaki alana yorum olarak bırakabilirsiniz
İyi çalışmalar dilerim.

alimcevik
Tags: Machine LearningTensorFlowTFLite
SendTweet4Share1Share
Önceki Gönderi

B Ağaçları (B Trees)

Sonraki Gönderi

Özel KODLAB İndirimi!

İlgili Yazılar

Yapay Zeka Destekli Dijital Medya Takip Aracı: sentitracer.com

Yapay Zeka Destekli Dijital Medya Takip Aracı: sentitracer.com

by Yazılım Karavanı
Şubat 10, 2025
0

Dijital dünyada her gün milyonlarca veri üretilirken, bireyler ve markalar hakkında yapılan yorumlar, haberler ve paylaşımlar büyük bir bilgi havuzu...

Yazılım Geliştiriciler İçin Yapay Zeka Araçları

Yazılım Geliştiriciler İçin Yapay Zeka Araçları

by Ali Murat Çevik
Haziran 27, 2023
0

Son zamanların popüler araçlarının çoğunlukla yapay zeka tabanlı olduğunu görmekteyiz. Bu tür sistemlerle ilk defa tanışanlar henüz ChatGPT’ nin verdiği...

Flutter CI/CD Süreçleri (Azure DevOps Pipeline) – Part1/iOS

Flutter CI/CD Süreçleri (Azure DevOps Pipeline) – Part1/iOS

by Ali Murat Çevik
Mayıs 11, 2023
0

Herkese selamlar, bu yazıda yazılım geliştirme süreçlerinin verimliliğini ve çevikliğini artıracak bir konuyu ele almak istedim. Part1 olarak fazlandırdığım bu...

VGG-19 Transfer Learning ile Görüntü Sınıflandırma

VGG-19 Transfer Learning ile Görüntü Sınıflandırma

by Ali Murat Çevik
Eylül 12, 2022
0

VGG19 Nedir? VGG19, adını Oxford Üniversitesi’nde bulunan “Visual Geometry Group” isimli gruptan almaktadır. Sonda bulunan 19 ise katman sayısını belirtmektedir....

Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı

Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı

by Emre İnaç
Ağustos 23, 2022
0

CHATBOT NEDİR ? Chatbot, bir cihazda, (Siri, Alexa, Google Asistan vb.), uygulamada, web sitesinde veya diğer ağlarda bulunan yapay zeka...

Next Post
Özel KODLAB İndirimi!

Özel KODLAB İndirimi!

Günümüz Dünyasının Petrolü “Veri”

Günümüz Dünyasının Petrolü "Veri"

Yorumlar 4

  1. Muhammed says:
    5 sene ago

    Emeğinize sağlık, çok faydalı bir yazı olmuş

    • Ali Murat Çevik says:
      5 sene ago

      Teşekkürler

  2. Eray says:
    5 sene ago

    çok güzel bir yazı olmuş cidden teşekkürler 🙂

    • Ali Murat Çevik says:
      5 sene ago

      Teşekkürler 🙂

  • Popüler
  • Yorumlar
  • En Yeniler
Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Temmuz 26, 2021
B Ağaçları (B Trees)

B Ağaçları (B Trees)

Ağustos 24, 2020
Gini Index Kullanılarak Karar Ağacının (Decision Tree)  Oluşturulması

Gini Index Kullanılarak Karar Ağacının (Decision Tree) Oluşturulması

Ağustos 20, 2020
Bubble Sort (Kabarcık Sıralama) Algoritması

Bubble Sort (Kabarcık Sıralama) Algoritması

Mayıs 18, 2018
2020 ‘nin En Güncel ve Tehlikeli Zararlı Yazılımları

2020 ‘nin En Güncel ve Tehlikeli Zararlı Yazılımları

6
Magento 2 Detaylı Kurulum & Hatalar

Magento 2 Detaylı Kurulum & Hatalar

5
Flutter’da TFLite Kullanımı

Flutter’da TFLite Kullanımı

4
Bubble Sort (Kabarcık Sıralama) Algoritması

Bubble Sort (Kabarcık Sıralama) Algoritması

2
Yeni Siber Güvenlik Kanunu: Yazılım Geliştiriciler İçin Neler Değişti?

Yeni Siber Güvenlik Kanunu: Yazılım Geliştiriciler İçin Neler Değişti?

Mart 19, 2025
Google Play Health Connect Politika Güncellemesi: Güncellenen Veri Koruma Kuralları

Google Play Health Connect Politika Güncellemesi: Güncellenen Veri Koruma Kuralları

Mart 10, 2025
Yapay Zeka Destekli Dijital Medya Takip Aracı: sentitracer.com

Yapay Zeka Destekli Dijital Medya Takip Aracı: sentitracer.com

Şubat 10, 2025
OneSignal Kullanarak Güvenli Push Notifications Oluşturma Rehberi

OneSignal Kullanarak Güvenli Push Notifications Oluşturma Rehberi

Aralık 14, 2024

Reklam

Yazılım Karavanı | Bilim – Teknoloji – Mühendislik

Bilgi Teknolojileri alanına meraklı herkesin buluşma noktası!

No Result
View All Result
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar

© 2020 Yazılım Karavanı Kaynak gösterilmesini rica ederiz.