Start/Stop food detection

Add a function to setup the camera preview layer:

func setupPreviewLayer() {
    guard videoLayer == nil else { return }
    if let videoLayer = passioSDK.getPreviewLayer() {
        self.videoLayer = videoLayer
        videoLayer.frame = view.bounds
        DispatchQueue.main.async { [weak self] in
            self?.view.layer.insertSublayer(videoLayer, at: 0)
        }
    }
}

Add the method startFoodDetection() This code will throw a missing delegate conformance error that we will resolve in the next step, ignore it for now.

func startFoodDetection() {
    setupPreviewLayer()
    DispatchQueue.global(qos: .userInitiated).async { [weak self] in
        guard let self else { return }
        
        let config = FoodDetectionConfiguration(detectVisual: true,
                                                volumeDetectionMode: .none,
                                                detectBarcodes: true,
                                                detectPackagedFood: true)
        passioSDK.startFoodDetection(detectionConfig: config,
                                     foodRecognitionDelegate: self) { ready in
                print("SDK was not configured correctly")
        }
    }
}

Add a function to request authorization to use the camera and start recognition. Call the function from viewWillAppear:

func checkCameraAuthorizationAndStartDetection() {
    if AVCaptureDevice.authorizationStatus(for: .video) == .authorized {
        startFoodDetection()
    } else {
        AVCaptureDevice.requestAccess(for: .video) { granted in
            if granted {
                DispatchQueue.main.async { [weak self] in
                    self?.startFoodDetection()
                }
            } else {
                print("The user didn't grant access to use camera")
            }
        }
    }
}
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    checkCameraAuthorizationAndStartDetection()
}

Create a function to stop Food Detection and call it from viewWillDisappear:

func stopFoodDetection() {
    passioSDK.stopFoodDetection()
    videoLayer?.removeFromSuperlayer()
    videoLayer = nil
}
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    stopFoodDetection()
}

If at any point you need help from the Passio team, please reach out to us at support@passiolife.com

Last updated