Bu dokümantasyon, CoreML ile görüntü tanımlama hakkında temel bilgileri kapsamaktadır. Açıklayıcı olması için, örnek projenin kodları adım adım yazılacaktır.

CoreML nedir?

Apple tarafından 2017 yılında yayınlanan makine öğrenmesi framework’üdür.

Apple’ın yayınladığı dokümantasyonda daha detaylı ve açıklayıcı bilgilere erişebilirsiniz.

Not: CoreML framework’ünü kullanabilmek için minimum Xcode 9 versiyonuna sahip olmanız gerekir.

Makine Öğrenmesi Nedir? 

Makine Öğrenmesi, Yapay Zeka’nın bir dalıdır. Amacı, girdi olarak aldığı verilerde (görüntü, metin, ses, istatistik) bulunan davranış özelliklerini öngörmektir.

Örneğin;

  • Yüz tanıma
  • Yüz özelliklerini algılama
  • Görüntü tanıma
  • Yaş tahmini

Makine Öğrenmesi neden önemli?

Makine Öğrenmesi yalnızca insanların yapabileceğini düşündüğümüz şeyleri yerine getirebilir. Uygulamalara insan özellikleri kazandırır. Uygulamaların daha “akıllı” olduğunu hissettirir.

Çıkarımlar:

  • Makine Öğrenmesi yeni değildir. (Native iOS uygulamaları için yeni)
  • Makine Öğrenmesi katlanarak büyüyen bir yapay zeka dalıdır.
  • Makine Öğrenmesi uygulamalarınızın daha fazlasını yapmasını sağlayabilir.

Kullanıcı Arayüzü Oluşturma

Giriş seviyesindeki basit bir uygulama için bir imageView, bir label ve bir button yeterli olacaktır.

Not: Uygulamanın dizayn edilmiş hali ve tüm kodları Github Repo‘sunda mevcuttur.

UIImagePickerController ile Görüntü Seçmek

İlk önce ViewController.swift içerisinde, imageView, label ve button tanımlanır.

PickerView kullanabilmek için selectBtnTapped fonksiyonunu implemente etmeden önce, UIViewController yanına UIImagePickerControllerDelegate ve UINavigationControllerDelegate protokollerini yazıyoruz.

Şimdi pickerView kodlamaya hazır.

Daha sonra görüntü seçimini tamamlamak için didFinishPickingMediaWithInfo  fonksiyonu implemente edilir.

Son olarak, Info.plist dosyası içerisinde “Privacy – Photo Library Usage Description” satırı oluşturulur. Bu fotoğraf galerisini kullanmak için kullanıcıya ön bilgi vermeye yarıyor. Value bölümüne istediğiniz mesajı yazabilirsiniz.

Model Entegrasyonu ve Fonksiyonların Oluşturulması

Apple/Machine-Learning sayfasında yer alan makine öğrenmesi modellerinden Places205-GoogleNet modelini indirin ve GoogLeNetPLaces.mlmodel dosyasını projenin dosyalarının bulunduğu sol bölüme ekleyin.

ViewController.swift içerisine UIKit, CoreML ve Vision’ı import edin.

didFinishPickingMediaWithInfo fonksiyonu altında recognizeImage fonksiyonunu implemente edin. Fonksiyon CIImage türünden image değişkenini parametre olarak alıyor.

Seçilen görüntüyü girdi olarak alacağımız, CIImage türünden selectedImage değişkeni tanımlanır.

PickerView’dan UIImage olarak alınan görüntüyü CIImage’e çevirmek gerekiyor. didFinishPickingMediaWithInfo fonksiyonu altında ciImage değişkenine CIImage’e çevirdiğimiz görüntüyü atıyoruz ve recognizeImage fonksiyonunu çalıştırıyoruz.

VNCoreMLRequest ile İstek Oluşturma

İlk olarak, resultLabel.text’e işlemler sürerken kullanıcıya görünecek herhangi bir metin ataması yapılır.

model değişkeni oluşturup VNCoreModel fonksiyonundan dönen değeri, model değişkenine atayın.

results değişkenine, VNClassificationObservation türünden vnrequest.results değerini atayın.

results içerisindeki ilk değeri topResult sabitine atayın. DispatchQueue.main.async metodunu implemente edin. Bu metot arka planda çalışarak sonucun güvenilirlik oranını hesaplayacak.

topResult değerinin güvenilirlik oranı hesaplanır ve metin başta oluşturduğumuz resultLabel’a atanır.

VNImageRequestHandler ile Görüntüyü İşleme

Öncelikle model bloğunun altına, görüntüyü parametre olarak alan VNImageRequestHandler fonksiyonundan dönen değer handler sabitine atanır.

Daha sonra DispatchQueue.global(qos: .userInteractive).async metodu implemente edilir. Bu metot güvenilirlik değerini hesaplayan fonksiyon gibi arka planda asenkron çalışacak.

Bloğun içerisinde do-catch bloğu yaratıyoruz ve handler.perform() request’i işliyoruz.

Fonksiyonu tamamladık. recognizeImage fonksiyonunun son hali şu şekilde:

Görüntü tanımlama ile ilgili örnek uygulama bu şekilde tamamlandı. Bu dokümanda anlatılan uygulama temel seviyededir. Daha ayrıntılı ve daha fonksiyonel uygulamalar modeller kullanılarak genişletilebilir.

Uygulamanın kodları: https://github.com/mehmetkoca/clever-image

Dokümantasyonun ingilizce versiyonu: https://www.gitbook.com/book/mehmetkoca/coreml

Facebook Yorumları