jonjamster
4/11/2018 - 8:32 PM

Camera_PIcker_CoreML

//
//  ViewController.swift
//  WhatFlower
//
//  Created by John on 11/04/2018.
//  Copyright © 2018 Rom and Ram. All rights reserved.
//

import UIKit
import CoreML
import Vision

class ViewController: UIViewController,  UIImagePickerControllerDelegate, UINavigationControllerDelegate  {

    
    @IBOutlet weak var imageView: UIImageView!
    
        let imagePicker = UIImagePickerController()
    

    override func viewDidLoad() {
        super.viewDidLoad()
        
        imagePicker.delegate = self
        imagePicker.allowsEditing = false // "true" to allow editing
        imagePicker.sourceType = .camera
  
    }

  func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    
    if let userPickedImage =  info[UIImagePickerControllerOriginalImage] as? UIImage {
        
        imageView.image = userPickedImage
        
        
        guard let convertedCIImage = CIImage(image: userPickedImage) else {
            fatalError("Could not convert UIImage to CIImage")
        }
        
        detect(image: convertedCIImage)
        imageView.image = userPickedImage
    }
    imagePicker.dismiss(animated: true, completion: nil)
    }
    

    func detect(image: CIImage) {
        
        guard let model = try? VNCoreMLModel(for: FlowerClassifier().model) else {
            fatalError("Cannot import model!")
        }
        
        let request = VNCoreMLRequest(model: model) { (request, error) in
            let classification = request.results?.first as? VNClassificationObservation
                
     self.navigationItem.title = classification?.identifier.capitalized
   
            
        }
        let handler = VNImageRequestHandler(ciImage: image)
        
        do {
            
            
            try handler.perform([request])
            
        }
        catch {
            print(error)
            
        }
    }


    @IBAction func cameraTapped(_ sender: UIBarButtonItem) {
        
              present(imagePicker, animated: true, completion: nil)
        
    }
}