Mobil Uygulamalarda Yapay Zeka Entegrasyonu: Adım Adım Pratik Rehber

Mobil Uygulamalarda Yapay Zeka Entegrasyonu

2026 yılında, mobil uygulamalar artık sadece statik verilerin sunulduğu arayüzlerden ibaret değil. Uygulamaların çevrelerini gerçek zamanlı olarak algılaması, analiz etmesi ve buna göre tepki vermesi giderek daha fazla bekleniyor. Mobil teknoloji yığınınıza Yapay Zeka entegre etmek artık fütüristik bir lüks değil, modern bir gerekliliktir.

Ancak geliştiriciler kritik bir mimari kararla karşı karşıyadır: Yapay zeka modellerinizi API’ler aracılığıyla bulutta mı çalıştırmalısınız, yoksa doğrudan cihaz üzerinde mi?

Bu rehber, mobil uygulamalarda yapay zeka entegrasyonuna kapsamlı bir bakış sunmakta, bulut ve cihaz içi mimarileri karşılaştırmakta ve hem iOS (Swift) hem de Android (Kotlin) için adım adım pratik bir uygulama sunmaktadır.


1. Bulut Yapay Zekası vs. Cihaz İçi Yapay Zeka: Mimari Seçim

Kod yazmaya başlamadan önce, modelinizin nerede çalıştırılacağının getirdiği avantaj ve dezavantajları anlamalısınız:

Değerlendirme Bulut Yapay Zekası (API ile) Cihaz İçi Yapay Zeka (Edge)
Hesaplama Gücü Neredeyse sınırsız (GPU/TPU) Mobil donanımla sınırlı (CPU/GPU/NPU)
Gecikme Süresi Ağa bağımlı (100ms - 2s+) Ultra düşük (10ms’nin altında)
Maliyet Yüksek (düzenli API/sunucu masrafları) Sıfır (kullanıcının donanımını kullanır)
Çevrimdışı Çalışma İmkansız (aktif internet bağlantısı gerekir) Çevrimdışı %100 çalışır
Gizlilik Hassas kullanıcı verileri cihaz dışına çıkmalıdır Mutlak gizlilik (veri asla cihazı terk etmez)

2. Cihaz İçi Yapay Zeka Çatıları (Frameworks)

Cihaz içi çalıştırmayı seçerseniz, optimize edilmiş birkaç çalışma zamanı (runtime) mevcuttur:

  • Google ML Kit: Hem Android hem de iOS üzerinde yaygın görevler (görsel etiketleme, metin tanıma, yüz algılama) için mükemmel, tak-çalıştır bir SDK.
  • CoreML: Maksimum hız için Apple Neural Engine (ANE) bileşeninden yararlanmak üzere tasarlanmış Apple’ın son derece optimize edilmiş çatısı.
  • TensorFlow Lite / PyTorch Mobile: Özel yapay sinir ağı mimarilerini dağıtmak için en iyisi.
  • ONNX Runtime Mobile: PyTorch, TensorFlow vb. hemen hemen her eğitim çatısından gelen modelleri cihaz üzerinde çalıştırmanıza olanak tanıyan platformlar arası bir motor.

3. Adım Adım Uygulama: Cihaz İçi Görsel Sınıflandırma

Pratik bir özellik geliştirelim: İnternet bağlantısı kullanmadan çekilen bir fotoğraftaki nesneleri etiketleyen Cihaz İçi Görsel Sınıflandırma.

A. Android Uygulaması (Kotlin)

Google ML Kit’in Image Labeling API’sini kullanacağız. Android cihazında yerel olarak çalışan önceden eğitilmiş bir model sunar.

Adım 1: Bağımlılığı Ekleme

Bunu uygulama düzeyindeki build.gradle.kts dosyanıza ekleyin:

dependencies {
    implementation("com.google.mlkit:image-labeling:17.0.7")
}

Adım 2: Çıkarım (Inference) Mantığını Yazma

Bir URI’den görsel yüklemek ve sınıflandırıcıyı çalıştırmak için Kotlin kodu:

