使用设备中的本地图像以成功对其进行分类

时间:2018-12-31 22:01:00

标签: swift

我正在编写一个使用VisualRecognitiontion.classify的视觉识别应用程序,以对图像进行分类。我已经配置了Swift环境,并且在包含来自互联网的URL时无法对图像进行分类:

我现在创建了一个使用相机和照片库的应用程序,以允许用户拍摄照片并将其分类。但是,将fileURL从设备传递到VisualRecognition服务时遇到了问题。

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 visualRecongnition = VisualRecognition(version: version, apiKey: apiKey)

        let imageData = image.jpegData(compressionQuality: 0.01)

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

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

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


        visualRecongnition.classify(imageFile: fileURL, success: { (classifiedImages) in
            print(classifiedImages)
        }) // getting error here " Missing argument for parameter 'completionHandler' in call"

    }else {

        print("There was an error picking Image")
    }
}

我什至试图像正常工作的外部URL一样直接将NSURL包括在分类调用中,但仍然遇到相同的错误。真的很想看看如何使用设备中的本地图片来成功对其进行分类

2 个答案:

答案 0 :(得分:1)

问题是您对classify的调用与classify方法的签名不对应。在这一行:

visualRecongnition.classify(imageFile: fileURL, success: { (classifiedImages) in

success更改为completionHandler,然后在闭包中添加第二个参数(即使您忽略它),如下所示:

visualRecongnition.classify(imageFile: fileURL, completionHandler: { classifiedImages,_ in

答案 1 :(得分:0)

您必须首先请求使用相机和媒体库的权限。在源代码模式下打开Info.plist文件,并添加以下行:

<key>NSCameraUsageDescription</key>
<string>Ask for permission to use camera.</string>

<key>NSPhotoLibraryUsageDescription</key>
<string>Ask for permission to use Photo Library</string>

如果您还希望能够将图像写入相机胶卷,请添加以下内容:

<key>NSPhotoLibraryAddUsageDescription</key>
<string>Ask for permission to save images to Photo library</string>