Gömülü sistemlerde yapay zeka uygulamaları geliştirmek isteyenler için TensorFlow Lite (TFLite), düşük boyutlu ve hızlı çalışan modeller sunar. C++ diliyle entegre edilerek özellikle Android cihazlar, Raspberry Pi, Nvidia Jetson gibi edge cihazlarda yüksek performanslı nesne tanıma sistemleri kurulabilir.
Bu rehberde, TensorFlow Lite C++ kullanarak COCO etiketli bir nesne tanıma uygulamasını sıfırdan nasıl geliştireceğinizi adım adım açıklıyor, performans optimizasyonu ve etiket yönetimi konularına kadar her detaya değiniyoruz.
TensorFlow Lite Nedir?
TensorFlow Lite, Google tarafından geliştirilen açık kaynaklı bir kütüphanedir ve TensorFlow modellerinin düşük güçlü cihazlarda hızlı çalışmasını sağlar.
-
Düşük gecikme süresi
-
Küçük boyutlu model dosyaları (.tflite)
-
Android/iOS/Linux destekli
-
C++, Java, Python, Swift entegrasyonları
⚙️ Hazırlık: Gerekli Dosyalar ve Yapılandırma
-
.tflite
model dosyanız (mobilnetv2-ssd, yolov5-lite vs.) -
labelmap.txt
veyacoco_labels.txt
(COCO dataset’e ait sınıf isimleri) -
TensorFlow Lite C++ API
-
OpenCV (görüntü işleme için)
-
CMake veya Makefile ile yapı sistemi
sudo apt install libopencv-dev
COCO Label Nedir?
COCO (Common Objects in Context), 80 sınıftan oluşan yaygın nesne tanıma veri setidir.
Örnek sınıflar:
-
person, bicycle, car, motorbike, airplane, dog, cat, chair, tv...
Kullanacağınız coco_labels.txt
dosyası genellikle şu şekildedir:
0
person
bicycle
car
...
İlk satır boş (background class) olmalıdır. Index sırası modele bağlı olarak değişebilir.
️ C++ ile TensorFlow Lite Modelini Yüklemek
#include "tensorflow/lite/model.h"
#include "tensorflow/lite/interpreter.h"
#include "tensorflow/lite/kernels/register.h"
#include "tensorflow/lite/tools/gen_op_registration.h"
std::unique_ptr model =
tflite::FlatBufferModel::BuildFromFile("model.tflite");
Interpreter yapılandırması:
std::unique_ptr interpreter;
tflite::ops::builtin::BuiltinOpResolver resolver;
tflite::InterpreterBuilder(*model, resolver)(&interpreter);
interpreter->AllocateTensors();
Görüntü Girişi Hazırlama (OpenCV ile)
cv::Mat frame;
cv::resize(frame, resized, cv::Size(300, 300)); // model input boyutu
uint8_t* input = interpreter->typed_input_tensor(0);
memcpy(input, resized.data, 300 * 300 * 3);
Çıktı Tensor’larını Okumak
float* boxes = interpreter->typed_output_tensor(0);
float* class_ids = interpreter->typed_output_tensor(1);
float* scores = interpreter->typed_output_tensor(2);
int* detections = interpreter->typed_output_tensor(3);
Her kutu: [ymin, xmin, ymax, xmax] ve tüm değerler 0-1 arasındadır.
Tespit Sonuçlarını Görselleştirme
for (int i = 0; i < detections[0]; ++i) {
if (scores[i] > 0.5) {
int class_id = class_ids[i];
cv::rectangle(frame, cv::Rect(...));
cv::putText(frame, labels[class_id], ...);
}
}
Performans İyileştirme Önerileri
-
Quantized model (INT8) kullanın
-
Delegate kullanımı: GPU Delegate, NNAPI
-
Model boyutunu düşürün (mobilnet vs.)
-
Input boyutunu düşürün (300x300 → 224x224)
-
Çerçeve başına analiz süresini sınırlayın
Raspberry Pi Uygulama Senaryosu
-
Raspberry Pi OS Lite kurun ve OpenCV + TFLite kütüphanelerini derleyin
-
Raspberry Pi Camera Module kullanın veya USB kamera bağlayın
-
Python yerine C++ performansı ile gerçek zamanlı detection sağlayın
-
GPU destekli çalıştırma için Coral USB Accelerator gibi ek donanım kullanabilirsiniz
Android NDK ile C++ Object Detection
-
Android Studio üzerinden NDK kurulumu yapılır
-
TFLite C++ Library JNI ile çağrılır
-
OpenCV Android SDK kullanılarak kamera entegrasyonu yapılabilir
-
.tflite model,
assets
klasörüne eklenipAssetManager
ile yüklenir
❗️ Sık Karşılaşılan Sorunlar ve Çözümleri
Sorun | Açıklama ve Çözüm |
---|---|
Model input boyutu uyuşmazlığı | OpenCV resize ile uygun boyuta getirin (örneğin 300x300) |
Interpreter AllocateTensors hata veriyor | Model dosyası bozuk olabilir, doğru dosya yüklendiğinden emin olun |
Sınıf ismi yerine sadece sayı gözüküyor | Label dosyasını satır satır okuyun, index’ler uyumlu mu kontrol edin |
Performans çok düşük | INT8 quantized model kullanın, Raspberry Pi’de OpenGL hızlandırma açın |
Android’de model yüklenemiyor | assets klasöründen dosyayı AssetManager ile açtığınızdan emin olun |
Frame anlık güncellenmiyor | Kamera akışını cv::VideoCapture ile doğru şekilde bağlayın |
Sonuç
TensorFlow Lite ile C++ tarafında çalışan gerçek zamanlı nesne tanıma sistemleri kurmak, COCO gibi yaygın veri setleri sayesinde oldukça esnektir. Etiket yönetimi, giriş/çıkış tensor analizi, Raspberry Pi & Android gibi cihazlara deploy süreci ve performans optimizasyonları bu tür projelerde başarıyı belirleyen ana etkenlerdir.