Я новичок в 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)
}