Skip to content

YamamotoDesu/fruit-classification-starter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 

Repository files navigation

fruit-classification-starter

スクリーンショット 2022-12-30 11 17 45

Download Fruit Dataset

https://www.kaggle.com/datasets/moltean/fruits?resource=download

Set up Model

■How to Create ML

Open_Developer_Tool_と__と_Item-0

スクリーンショット_2022_12_28_9_43

スクリーンショット_2022_12_28_9_43

スクリーンショット_2022_12_28_9_45

■Set up Images

スクリーンショット_2022_12_28_9_47

■Train Model

スクリーンショット_2022_12_28_9_52

Test Model

スクリーンショット_2022_12_28_10_16

スクリーンショット_2022_12_28_10_17

Export Model

スクリーンショット_2022_12_28_11_00

Implement Source code

ViewController

    private let classifier = VisionClassfier(mlModel: FruitClassifier_1().model)

      Button("Classify") {

      if let img = self.image {
          self.classifier?.classify(img) { result in
              self.classificationLabel = result
          }
      }

  }.padding()
      .foregroundColor(Color.white)
      .background(Color.green)
      .cornerRadius(10)

VisionClassfier

import Foundation
import CoreML
import Vision
import UIKit

class VisionClassfier {
    
    private let model: VNCoreMLModel
    private var completion: (String) -> Void = { _ in }
    
    private lazy var request: [VNCoreMLRequest] = {
        
        let request = VNCoreMLRequest(model: model) { (request, error) in
            guard let results = request.results as? [VNClassificationObservation] else {
                return
            }
            
            if !results.isEmpty {
                if let result = results.first {
                    self.completion(result.identifier)
                }
            }
        }
        
        request.imageCropAndScaleOption = .centerCrop
        return [request]
    }()
    
    init?(mlModel: MLModel) {
        if let model = try? VNCoreMLModel(for: mlModel) {
            self.model = model
        } else {
            return nil
        }
    }
    
    func classify(_ image: UIImage, completion: @escaping (String) -> Void) {
        
        self.completion = completion
        
        DispatchQueue.global().async {
            
            guard let cgImage = image.cgImage else {
                return
            }
            
            let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
            
            do {
                try handler.perform(self.request)
            } catch {
                print(error.localizedDescription)
            }
        }
    }
}

Releases

No releases published

Packages

No packages published

Languages