Gereksinimler ve Ön Hazırlık
Projenize başlamadan önce geliştirme ortamınızın güncel olduğundan emin olmalısınız. Nesne tanıma işlemleri yoğun hesaplama gerektirdiği için emülatör yerine fiziksel bir cihaz kullanmanız önerilir.
- Flutter SDK 3.24 veya üzeri sürüm.
- Dart 3.5 veya üzeri sürüm.
- Android için minSdkVersion 23 ve üzeri, iOS için 13.0 ve üzeri.
- Kamera erişimi için gerekli izinlerin (AndroidManifest.xml ve Info.plist) yapılandırılması.
Projenize gerekli bağımlılıkları eklemek için pubspec.yaml dosyanıza şu paketleri dahil etmelisiniz:
dependencies:
flutter:
sdk: flutter
google_mlkit_object_detection: ^0.13.0
camera: ^0.11.0
permission_handler: ^11.3.1
Bu paketler, Google'ın ML Kit kütüphanesini kullanarak nesne tanıma mantığını yönetmemize ve cihaz kamerasından canlı veri akışı almamıza olanak tanır.
Kamera Akışını Yapılandırma
Nesne tanıma sisteminin kalbi, kameradan gelen görüntü kareleridir (frames). Bu kareleri yakalayıp işleyebilmek için camera paketini kullanarak bir kontrolcü (controller) oluşturmamız gerekir.
late CameraController _controller;
Future initializeCamera() async {
final cameras = await availableCameras();
_controller = CameraController(cameras[0], ResolutionPreset.medium);
await _controller.initialize();
if (mounted) setState(() {});
}
Burada ResolutionPreset.medium seçimi, performans ve doğruluk arasındaki dengeyi korumak için idealdir. Çok yüksek çözünürlük, işlemciyi yorarak kare hızını (FPS) düşürebilir.
Güvenlik Uyarısı: Kamera izinlerini sadece ihtiyaç duyulduğunda isteyin. Kullanıcı gizliliği için uygulamanızın kamera kullandığını belirten bir bildirim metnini mutlaka
Info.plistdosyanıza ekleyin.
ML Kit ile Nesne Algılama Modeli Kurulumu
Google ML Kit, nesne algılama için önceden eğitilmiş modeller sunar. İleri düzey uygulamalarda, nesnelerin takibi (tracking) ve sınıflandırılması için ObjectDetector nesnesini yapılandırmanız gerekir.
final options = ObjectDetectorOptions(
mode: DetectionMode.stream,
classifyObjects: true,
multipleObjects: true,
);
final objectDetector = ObjectDetector(options: options);
Bu kod bloğunda, DetectionMode.stream kullanarak canlı akış için optimize edilmiş bir yapı kurduk. classifyObjects parametresini true yaparak, nesnenin ne olduğunu (örneğin: "sandalye", "telefon") öğreniyoruz.
Görüntü İşleme ve Nesne Tanıma Adımları
Kameradan gelen her kareyi işlemek için InputImage formatına dönüştürmemiz gerekir. Bu, ML Kit'in anlayabileceği standart bir formattır.
Future processImage(CameraImage image) async {
final inputImage = InputImage.fromBytes(
bytes: image.planes[0].bytes,
metadata: InputImageMetadata(
size: Size(image.width.toDouble(), image.height.toDouble()),
rotation: InputImageRotation.rotation0deg,
format: InputImageFormat.nv21,
bytesPerRow: image.planes[0].bytesPerRow,
),
);
final objects = await objectDetector.processImage(inputImage);
// Nesneleri ekrana çizdirme mantığı buraya gelecek
}
Burada InputImageMetadata kısmında cihazın sensör verilerini doğru eşlemek kritiktir. Yanlış meta veri tanımlamaları, nesne koordinatlarının kaymasına neden olur.
Nesne Tanıma Yöntemlerinin Karşılaştırılması
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| ML Kit (Cihaz İçi) | Çevrimdışı çalışır, hızlıdır. | Model özelleştirilemez. |
| TensorFlow Lite | Özel model eğitilebilir. | Geliştirme süreci karmaşıktır. |
| Bulut Tabanlı API | Çok yüksek doğruluk. | İnternet bağımlılığı, gecikme. |
Yaygın Hatalar ve Performans İpuçları
Nesne tanıma uygulamalarında en sık karşılaşılan sorun "kare atlama" (frame dropping) ve pil tüketimidir. Bunu engellemek için:
- İşlemleri
Isolate(Dart'ın çoklu iş parçacığı yapısı) üzerinde yapmayı değerlendirin. - Kamera çözünürlüğünü ihtiyacınızdan fazla tutmayın.
- Nesne tespiti yapılmadığı anlarda
objectDetector.close()metodunu çağırarak kaynakları serbest bırakın.
@override
void dispose() {
_controller.dispose();
objectDetector.close();
super.dispose();
}
Sıkça Sorulan Sorular
Nesne tanıma sistemi pil tüketimini nasıl etkiler?
Sürekli kamera akışı ve görüntü işleme CPU'yu yüksek yük altında tutar. Performansı artırmak için işlem aralıklarını (örneğin saniyede 5 kare yerine 2 kare) optimize edebilirsiniz.
Özel nesneleri nasıl tanıtabilirim?
ML Kit'in standart modeli genel nesneleri tanır. Eğer özel bir nesne (örneğin sadece sizin ürününüz) tanımlamak istiyorsanız, TensorFlow Lite ile kendi modelinizi eğitip LocalModel olarak uygulamaya eklemelisiniz.
Bu sistem internet olmadan çalışır mı?
Evet, Google ML Kit cihaz üzerinde çalıştığı için internet bağlantısı gerektirmez. Bu, gizlilik odaklı uygulamalar için büyük bir avantajdır.
Neden nesne kutuları kayıyor?
Bu genellikle cihazın ekran oryantasyonu ile kamera sensörünün yönü arasındaki uyumsuzluktan kaynaklanır. InputImageRotation değerini cihazın o anki yönüne göre dinamik güncellemelisiniz.
Uygulama neden çöküyor?
Genellikle kaynak yönetimi hatalarından kaynaklanır. CameraController veya ObjectDetector nesnelerini dispose etmeyi unutmak bellek sızıntısına yol açar.
Özel Nesne Tanıma için TFLite Modeli Entegrasyonu
Google ML Kit, genel nesne tespiti için harika bir başlangıç noktası olsa da, belirli bir endüstriyel parça, bitki türü veya özel bir ürün grubu gibi spesifik nesneleri tanımanız gerektiğinde kendi eğitilmiş modelinizi kullanmanız gerekir. Bu noktada TensorFlow Lite (TFLite) devreye girer.
TFLite Modelini Projeye Dahil Etme
Eğittiğiniz .tflite model dosyasını ve buna karşılık gelen labels.txt dosyasını projenizin assets klasörüne ekleyin. Ardından pubspec.yaml dosyanızda bu dosyaları tanımlamayı unutmayın:
flutter:
assets:
- assets/my_model.tflite
- assets/labels.txt
Özel Model ile Çıkarım Yapma
Modeli yüklemek ve kamera akışından gelen verileri bu modele beslemek için tflite_flutter paketini kullanabilirsiniz. Aşağıdaki kod bloğu, bir görüntünün model üzerinden nasıl işleneceğini göstermektedir:
import 'package:tflite_flutter/tflite_flutter.dart';
class ModelInterpreter {
late Interpreter _interpreter;
Future loadModel() async {
_interpreter = await Interpreter.fromAsset('my_model.tflite');
}
void runInference(List input) {
var output = List.filled(1 * 10, 0).reshape([1, 10]);
_interpreter.run(input, output);
print("Tahmin Sonucu: $output");
}
}
Nesne Tanıma Sistemlerinde Dağıtım (Deployment) ve Test Stratejileri
Geliştirdiğiniz nesne tanıma uygulamasını canlıya almadan önce, farklı donanım konfigürasyonlarında performans testi yapmanız kritik öneme sahiptir. Yapay zeka modelleri, düşük seviyeli cihazlarda aşırı ısınmaya veya kare hızının (FPS) düşmesine neden olabilir.
Performans Testi İçin İpuçları
- FPS İzleme: Uygulamanızın saniyede kaç kare işlediğini
fps_monitorgibi araçlarla takip edin. 20 FPS altı, kullanıcı deneyimini ciddi oranda düşürür. - Quantization (Nicemleme): Modelinizi eğitirken veya dönüştürürken
Float16veyaInt8nicemleme yöntemlerini kullanarak model boyutunu küçültün ve işlemci üzerindeki yükü azaltın. - GPU Delegasyonu: TFLite kullanırken
GpuDelegatekullanarak hesaplamaların CPU yerine GPU üzerinde yapılmasını sağlayın. Bu, özellikle karmaşık modellerde 3-4 kat hız artışı sağlayabilir.
İpucu: Uygulamanızı yayınlamadan önce mutlaka flutter build apk --split-per-abi komutunu kullanarak, her işlemci mimarisi (arm64-v8a, armeabi-v7a) için optimize edilmiş ayrı paketler oluşturun. Bu, uygulamanızın boyutunu küçültecek ve kurulum başarısını artıracaktır.
Hata Ayıklama (Debugging) Süreci
Nesne tanıma hataları genellikle "yanlış sınıflandırma" veya "tespit edememe" şeklinde ortaya çıkar. Bu durumları çözmek için:
- Görüntü Ön İşleme: Kameradan gelen görüntünün renk uzayı (YUV vs RGB) ile modelin beklediği formatın aynı olduğundan emin olun.
- Güven Skoru (Confidence Score): Modelin döndürdüğü tahmin sonuçlarında bir eşik değeri (threshold) belirleyin. Örneğin, güven oranı %60'ın altında olan sonuçları ekrana yazdırmayın.
- Loglama: Modelin girişine giden tensör verilerini loglayarak, görüntünün kırpılıp kırpılmadığını veya yanlış ölçeklenip ölçeklenmediğini kontrol edin.
Sonuç
Flutter ile nesne tanıma sistemi kurmak, doğru kütüphane seçimi ve kaynak yönetimi ile oldukça verimli bir süreçtir. Bu rehberde, ML Kit ile gerçek zamanlı nesne tespitini nasıl yapacağınızı, kamera akışını nasıl yöneteceğinizi ve performansı nasıl optimize edeceğinizi öğrendiniz. Bir sonraki adım olarak, tanıdığınız nesnelerin üzerine metin veya etiket ekleyerek bir "Artırılmış Gerçeklik" (AR) arayüzü geliştirmeyi deneyebilirsiniz.
Yasal Sorumluluk Reddi: Bu makalede paylaşılan kodlar eğitim amaçlıdır. Uygulamanızda kullanacağınız yapay zeka modellerinin etik kullanımı, kişisel verilerin korunması ve KVKK/GDPR uyumluluğu tamamen geliştiricinin sorumluluğundadır. Uygulamanızın güvenlik açıklarına karşı düzenli test edilmesi önerilir.


Yorumlar (0)
Yorum Yaz