Swift 4 – İOS 11 ile Learning Machine

Yapay Zeka artık hayatımızda git gide popülerleşen ve ilerde çokça karşımıza çıkacak olan hatta şuanda bile hayatımızın bir çok yerinde kullanılan Apple’in çıkardığı iphone X telefonlarda da yüz tanıma sayesinde insan yüzü ekran kilidi olarak kullanılmaktadır. Person of Interest dizisini izleyenler varsa orada kullanılan ve kameralara yüklenen yazılım sayesinde insanları tanıyan ve suç işleyeceğini önceden anlayan yapay zeka vardı. Diziye konu olmuş bu sistem şu an bazı ülkelerde çeşitli alanlarda kullanılmaktadır. Yapay Zeka artık dünya çapında çok büyük organizasyonlara konu olmaktadır ve geleceği şekillendireceğinde artık şüphe yok. O yüzden bu konuya oldukça ilgi göstermek gerekiyor.
İOS 11 ile birlikte gelen machine learning sayesinde uygulamalarımızda görüntü işlemenin çeşitli özelliklerini kullanabilme olanağı sağlamaktadır. Öncelikle bu linke tıklayarak Apple’ın kendi sitesine gidelim orada farklı modeller gözükmektedir biz MobileNet modelini indirelim. Daha sonra Create a new Xcode project >> Single View App diyerek projemizi oluşturuyoruz. İndirdiğimiz modeli projemizin dosyalarının içine aşağıdaki gibi aşağıdaki gibi sürükleyip bırakıyoruz.
Main.storyboard dosyamızı açıp aşağıdaki gibi düzenliyoruz.
Son olarak info.plist adlı dosyamızda sağ tıklayıp “Add Row” diyerek “Privacy – Photo Library Usage Description” fotoğraf galerisine ulaşma iznini ekliyoruz. Kurulum ve Dizayn işlemlerini bitirdik artık kod kısmına geçebiliriz.
ViewController.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
// // ViewController.swift // MachineLearning // // Created by Esat Gözcü on 29.11.2017. // Copyright © 2017 Esat Gözcü. All rights reserved. // import UIKit //Machine Learning için Gerekli Kütüphaneleri import ediyoruz import CoreML import Vision class ViewController: UIViewController , UIImagePickerControllerDelegate,UINavigationControllerDelegate{ @IBOutlet weak var sonucLabel: UILabel! @IBOutlet weak var resimView: UIImageView! var chosenImage = CIImage() override func viewDidLoad() { super.viewDidLoad() } @IBAction func resimButton(_ sender: Any) { let picker = UIImagePickerController() picker.delegate = self //Kamerayıda seçebiliriz picker.sourceType = .camera //Resim galerisine gidiyoruz picker.sourceType = .photoLibrary //Fotoğrafı düzenlemeyi aktif hale getiriyoruz picker.allowsEditing = true present(picker,animated: true,completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { //Resimi seçtikten sonra.. resimView.image = info[UIImagePickerControllerEditedImage] as? UIImage self.dismiss(animated: true, completion: nil) //Kullanıcının seçtiği resimi CIImage imajına dönüştürüyoruz if let ciImage = CIImage(image : resimView.image!) { self.chosenImage = ciImage } görüntüisleme(image: chosenImage) } func görüntüisleme(image : CIImage){ sonucLabel.text = "Hesaplanıyor...." //Modelimizi oluşturuyoruz if let model = try? VNCoreMLModel(for: GoogLeNetPlaces().model) { //Modelimizi sorgumuza aktarıyoruz let request = VNCoreMLRequest(model: model, completionHandler: { (vnrequest, error) in if let results = vnrequest.results as? [VNClassificationObservation] { //Eğer sorgumuzu alabilirsek sonucu topResult değişkenine aktarıyoruz let topResult = results.first //Program kitlenmemesi için DispatchQueue kullanıyoruz ve işlemler background'da çalışıyor DispatchQueue.main.async { //Yüzde kaç ihtimalle doğru olduğunu hesaplıyoruz let conf = (topResult?.confidence)! * 100 //Sonucu yazdırıyoruz self.sonucLabel.text = "\(conf)% ihtimalle \(topResult!.identifier)" } } }) //request oluşturduktan sonra handler oluşturup sorgumuzu değerlendiriyoruz let handler = VNImageRequestHandler(ciImage: image) DispatchQueue.global(qos: .userInteractive).async { do { //Sorgumuzu handler(çalıştırıyoruz) ediyoruz try handler.perform([request]) } catch{ print("error") } } } } } |
Swift bize görüntü işleme özelliğini bu kadar kolay hale getirmiştir ancak bunu yaptığımız zaman bir yapay zekayı ürettik diyemeyiz sadece freamwork kullanarak Apple’ın bize izin verdiği kadar görüntülerden bilgi alabildik. Asıl işin algoritma kısmı görüntünün eğitilmesi olayı oldukça zordur. Görüntü işlemenin ve yapay zekanın başlangıcının nasıl olduğunu yani her pikselin eğitilip nasıl bilgi alındığını öğrenmek asıl mesele olacaktır.
Projenin kaynak kodlarını buraya tıklayarak indirebilirsiniz.