top of page
  • Writer's pictureRuben van Breda

Image Classifier: CreateML







//

// ViewController.swift

// SPVision

//

// Created by Ruben van Breda on 2020/09/03.

// Copyright © 2020 Ruben van Breda. All rights reserved.

//


import UIKit

import AVKit

import CoreML

import Vision


class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {


@IBOutlet weak var itemText: UILabel!

var itemString : String = "nothing"

override func viewDidLoad() {

super.viewDidLoad()

self.hideKeyboardWhenTappedAround()

//Here we start up the camera

let captureSession = AVCaptureSession()

captureSession.sessionPreset = .photo

guard let captureDevice = AVCaptureDevice.default(for: .video) else {return}

guard let input = try? AVCaptureDeviceInput(device: captureDevice) else {return}

captureSession.addInput(input)

captureSession.startRunning()

let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)

view.layer.addSublayer(previewLayer)

previewLayer.frame = view.frame

let dataOutput = AVCaptureVideoDataOutput()

dataOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))

captureSession.addOutput(dataOutput) // monitor image frames

// self.itemText.text = "\(itemString)"

}

//each frame that is capture

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {

// print("Camera captured frame ", Date())

guard let pixelBuffer : CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {return}

guard let model = try? VNCoreMLModel(for: ImageClassifier().model) else {return}

let request = VNCoreMLRequest(model: model)

{ (finshedReq, err) in

guard let results = finshedReq.results as? [VNClassificationObservation] else {return}

// guard let firstObservation = results.first else {return}

guard var firstObservation = results.first else {return}

self.itemString = firstObservation.identifier.description

DispatchQueue.main.async { // Correct

self.itemText.text = "\(self.itemString) item"

}

print(self.itemString, firstObservation.confidence)

}

try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer,options: [:]).perform([request])

}


}

// Put this piece of code anywhere you like

extension UIViewController {

func hideKeyboardWhenTappedAround() {

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))

tap.cancelsTouchesInView = false

view.addGestureRecognizer(tap)

}


@objc func dismissKeyboard() {

view.endEditing(true)

}

}

2 views0 comments

Recent Posts

See All

Commentaires


bottom of page