İçeriğe geç

CoreML kullanımı

Merhabalar bu yazımda iOS 11 ile aramıza katılan, yeni nesil uygulamalarda yapay zeka kullanımını teşvik eden kütüphane Core ML kullanımını göstereceğim.

Bu kütüphane içerik olarak kendi içerisinde yapay zeka algoritmaları bulunmamakta. Bilindik yapay zeka kütüphanelerinde yazdığınız modelleri, iOS platformunda kullanmanızı sağlamakta. Bu sayede bi kaç satır kod ile uygulamanıza yapay zeka entregrasyonunu sağlamış oluyorsunuz. Bunun yanı sıra uygulamanızı Vision ve ARKit ile destekleyerek başarılı uygulamalar geliştirebilirsiniz.

Yukardaki tabloda desteklenen makine öğrenmesi modellerini ve bunları kodlayabileceğiniz araçları göstermekte. Kendi mlmodel yapınızı kodlamak için dil olarak Python kullanmanız kaçınılmazdır. Yapay zeka ve veri bilimi alanında kendinizi geliştirmek istiyorsanız Python dilinede bir el atmanız faydanıza olur 🙂

Bunun yanı sıra uygulamamızda kullanacağımız bazı güzel modelleri bu linkten erişebilir ve kullanabilirsiniz.

Aşağıda basit bir şekilde indirdiğiniz model yapısını uygulamanız içinde kullanımını görebilirsiniz.

import UIKit
import CoreML

class mainVC: UIViewController {

    @IBOutlet weak var imgView: UIImageView!
    
    var picker = UIImagePickerController()
    var img:UIImage!
    var model:AgeNet!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        picker.delegate = self
        picker.allowsEditing = true
        picker.sourceType = .photoLibrary
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        model = AgeNet()
    }
    
    @IBAction func photoLibAction(_ sender: Any) {
        present(picker, animated: true, completion: nil)
    }
    
    @IBAction func startModelAction(_ sender: Any) {
        do {
            let prediction = try model.prediction(data: setModelImage(img)!)
            print(prediction.prob) //
        } catch {
            print(error)
        }
    }
    
    func setModelImage(_ image:UIImage) -> CVPixelBuffer? {
        UIGraphicsBeginImageContextWithOptions(CGSize(width: 227, height: 227), true, 2.0)
        image.draw(in: CGRect(x: 0, y: 0, width: 227, height: 227))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        
        let attrs = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue, kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue] as CFDictionary
        var pixelBuffer : CVPixelBuffer?
        let status = CVPixelBufferCreate(kCFAllocatorDefault, Int(newImage.size.width), Int(newImage.size.height), kCVPixelFormatType_32ARGB, attrs, &pixelBuffer)
        
        guard (status == kCVReturnSuccess) else {
            return nil
        }
        
        CVPixelBufferLockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0))
        let pixelData = CVPixelBufferGetBaseAddress(pixelBuffer!)
        
        let rgbColorSpace = CGColorSpaceCreateDeviceRGB()
        let context = CGContext(data: pixelData, width: Int(newImage.size.width), height: Int(newImage.size.height), bitsPerComponent: 8, bytesPerRow: CVPixelBufferGetBytesPerRow(pixelBuffer!), space: rgbColorSpace, bitmapInfo: CGImageAlphaInfo.noneSkipFirst.rawValue) //3
        
        context?.translateBy(x: 0, y: newImage.size.height)
        context?.scaleBy(x: 1.0, y: -1.0)
        
        UIGraphicsPushContext(context!)
        newImage.draw(in: CGRect(x: 0, y: 0, width: newImage.size.width, height: newImage.size.height))
        UIGraphicsPopContext()
        CVPixelBufferUnlockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0))

        return pixelBuffer
    }
}//

extension mainVC: UIImagePickerControllerDelegate,UINavigationControllerDelegate {
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else {
            return
        }
        
        imgView.image = image
        img = image
        
        defer {dismiss(animated: true, completion: nil)}
    }
    
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: true, completion: nil)
    }
}

Not: Model yapısını Xcode projenize aldıktan sonra detaylarını görüntüleyebilir ve belirtilen boyutta ve yapıda resim,yazı kullandığınızdan emin olunuz.

 

Kategori:iOS

Bu yazı yorumlara kapalı.

Copyright © 2022 Kenan Atmaca