import android.content.Context
import android.net.Uri
import com.google.mlkit.vision.common.InputImage
import com.google.mlkit.vision.label.ImageLabeling
import com.google.mlkit.vision.label.defaults.ImageLabelerOptions

class ImageClassifier(private val context: Context) {

    fun classifyImage(imageUri: Uri, onSuccess: (List<String>) -> Unit, onFailure: (Exception) -> Unit) {
        try {
            // 1. Uri'den InputImage'ı hazırlayın
            val image = InputImage.fromFilePath(context, imageUri)
            
            // 2. Varsayılan yerel etiketleyiciyi başlatın
            val labeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
            
            // 3. Görseli işleyin
            labeler.process(image)
                .addOnSuccessListener { labels ->
                    val result = labels.map { "${it.text} (${(it.confidence * 100).toInt()}%)" }
                    onSuccess(result)
                }
                .addOnFailureListener { e ->
                    onFailure(e)
                }
        } catch (e: Exception) {
            onFailure(e)
        }
    }
}

B. iOS Uygulaması (Swift)

iOS için Apple’ın yerel Vision ve CoreML çatılarını kullanacağız. Apple, genel görsel sınıflandırma için ücretsiz, önceden derlenmiş bir MobileNetV2 modeli sunmaktadır.

Adım 1: Model ve Çatıları İçe Aktarma

Apple geliştirici web sitesinden MobileNetV2.mlmodel dosyasını indirin ve Xcode projenizin içine sürükleyin.

Adım 2: Çıkarım Mantığını Yazma

Görseli işlemek için Vision kullanan Swift kodu:

import Vision
import CoreML
import UIKit

class iOSImageClassifier {
    
    func classifyImage(image: UIImage, completion: @escaping (Result<[String], Error>) -> Void) {
        // 1. Vision sarmalayıcısını kullanarak CoreML modelini yükleyin
        guard let configuration = try? MLModelConfiguration(),
              let coreMLModel = try? MobileNetV2(configuration: configuration),
              let visionModel = try? VNCoreMLModel(for: coreMLModel) else {
            completion(.failure(NSError(domain: "Classifier", code: 1, userInfo: [NSLocalizedDescriptionKey: "Model yüklenemedi"])))
            return
        }
        
        // 2. Vision isteği oluşturun
        let request = VNCoreMLRequest(model: visionModel) { request, error in
            if let error = error {
                completion(.failure(error))
                return
            }
            
            guard let results = request.results as? [VNClassificationObservation] else {
                completion(.success([]))
                return
            }
            
            // 3. En iyi 3 sınıflandırma sonucunu biçimlendirin
            let formattedResults = results.prefix(3).map { 
                "\($0.identifier) (\(Int($0.confidence * 100))%)" 
            }
            completion(.success(formattedResults))
        }
        
        // 4. UIImage'ı CGImage'a dönüştürün ve isteği yürütün
        guard let cgImage = image.cgImage else {
            completion(.failure(NSError(domain: "Classifier", code: 2, userInfo: [NSLocalizedDescriptionKey: "Geçersiz görsel biçimi"])))
            return
        }
        
        let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
        DispatchQueue.global(qos: .userInitiated).async {
            do {
                try handler.perform([request])
            } catch {
                completion(.failure(error))
            }
        }
    }
}

4. Adım Adım Rehber: Bulut Yapay Zeka Entegrasyonu

Gelişmiş modeller (GPT-4 veya Claude gibi) veya dinamik görüntü üretimi gerektiren karmaşık görevler için donanım sınırları nedeniyle modellerin cihaz üzerinde çalıştırılması mümkün değildir. Bu durumlarda Bulut Yapay Zekadan yararlanırız.

[!IMPORTANT] Güvenlik Uyarısı: API anahtarlarını (OpenAI veya Anthropic anahtarları gibi) asla doğrudan mobil uygulama kodunuzun içine yerleştirmeyin. Bir APK veya IPA dosyasını tersine mühendislikle incelemek bu kimlik bilgilerini kolayca açığa çıkarabilir. İsteklerinizi her zaman güvenli bir arka uç proxy’si veya API Ağ Geçidi üzerinden yönlendirin.

