Использование завершение работы с возвратом отпечатка при классификации изображения в Swift - PullRequest
0 голосов
/ 26 января 2019

Я новичок в Swift и слежу за руководством по разработке приложения для распознавания изображений для IOS.Я полагаю, что я близок к завершению, но я все еще получаю сообщение об ошибке в XCode, говорящее "Отсутствующий аргумент для параметра 'extensionHandler" в вызове.

Я прочитал другие темы об этой ошибке, но не знаю, какПримените подсказки к моему собственному коду. В настоящее время я использую «success:», чтобы приложение возвращало классификации изображений, если есть успешная идентификация, но из того, что я прочитал в Интернете, это должно быть выполнено с помощью completeHandler.

Мой код приведен ниже, и я был бы признателен за несколько советов о том, как обойти мою проблему.

import UIKit
import VisualRecognitionV3

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    let apiKey = "plxmWfJup7nEkQOwFUTPt9AVMGNd-RYoNK8TLTM_lxq6"
    let version = "26-01-19"



    @IBOutlet weak var cameraButton: UIBarButtonItem!
    @IBOutlet weak var imageView: UIImageView!

    let imagePicker = UIImagePickerController()

    override func viewDidLoad() {
        super.viewDidLoad()

        imagePicker.delegate = self
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {

            imageView.image = image

            imagePicker.dismiss(animated: true, completion: nil)

            let visualRecognition = VisualRecognition(version: version, apiKey: apiKey)

            let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!

            let jpegData = image.jpegData(compressionQuality: 0.01)

            let fileURL = documentsURL.appendingPathComponent("tempImage.jpg")

            try? jpegData?.write(to: fileURL, options: [])

            visualRecognition.classify(imageFile: fileURL, success: { (classifiedImages) -> Void in
                print(classifiedImages)
            })

        }
        else{
            print("There was an error picking the image")
        }
    }

    @IBAction func cameraTapped(_ sender: UIBarButtonItem) {

        imagePicker.sourceType = .savedPhotosAlbum
        imagePicker.allowsEditing = false

        present(imagePicker, animated: true, completion: nil)
    }
}

Я также относительно новичок в переполнении стека, поэтому я прошу прощения, если я не вставилмой код правильный.

Спасибо.

РЕДАКТИРОВАТЬ:

Я решил это, используя следующий код:

 if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {

        imageView.image = image

        imagePicker.dismiss(animated: true, completion: nil)

        let visualRecognition = VisualRecognition(version: version, apiKey: apiKey)

        let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!

        let imageData = image.jpegData(compressionQuality: 0.5)

        let imageURL = documentsURL.appendingPathComponent("tempImage.jpg")

        try? imageData?.write(to: imageURL, options: [])

        visualRecognition.classify(imagesFile: imageURL) { response, error in
            if let error = error {
                print(error)
            }
            guard let classifiedImages = response?.result else {
                print("Failed to classify the image")
                return
            }
            let classes = classifiedImages.images.first!.classifiers.first!.classes

            for index in 0..<classes.count{
                self.classificationResults.append(classes[index].className)
            }

            print(self.classificationResults)

            if self.classificationResults.contains("hotdog"){
                DispatchQueue.main.async {
                    self.navigationItem.title = "Hotdog!"
                }
            }
            else{
                DispatchQueue.main.async {
                    self.navigationItem.title = "Not Hotdog!"
                }
            }
        }
    }
}

@IBAction func cameraTapped(_ sender: UIBarButtonItem) {

    imagePicker.sourceType = .savedPhotosAlbum
    imagePicker.allowsEditing = false

    present(imagePicker, animated: true, completion: nil)


}
...