我正在编写一个使用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包括在分类调用中,但仍然遇到相同的错误。真的很想看看如何使用设备中的本地图片来成功对其进行分类
答案 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>