A. Android İmplementasyonu (Kotlin)

Bulut tabanlı bir modelden yanıt almak için OkHttp kullanarak güvenli bir arka uç uç noktasına asenkron bir HTTP POST isteğinin nasıl yapılacağı aşağıda gösterilmiştir:

import okhttp3.*
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.IOException

class CloudAIService {
    private val client = OkHttpClient()
    private val mediaType = "application/json; charset=utf-8".toMediaType()

    fun generateText(prompt: String, callback: (String?) -> Unit) {
        val jsonPayload = """
            {
                "model": "gpt-4-mini",
                "messages": [{"role": "user", "content": "$prompt"}]
            }
        """.trimIndent()

        val requestBody = jsonPayload.toRequestBody(mediaType)
        val request = Request.Builder()
            .url("https://api.ghaznix.com/v1/ai/generate")
            .post(requestBody)
            .build()

        client.newCall(request).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                callback(null)
            }

            override fun onResponse(call: Call, response: Response) {
                if (response.isSuccessful) {
                    val responseString = response.body?.string()
                    callback(responseString)
                } else {
                    callback(null)
                }
            }
        })
    }
}

B. iOS İmplementasyonu (Swift)

Aşağıda, aynı Bulut Yapay Zeka arka ucuyla iletişim kurmak için modern async/await ve URLSession kullanan Swift dilindeki iOS gerçekleştirmesi yer almaktadır:

import Foundation

class CloudAIService {
    
    struct ChatRequest: Codable {
        let model: String
        let messages: [Message]
    }
    
    struct Message: Codable {
        let role: String
        let content: String
    }
    
    func generateText(prompt: String) async throws -> String {
        guard let url = URL(string: "https://api.ghaznix.com/v1/ai/generate") else {
            throw URLError(.badURL)
        }
        
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        
        let payload = ChatRequest(
            model: "gpt-4-mini",
            messages: [Message(role: "user", content: prompt)]
        )
        
        request.httpBody = try JSONEncoder().encode(payload)
        
        let (data, response) = try await URLSession.shared.data(for: request)
        
        guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
            throw URLError(.badServerResponse)
        }
        
        if let jsonString = String(data: data, encoding: .utf8) {
            return jsonString
        } else {
            throw URLError(.cannotDecodeContentData)
        }
    }
}

5. Mobil Yapay Zeka Optimizasyon Stratejileri

Modelleri doğrudan kullanıcı cihazlarına dağıtırken, pil tüketimini ve uygulamanın aşırı büyümesini önlemek için optimizasyon hayati önem taşır:

  1. Niceleme (Quantization - Eğitim Sonrası): Model ağırlıklarını 32-bit kayan noktadan (FP32) 8-bit tamsayılara (INT8) dönüştürür. Bu, model dosya boyutunu %75 oranında azaltır ve neredeyse hiç doğruluk kaybı olmadan NPU’lar üzerindeki yürütmeyi hızlandırır.
  2. Model Budama (Pruning): Doğruluğa en az katkıda bulunan gereksiz yapay sinir yolu bağlantılarını kaldırır.
  3. Donanım Delegasyonu (Hardware Delegation): Kodunuzun donanım hızlandırıcılarını hedeflediğinden emin olun (örneğin Android’de .useNNAPI(true) kullanmak veya iOS Swift yapılandırmasında GPU/Neural Engine seçeneklerini etkinleştirmek).

6. Sonuç

Yapay zekayı mobil uygulamalara entegre etmek artık sadece harici API’lere bağlanmaktan ibaret değil. Cihaz içi yürütmeyi benimseyerek, geliştiriciler gizliliğe önem veren, sıfır gecikmeli ve son derece duyarlı kullanıcı deneyimleri sunabilirler.

Ghaznix Blog’unda daha fazla teknik incelemeye göz atın →